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@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15182>
This commit is contained in:
Alyssa Rosenzweig 2022-02-17 14:05:18 -05:00 committed by Marge Bot
parent a58807fa95
commit eee6dad0c9
2 changed files with 93 additions and 16 deletions

View File

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

View File

@ -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),