pan/va: Model image load instructions
authorAlyssa Rosenzweig <alyssa@collabora.com>
Wed, 30 Mar 2022 19:51:38 +0000 (15:51 -0400)
committerAlyssa Rosenzweig <alyssa@collabora.com>
Thu, 7 Apr 2022 13:27:32 +0000 (09:27 -0400)
These use the attribute pipe, the new versions of LD_ATTR_TEX, but reading
texture descriptors instead of attribute descriptors unlike their Bifrost
predecessors.

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

src/panfrost/bifrost/valhall/ISA.xml

index b439c22a6ced9b6b7b751ea0d6f53779e87df9c3..b5f76763bb3b2f8c0efab29c4a29aee170e42d41 100644 (file)
     <imm name="index" start="12" size="8"/>
   </ins>
 
-  <ins name="LD_ATTR_IMM" title="Load immediate attribute" opcode="0x66" unit="LS">
+  <ins name="LD_ATTR_IMM" title="Load immediate attribute" opcode="0x66" opcode2="0" unit="LS">
     <desc>
       Load `vecsize` components from the attribute descriptor at entry `index`
       of resource table `table` at index (vertex ID, instance ID), converting
     <vecsize/>
     <regfmt/>
     <slot/>
+    <mod name="descriptor_type" start="128" size="1" implied="true"/>
     <sr write="true"/>
     <src>Vertex ID</src>
     <src>Instance ID</src>
     <imm name="table" start="16" size="4"/>
   </ins>
 
+  <ins name="LD_ATTR" title="Load indirect attribute" opcode="0x76" opcode2="0" unit="LS">
+    <desc>
+      Load `vecsize` components from the attribute descriptor at the specified
+      location at index (vertex ID, instance ID), converting
+      to the specified register format.
+
+      The index must not diverge within a warp.
+    </desc>
+    <sr_count/>
+    <vecsize/>
+    <regfmt/>
+    <slot/>
+    <mod name="descriptor_type" start="128" size="1" implied="true"/>
+    <sr write="true"/>
+    <src>Vertex ID</src>
+    <src>Instance ID</src>
+    <src>Index and table</src>
+  </ins>
+
+  <ins name="LD_TEX_IMM" title="Load immediate texture" opcode="0x66" opcode2="1" unit="LS">
+    <desc>
+      Load `vecsize` components from the texture descriptor at entry `index`
+      of resource table `table`, converting
+      to the specified register format.
+    </desc>
+    <sr_count/>
+    <vecsize/>
+    <regfmt/>
+    <slot/>
+    <mod name="descriptor_type" start="128" size="1" implied="true"/>
+    <sr write="true"/>
+    <src>X/Y coordinates (16:16)</src>
+    <src>Z/W coordinates (16:16)</src>
+    <imm name="index" start="20" size="4"/>
+    <imm name="table" start="16" size="4"/>
+  </ins>
+
+  <ins name="LD_TEX" title="Load indirect texture" opcode="0x76" opcode2="1" unit="LS">
+    <desc>
+      Load `vecsize` components from the texture descriptor at the specified
+      location at index, converting
+      to the specified register format.
+    </desc>
+    <sr_count/>
+    <vecsize/>
+    <regfmt/>
+    <slot/>
+    <mod name="descriptor_type" start="128" size="1" implied="true"/>
+    <sr write="true"/>
+    <src>X/Y coordinates (16:16)</src>
+    <src>Z/W coordinates (16:16)</src>
+    <src>Index and table</src>
+  </ins>
+
   <ins name="LEA_ATTR_IMM" title="Load effective address of image texel" opcode="0x67" opcode2="0" unit="LS">
     <desc>
       Load the effective address of an attribute specified with the
     <src>Mode descriptor</src>
   </ins>
 
-  <ins name="LD_ATTR" title="Load indirect attribute" opcode="0x76" unit="LS">
-    <!-- TODO: for some reason, blob is using index (1<<24)|x for [x] -->
-    <desc>The index must not diverge within a warp.</desc>
-    <sr_count/>
-    <vecsize/>
-    <regfmt/>
-    <slot/>
-    <sr write="true"/>
-    <src>Vertex ID</src>
-    <src>Instance ID</src>
-    <src>Index</src>
-  </ins>
-
   <ins name="LEA_BUF_IMM" title="Load buffer effective address" opcode="0x5E" unit="LS">
     <desc>
       Load effective address of a buffer with an immediate offset added.