brw_blorp_surface_info_init(struct blorp_context *blorp,
struct brw_blorp_surface_info *info,
const struct blorp_surf *surf,
- unsigned int level, unsigned int layer,
+ unsigned int level, float layer,
enum isl_format format, bool is_render_target)
{
memset(info, 0, sizeof(*info));
void
blorp_blit(struct blorp_batch *batch,
const struct blorp_surf *src_surf,
- unsigned src_level, unsigned src_layer,
+ unsigned src_level, float src_layer,
enum isl_format src_format, struct isl_swizzle src_swizzle,
const struct blorp_surf *dst_surf,
unsigned dst_level, unsigned dst_layer,
LOAD_INPUT(discard_rect, glsl_vec4_type())
LOAD_INPUT(rect_grid, glsl_vec4_type())
LOAD_INPUT(coord_transform, glsl_vec4_type())
- LOAD_INPUT(src_z, glsl_uint_type())
+ LOAD_INPUT(src_z, glsl_float_type())
LOAD_INPUT(src_offset, glsl_vector_type(GLSL_TYPE_UINT, 2))
LOAD_INPUT(dst_offset, glsl_vector_type(GLSL_TYPE_UINT, 2))
LOAD_INPUT(src_inv_size, glsl_vector_type(GLSL_TYPE_FLOAT, 2))
* more explicit in the future.
*/
assert(pos->num_components >= 2);
- pos = nir_vec3(b, nir_channel(b, pos, 0), nir_channel(b, pos, 1),
- nir_load_var(b, v->v_src_z));
+ if (op == nir_texop_txf || op == nir_texop_txf_ms || op == nir_texop_txf_ms_mcs) {
+ pos = nir_vec3(b, nir_channel(b, pos, 0), nir_channel(b, pos, 1),
+ nir_f2i32(b, nir_load_var(b, v->v_src_z)));
+ } else {
+ pos = nir_vec3(b, nir_channel(b, pos, 0), nir_channel(b, pos, 1),
+ nir_load_var(b, v->v_src_z));
+ }
tex->src[0].src_type = nir_tex_src_coord;
tex->src[0].src = nir_src_for_ssa(pos);
void
blorp_blit(struct blorp_batch *batch,
const struct blorp_surf *src_surf,
- unsigned src_level, unsigned src_layer,
+ unsigned src_level, float src_layer,
enum isl_format src_format, struct isl_swizzle src_swizzle,
const struct blorp_surf *dst_surf,
unsigned dst_level, unsigned dst_layer,
struct isl_view view;
/* Z offset into a 3-D texture or slice of a 2-D array texture. */
- uint32_t z_offset;
+ float z_offset;
uint32_t tile_x_sa, tile_y_sa;
};
brw_blorp_surface_info_init(struct blorp_context *blorp,
struct brw_blorp_surface_info *info,
const struct blorp_surf *surf,
- unsigned int level, unsigned int layer,
+ unsigned int level, float layer,
enum isl_format format, bool is_render_target);
void
blorp_surf_convert_to_single_slice(const struct isl_device *isl_dev,
/* Minimum layer setting works for all the textures types but texture_3d
* for which the setting has no effect. Use the z-coordinate instead.
*/
- uint32_t src_z;
+ float src_z;
/* Pad out to an integral number of registers */
uint32_t pad[1];