From b6b01aa1f255cca3237098ec1dd99b9d4ccd35c9 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 23 Oct 2023 08:38:05 -0400 Subject: [PATCH] agx: Legalize image MS index Fix 2D MSAA Array tests in arb_shader_image_load_store-max-size Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/compiler/agx_compile.c | 6 +++++- src/asahi/compiler/agx_nir_lower_texture.c | 13 +++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/asahi/compiler/agx_compile.c b/src/asahi/compiler/agx_compile.c index a6b19dbf4aa..e7b57432c37 100644 --- a/src/asahi/compiler/agx_compile.c +++ b/src/asahi/compiler/agx_compile.c @@ -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); diff --git a/src/asahi/compiler/agx_nir_lower_texture.c b/src/asahi/compiler/agx_nir_lower_texture.c index 7e6e4bf65b7..8e21ebe97ae 100644 --- a/src/asahi/compiler/agx_nir_lower_texture.c +++ b/src/asahi/compiler/agx_nir_lower_texture.c @@ -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; } }