agx: Legalize image MS index
Fix 2D MSAA Array tests in arb_shader_image_load_store-max-size Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26056>
This commit is contained in:

committed by
Marge Bot

parent
019a52fff0
commit
b6b01aa1f2
@@ -890,7 +890,11 @@ agx_emit_image_load(agx_builder *b, agx_index dst, nir_intrinsic_instr *intr)
|
||||
if (is_array && is_ms) {
|
||||
agx_index layer = agx_temp(b->shader, AGX_SIZE_16);
|
||||
agx_subdivide_to(b, layer, coord[coord_comps], 0);
|
||||
coord[coord_comps++] = agx_vec2(b, ms_index, layer);
|
||||
|
||||
assert(ms_index.size == AGX_SIZE_16);
|
||||
agx_index vec = agx_vec2(b, ms_index, layer);
|
||||
vec.size = AGX_SIZE_32;
|
||||
coord[coord_comps++] = vec;
|
||||
} else if (is_ms) {
|
||||
agx_index tmp = agx_temp(b->shader, AGX_SIZE_32);
|
||||
agx_mov_to(b, tmp, ms_index);
|
||||
|
@@ -455,7 +455,7 @@ image_texel_address(nir_builder *b, nir_intrinsic_instr *intr,
|
||||
return libagx_buffer_texel_address(b, meta_ptr, coord, blocksize_B);
|
||||
} else {
|
||||
return libagx_image_texel_address(
|
||||
b, meta_ptr, coord, intr->src[2].ssa, blocksize_B,
|
||||
b, meta_ptr, coord, nir_u2u32(b, intr->src[2].ssa), blocksize_B,
|
||||
nir_imm_bool(b, dim == GLSL_SAMPLER_DIM_MS), nir_imm_bool(b, layered),
|
||||
nir_imm_bool(b, return_index));
|
||||
}
|
||||
@@ -515,6 +515,9 @@ lower_images(nir_builder *b, nir_intrinsic_instr *intr, UNUSED void *data)
|
||||
case nir_intrinsic_image_store:
|
||||
case nir_intrinsic_bindless_image_load:
|
||||
case nir_intrinsic_bindless_image_store: {
|
||||
/* Legalize MSAA index */
|
||||
nir_src_rewrite(&intr->src[2], nir_u2u16(b, intr->src[2].ssa));
|
||||
|
||||
switch (nir_intrinsic_image_dim(intr)) {
|
||||
case GLSL_SAMPLER_DIM_1D:
|
||||
lower_1d_image(b, intr);
|
||||
@@ -525,15 +528,13 @@ lower_images(nir_builder *b, nir_intrinsic_instr *intr, UNUSED void *data)
|
||||
return true;
|
||||
|
||||
case GLSL_SAMPLER_DIM_CUBE:
|
||||
if (nir_intrinsic_image_array(intr)) {
|
||||
if (nir_intrinsic_image_array(intr))
|
||||
lower_cube_array_image(b, intr);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user