Mesa (main): pan/bi: Add second destination to TEXC

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Nov 12 16:47:45 UTC 2021


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

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Mon Nov  8 10:36:54 2021 -0500

pan/bi: Add second destination to TEXC

Used to model dual texturing, which writes to separate sets of staging
registers.

Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13723>

---

 src/panfrost/bifrost/ISA.xml           | 3 ++-
 src/panfrost/bifrost/bifrost_compile.c | 4 ++--
 src/panfrost/bifrost/bir.c             | 2 ++
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/panfrost/bifrost/ISA.xml b/src/panfrost/bifrost/ISA.xml
index c6cb09e7929..2a6b3ff79de 100644
--- a/src/panfrost/bifrost/ISA.xml
+++ b/src/panfrost/bifrost/ISA.xml
@@ -7689,13 +7689,14 @@
     </mod>
   </ins>
 
-  <ins name="+TEXC" staging="rw=sr_count" mask="0xffc00" exact="0xd7000" message="tex">
+  <ins name="+TEXC" staging="rw=sr_count" mask="0xffc00" exact="0xd7000" message="tex" dests="2">
     <src start="0"/>
     <src start="3"/>
     <src start="6" mask="0xf7"/>
     <mod name="skip" start="9" size="1" opt="skip"/>
     <!-- not actually encoded, but used for IR -->
     <immediate name="sr_count" size="4" pseudo="true"/>
+    <immediate name="sr_count_2" size="4" pseudo="true"/>
     <mod name="lod_mode" start="13" size="1" default="zero_lod" pseudo="true">
       <opt>computed_lod</opt>
       <opt>zero_lod</opt>
diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c
index 44bf2334565..2b8967b6160 100644
--- a/src/panfrost/bifrost/bifrost_compile.c
+++ b/src/panfrost/bifrost/bifrost_compile.c
@@ -2769,9 +2769,9 @@ bi_emit_texc(bi_builder *b, nir_tex_instr *instr)
 
         uint32_t desc_u = 0;
         memcpy(&desc_u, &desc, sizeof(desc_u));
-        bi_texc_to(b, sr_count ? idx : bi_dest_index(&instr->dest),
+        bi_texc_to(b, sr_count ? idx : bi_dest_index(&instr->dest), bi_null(),
                         idx, cx, cy, bi_imm_u32(desc_u), !computed_lod,
-                        sr_count);
+                        sr_count, 0);
 
         /* Explicit copy to facilitate tied operands */
         if (sr_count) {
diff --git a/src/panfrost/bifrost/bir.c b/src/panfrost/bifrost/bir.c
index 78a2965b8a0..92e32f1bb45 100644
--- a/src/panfrost/bifrost/bir.c
+++ b/src/panfrost/bifrost/bir.c
@@ -107,6 +107,8 @@ bi_count_write_registers(const bi_instr *ins, unsigned d)
                         return bi_count_staging_registers(ins);
         } else if (ins->op == BI_OPCODE_SEG_ADD_I64) {
                 return 2;
+        } else if (ins->op == BI_OPCODE_TEXC && d == 1) {
+                return ins->sr_count_2;
         }
 
         return 1;



More information about the mesa-commit mailing list