Mesa (main): pan/va: Fix definitions of TEX_SINGLE and TEX_FETCH

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 25 22:14:25 UTC 2022


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

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Thu Feb 17 14:05:18 2022 -0500

pan/va: Fix definitions of TEX_SINGLE and TEX_FETCH

Fix the definitions of the basic texturing instructions. In particular, a
register format and a write mask were previously missing, as well as incorrect
handling of staging registers.

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

---

 src/panfrost/bifrost/valhall/ISA.xml    | 95 +++++++++++++++++++++++++++------
 src/panfrost/bifrost/valhall/valhall.py | 14 +++++
 2 files changed, 93 insertions(+), 16 deletions(-)

diff --git a/src/panfrost/bifrost/valhall/ISA.xml b/src/panfrost/bifrost/valhall/ISA.xml
index 30728e033e3..172eb86aeca 100644
--- a/src/panfrost/bifrost/valhall/ISA.xml
+++ b/src/panfrost/bifrost/valhall/ISA.xml
@@ -518,6 +518,50 @@
     <value>sr7</value>
   </enum>
 
+  <enum name="Staging register write count" implied="true">
+    <value>write1</value>
+    <value>write2</value>
+    <value>write3</value>
+    <value>write4</value>
+    <value>write5</value>
+    <value>write6</value>
+    <value>write7</value>
+    <value>write8</value>
+  </enum>
+
+  <enum name="Write mask">
+    <reserved/>
+    <value>r</value>
+    <value>g</value>
+    <value>rg</value>
+    <value>b</value>
+    <value>rb</value>
+    <value>gb</value>
+    <value>rgb</value>
+    <value>a</value>
+    <value>ra</value>
+    <value>ga</value>
+    <value>rga</value>
+    <value>ba</value>
+    <value>rba</value>
+    <value>gba</value>
+    <value default="true">rgba</value>
+  </enum>
+
+  <enum name="Register type">
+    <desc>Unsized type, part of a register format.</desc>
+    <reserved/>
+    <value name="Float">f</value>
+    <value name="Unsigned">u</value>
+    <value name="Signed">s</value>
+  </enum>
+
+  <enum name="Register width">
+    <desc>Untyped size, part of a register format.</desc>
+    <value>16</value>
+    <value>32</value>
+  </enum>
+
   <enum name="Vector size">
     <desc>Number of channels loaded/stored for general memory access.</desc>
     <value default="true" desc="Scalar">none</value>
@@ -1972,28 +2016,46 @@
 
   <ins name="TEX_FETCH" title="Texel fetch" opcode="0x125" unit="T">
     <desc>Unfiltered textured instruction.</desc>
-    <sr read="true"/>
-    <sr write="true" count="4"/>
-    <mod name="explicit_offset" start="11" size="1"/>
-    <mod name="dimension" start="28" size="2"/>
-    <mod name="skip" start="39" size="1"/>
-    <sr_count/>
     <slot/>
+    <skip/>
+    <register_type/>
+    <register_width/>
+    <write_mask/>
+    <dimension/>
+    <wide_indices/>
+    <array_enable/>
+    <texel_offset/>
+
+    <!-- Leave secondary_register_width as 0 -->
+    <sr_count/>
+    <sr_write_count/>
+
+    <sr write="true" flags="false"/>
+    <sr read="true" flags="false"/>
     <src>Image to read from</src>
   </ins>
 
-  <ins name="TEX" title="Texture load" opcode="0x128" unit="T">
+  <ins name="TEX_SINGLE" title="Texture load" opcode="0x128" unit="T">
     <desc>Ordinary texturing instruction using a sampler.</desc>
-    <sr read="true"/>
-    <sr write="true" count="4"/>
-    <src>Image to read from</src>
-    <mod name="explicit_offset" start="11" size="1"/>
-    <mod name="shadow" start="12" size="1"/>
-    <mod name="lod_mode" start="13" size="3"/>
-    <mod name="dimension" start="28" size="2"/>
-    <mod name="skip" start="39" size="1"/>
-    <sr_count/>
     <slot/>
+    <skip/>
+    <register_type/>
+    <register_width/>
+    <write_mask/>
+    <dimension/>
+    <wide_indices/>
+    <array_enable/>
+    <texel_offset/>
+    <shadow/>
+    <lod_mode/>
+
+    <!-- Leave secondary_register_width as 0 -->
+    <sr_count/>
+    <sr_write_count/>
+
+    <sr write="true" flags="false"/>
+    <sr read="true" flags="false"/>
+    <src>Image to read from</src>
   </ins>
 
   <ins name="TODO.VAR_TEX" title="Fused varying-texturing" opcode="0x130" unit="VT">
@@ -2005,6 +2067,7 @@
     <mod name="dimension" start="28" size="2"/>
     <mod name="skip" start="39" size="1"/>
     <slot/>
+    <sr_write_count/>
     <src>Image to read from</src>
   </ins>
 
diff --git a/src/panfrost/bifrost/valhall/valhall.py b/src/panfrost/bifrost/valhall/valhall.py
index 32fa00559e4..343c9de82bd 100644
--- a/src/panfrost/bifrost/valhall/valhall.py
+++ b/src/panfrost/bifrost/valhall/valhall.py
@@ -344,6 +344,19 @@ for child in root.findall('enum'):
     enums[safe_name(child.attrib['name'])] = build_enum(child)
 
 MODIFIERS = {
+    # Texture instructions share a common encoding
+    "wide_indices": Flag("wide_indices", 8),
+    "array_enable": Flag("array_enable", 10),
+    "texel_offset": Flag("texel_offset", 11),
+    "shadow": Flag("shadow", 12),
+    "lod_mode": Modifier("lod_mode", 13, 3),
+    "write_mask": Modifier("write_mask", 22, 4),
+    "register_type": Modifier("register_type", 26, 2),
+    "dimension": Modifier("dimension", 28, 2),
+    "skip": Flag("skip", 39),
+    "register_width": Modifier("register_width", 46, 1, force_enum = "register_width"),
+    "secondary_register_width": Modifier("secondary_register_width", 47, 1, force_enum = "register_width"),
+
     "inactive_result": Modifier("inactive_result", 22, 4),
     "store_segment": Modifier("store_segment", 24, 2),
     "regfmt": Modifier("register_format", 24, 3),
@@ -359,6 +372,7 @@ MODIFIERS = {
     "cmp": Modifier("condition", 32, 3),
     "clamp": Modifier("clamp", 32, 2),
     "sr_count": Modifier("staging_register_count", 33, 3, implied = True),
+    "sr_write_count": Modifier("staging_register_write_count", 36, 3, implied = True),
 
     "conservative": Flag("conservative", 35),
     "subgroup": Modifier("subgroup_size", 36, 4),



More information about the mesa-commit mailing list