Mesa (main): freedreno/ir3+isa: Cleanup bindless cat5 samp/tex encoding

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Oct 15 16:29:51 UTC 2021


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

Author: Rob Clark <robdclark at chromium.org>
Date:   Tue Oct 12 10:57:24 2021 -0700

freedreno/ir3+isa: Cleanup bindless cat5 samp/tex encoding

Don't let the way they are encoded at the isa level leak thru to the
ir3 level.

Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13353>

---

 src/freedreno/ir3/ir3_compiler_nir.c |  9 +++------
 src/freedreno/ir3/ir3_parser.y       |  2 +-
 src/freedreno/ir3/ir3_print.c        | 10 ++--------
 src/freedreno/isa/ir3-cat5.xml       |  7 +------
 4 files changed, 7 insertions(+), 21 deletions(-)

diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c
index 540d7b606c6..420e5b40837 100644
--- a/src/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/freedreno/ir3/ir3_compiler_nir.c
@@ -1117,7 +1117,7 @@ struct tex_src_info {
    /* For prefetch */
    unsigned tex_base, samp_base, tex_idx, samp_idx;
    /* For normal tex instructions */
-   unsigned base, combined_idx, a1_val, flags;
+   unsigned base, a1_val, flags;
    struct ir3_instruction *samp_tex;
 };
 
@@ -1150,11 +1150,9 @@ get_image_samp_tex_src(struct ir3_context *ctx, nir_intrinsic_instr *intr)
          if (info.tex_idx < 16) {
             /* Everything fits within the instruction */
             info.base = info.tex_base;
-            info.combined_idx = info.samp_idx | (info.tex_idx << 4);
          } else {
             info.base = info.tex_base;
             info.a1_val = info.tex_idx << 3;
-            info.combined_idx = 0;
             info.flags |= IR3_INSTR_A1EN;
          }
          info.samp_tex = NULL;
@@ -1200,7 +1198,8 @@ emit_sam(struct ir3_context *ctx, opc_t opc, struct tex_src_info info,
    }
    if (info.flags & IR3_INSTR_B) {
       sam->cat5.tex_base = info.base;
-      sam->cat5.samp = info.combined_idx;
+      sam->cat5.samp = info.samp_idx;
+      sam->cat5.tex  = info.tex_idx;
    }
    return sam;
 }
@@ -2305,11 +2304,9 @@ get_tex_samp_tex_src(struct ir3_context *ctx, nir_tex_instr *tex)
               info.tex_base == info.samp_base)) {
             /* Everything fits within the instruction */
             info.base = info.tex_base;
-            info.combined_idx = info.samp_idx | (info.tex_idx << 4);
          } else {
             info.base = info.tex_base;
             info.a1_val = info.tex_idx << 3 | info.samp_base;
-            info.combined_idx = info.samp_idx;
             info.flags |= IR3_INSTR_A1EN;
          }
          info.samp_tex = NULL;
diff --git a/src/freedreno/ir3/ir3_parser.y b/src/freedreno/ir3/ir3_parser.y
index 3be8fa0426b..63f1cccd946 100644
--- a/src/freedreno/ir3/ir3_parser.y
+++ b/src/freedreno/ir3/ir3_parser.y
@@ -984,7 +984,7 @@ cat5_flags:
 |                  cat5_flag cat5_flags
 
 cat5_samp:         T_SAMP         { instr->cat5.samp = $1; }
-cat5_tex:          T_TEX          { if (instr->flags & IR3_INSTR_B) instr->cat5.samp |= ($1 << 4); else instr->cat5.tex = $1; }
+cat5_tex:          T_TEX          { instr->cat5.tex = $1; }
 cat5_type:         '(' type ')'   { instr->cat5.type = $2; }
 cat5_a1:           src_reg        { instr->flags |= IR3_INSTR_A1EN; }
 
diff --git a/src/freedreno/ir3/ir3_print.c b/src/freedreno/ir3/ir3_print.c
index 423097525fc..dd57bdc6853 100644
--- a/src/freedreno/ir3/ir3_print.c
+++ b/src/freedreno/ir3/ir3_print.c
@@ -340,14 +340,8 @@ print_instr(struct log_stream *stream, struct ir3_instruction *instr, int lvl)
    }
 
    if (is_tex(instr) && !(instr->flags & IR3_INSTR_S2EN)) {
-      if (!!(instr->flags & IR3_INSTR_B)) {
-         if (!!(instr->flags & IR3_INSTR_A1EN)) {
-            mesa_log_stream_printf(stream, ", s#%d", instr->cat5.samp);
-         } else {
-            mesa_log_stream_printf(stream, ", s#%d, t#%d",
-                                   instr->cat5.samp & 0xf,
-                                   instr->cat5.samp >> 4);
-         }
+      if (!!(instr->flags & IR3_INSTR_B) && !!(instr->flags & IR3_INSTR_A1EN)) {
+         mesa_log_stream_printf(stream, ", s#%d", instr->cat5.samp);
       } else {
          mesa_log_stream_printf(stream, ", s#%d, t#%d", instr->cat5.samp,
                                 instr->cat5.tex);
diff --git a/src/freedreno/isa/ir3-cat5.xml b/src/freedreno/isa/ir3-cat5.xml
index a75c428d697..38fa5b77c40 100644
--- a/src/freedreno/isa/ir3-cat5.xml
+++ b/src/freedreno/isa/ir3-cat5.xml
@@ -481,12 +481,7 @@ SOFTWARE.
 	<display/>
 	<assert low="0" high="3">0000</assert>
 	<encode type="struct ir3_instruction *">
-		<!--
-			TODO properly decouple the encoding from ir3 IR in this
-			case.. the IR has no business knowing how this gets
-			encoded into "SRC3"..
-		 -->
-		<map name="TEX">src->cat5.samp >> 4</map>
+		<map name="TEX">src->cat5.tex</map>
 	</encode>
 </bitset>
 



More information about the mesa-commit mailing list