intel/genxml: Define 3DSTATE_SUBSLICE_HASH_TABLE command for Gen12 and Gen12.5.

This command allows programming custom pixel hashing tables
controlling the balancing of load across pixel pipes.  Rather
confusingly 3DSTATE_SLICE_TABLE_STATE_POINTERS was serving the same
purpose on Gen11: A pixel is mapped to the pixel pipe with index
specified by the entry in the table corresponding to the LSBs of the
pixel coordinates [Yes you read right the entries are neither subslice
nor slice indices!].  Either a 2-way or a 3-way table can be
programmed based on whether the platform has two or three pixel pipes
per slice.  In addition the 16x8 tables defined below can hold two
separate 8x8 tables when in DUAL_TABLE mode (which AFAIA is only
useful for platforms with multiple asymmetric slices -- I.e. no
production platforms as of today to my knowledge).

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8749>
This commit is contained in:
Francisco Jerez 2021-01-13 19:57:35 -08:00
parent a2a17bf25e
commit ab076e19ed
2 changed files with 60 additions and 0 deletions

View file

@ -2566,6 +2566,36 @@
<field name="Last Pixel Enable" start="127" end="127" type="bool"/>
</instruction>
<instruction name="3DSTATE_SUBSLICE_HASH_TABLE" bias="2" length="14">
<field name="DWord Length" start="0" end="7" type="uint" default="12"/>
<field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="31"/>
<field name="3D Command Opcode" start="24" end="26" type="uint" default="1"/>
<field name="Command SubType" start="27" end="28" type="uint" default="3"/>
<field name="Command Type" start="29" end="31" type="uint" default="3"/>
<group count="8" start="32" size="2">
<field name="Slice Hash Control" start="0" end="1" type="uint">
<value name="COMPUTED" value="0"/>
<value name="UNBALANCED_TABLE_0" value="1"/>
<value name="TABLE_0" value="2"/>
<value name="TABLE_1" value="3"/>
</field>
</group>
<field name="Slice Table Mode" start="62" end="63" type="uint">
<value name="SINGLE_TABLE" value="0"/>
<value name="DUAL_TABLE" value="1"/>
</field>
<group count="8" start="64" size="16">
<group count="16" start="0" size="1">
<field name="Two Way Table Entry" start="0" end="0" type="uint"/>
</group>
</group>
<group count="8" start="192" size="32">
<group count="16" start="0" size="2">
<field name="Three Way Table Entry" start="0" end="1" type="uint"/>
</group>
</group>
</instruction>
<instruction name="3DSTATE_SLICE_TABLE_STATE_POINTERS" bias="2" length="2">
<field name="DWord Length" start="0" end="7" type="uint" default="0"/>
<field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="32"/>

View file

@ -2574,6 +2574,36 @@
<field name="Last Pixel Enable" start="127" end="127" type="bool"/>
</instruction>
<instruction name="3DSTATE_SUBSLICE_HASH_TABLE" bias="2" length="14">
<field name="DWord Length" start="0" end="7" type="uint" default="12"/>
<field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="31"/>
<field name="3D Command Opcode" start="24" end="26" type="uint" default="1"/>
<field name="Command SubType" start="27" end="28" type="uint" default="3"/>
<field name="Command Type" start="29" end="31" type="uint" default="3"/>
<group count="8" start="32" size="2">
<field name="Slice Hash Control" start="0" end="1" type="uint">
<value name="COMPUTED" value="0"/>
<value name="UNBALANCED_TABLE_0" value="1"/>
<value name="TABLE_0" value="2"/>
<value name="TABLE_1" value="3"/>
</field>
</group>
<field name="Slice Table Mode" start="62" end="63" type="uint">
<value name="SINGLE_TABLE" value="0"/>
<value name="DUAL_TABLE" value="1"/>
</field>
<group count="8" start="64" size="16">
<group count="16" start="0" size="1">
<field name="Two Way Table Entry" start="0" end="0" type="uint"/>
</group>
</group>
<group count="8" start="192" size="32">
<group count="16" start="0" size="2">
<field name="Three Way Table Entry" start="0" end="1" type="uint"/>
</group>
</group>
</instruction>
<instruction name="3DSTATE_SLICE_TABLE_STATE_POINTERS" bias="2" length="2">
<field name="DWord Length" start="0" end="7" type="uint" default="0"/>
<field name="3D Command Sub Opcode" start="16" end="23" type="uint" default="32"/>