Mesa (main): freedreno/ir3: fix image-to-tex flags, remove 3d -> array hack

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 16 00:57:00 UTC 2021


Module: Mesa
Branch: main
Commit: 8c9a86cb577e3eda370cb06178aa3331307a777c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8c9a86cb577e3eda370cb06178aa3331307a777c

Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date:   Mon Nov 15 18:31:24 2021 -0500

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 <imirkin at alum.mit.edu>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13804>

---

 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 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;



More information about the mesa-commit mailing list