diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c index 45c8c9b2718..cf9cc7deabd 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 45a2003125d..23a34398088 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;