From 8c9a86cb577e3eda370cb06178aa3331307a777c Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Mon, 15 Nov 2021 18:31:24 -0500 Subject: [PATCH] freedreno/ir3: fix image-to-tex flags, remove 3d -> array hack The function would return both the 3d and array flags set for 2d array, and would return just 3d for cubes. Fix the flags so that they are appropriate for images. Signed-off-by: Ilia Mirkin Part-of: --- src/freedreno/ir3/ir3_compiler_nir.c | 7 ------- src/freedreno/ir3/ir3_image.c | 8 ++++---- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c index 45c8c9b..cf9cc7d 100644 --- a/src/freedreno/ir3/ir3_compiler_nir.c +++ b/src/freedreno/ir3/ir3_compiler_nir.c @@ -1319,13 +1319,6 @@ emit_intrinsic_load_image(struct ir3_context *ctx, nir_intrinsic_instr *intr, unsigned flags, ncoords = ir3_get_image_coords(intr, &flags); type_t type = ir3_get_type_for_image_intrinsic(intr); - /* hmm, this seems a bit odd, but it is what blob does and (at least - * a5xx) just faults on bogus addresses otherwise: - */ - if (flags & IR3_INSTR_3D) { - flags &= ~IR3_INSTR_3D; - flags |= IR3_INSTR_A; - } info.flags |= flags; for (unsigned i = 0; i < ncoords; i++) diff --git a/src/freedreno/ir3/ir3_image.c b/src/freedreno/ir3/ir3_image.c index 45a2003..23a3439 100644 --- a/src/freedreno/ir3/ir3_image.c +++ b/src/freedreno/ir3/ir3_image.c @@ -97,14 +97,14 @@ ir3_image_to_tex(struct ir3_ibo_mapping *mapping, unsigned image) unsigned ir3_get_image_coords(const nir_intrinsic_instr *instr, unsigned *flagsp) { + enum glsl_sampler_dim dim = nir_intrinsic_image_dim(instr); unsigned coords = nir_image_intrinsic_coord_components(instr); unsigned flags = 0; - if (coords == 3) - flags |= IR3_INSTR_3D; - - if (nir_intrinsic_image_array(instr)) + if (dim == GLSL_SAMPLER_DIM_CUBE || nir_intrinsic_image_array(instr)) flags |= IR3_INSTR_A; + else if (dim == GLSL_SAMPLER_DIM_3D) + flags |= IR3_INSTR_3D; if (flagsp) *flagsp = flags; -- 2.7.4