pvr: add basic volcanic hw-definitions

This is most of the HW definitions for the Volcanic GPU that more or
less directly correspond to what we already have for Rogue. This isn't
complete enough to drive the GPU, but gets us a step on the way.

Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39526>
This commit is contained in:
Erik Faye-Lund 2025-09-05 12:30:49 +02:00 committed by Marge Bot
parent 975034660e
commit 384ce6d8d3
8 changed files with 684 additions and 0 deletions

View file

@ -3,5 +3,6 @@
pvr_xml_pack = []
subdir('rogue')
subdir('volcanic')
dep_csbgen = declare_dependency(sources : [pvr_xml_pack])

View file

@ -0,0 +1,105 @@
<?xml version="1.0" ?>
<!--
Copyright © 2025 Imagination Technologies Ltd.
SPDX-License-Identifier: MIT
-->
<csbgen name="VOLCANIC" prefix="CDMCTRL">
<define name="GUARD_SIZE_DEFAULT" value="64"/>
<enum name="BLOCK_TYPE">
<value name="COMPUTE_KERNEL" value="0"/>
<value name="STREAM_LINK" value="1"/>
<value name="STREAM_TERMINATE" value="2"/>
</enum>
<enum name="USC_TARGET">
<value name="ALL" value="0"/>
<value name="ANY" value="1"/>
</enum>
<enum name="SD_TYPE">
<value name="NONE" value="0"/>
<value name="PDS" value="1"/>
<value name="USC" value="2"/>
</enum>
<struct name="KERNEL0" length="1">
<field name="block_type" start="30" end="31" type="BLOCK_TYPE" default="COMPUTE_KERNEL"/>
<field name="indirect_present" start="29" end="29" type="bool"/>
<field name="usc_unified_size" start="12" end="18" type="uint"/>
<field name="pds_temp_size" start="7" end="11" type="uint"/>
<field name="pds_data_size" start="1" end="6" type="uint"/>
<field name="usc_target" start="0" end="0" type="USC_TARGET"/>
</struct>
<struct name="KERNEL1" length="1">
<field name="data_addr" start="4" end="31" shift="4" type="address"/>
<field name="sd_type" start="2" end="3" type="SD_TYPE"/>
</struct>
<struct name="KERNEL2" length="1">
<field name="code_addr" start="4" end="31" shift="4" type="address"/>
</struct>
<struct name="KERNEL3" length="1">
<field name="workgroup_x" start="0" end="31" type="uint"/>
</struct>
<struct name="KERNEL4" length="1">
<field name="workgroup_y" start="0" end="31" type="uint"/>
</struct>
<struct name="KERNEL5" length="1">
<field name="workgroup_z" start="0" end="31" type="uint"/>
</struct>
<struct name="KERNEL6" length="1">
<field name="indirect_addrmsb" start="0" end="15" shift="32" type="address"/>
</struct>
<struct name="KERNEL7" length="1">
<field name="indirect_addrlsb" start="2" end="31" shift="2" type="address"/>
</struct>
<struct name="KERNEL8" length="1">
<field name="max_instances" start="25" end="31" type="uint"/>
</struct>
<struct name="KERNEL9" length="1">
<field name="workgroup_size_x" start="20" end="29" type="uint"/>
<field name="workgroup_size_y" start="10" end="19" type="uint"/>
<field name="workgroup_size_z" start="0" end="9" type="uint"/>
</struct>
<struct name="KERNEL10" length="1">
</struct>
<struct name="KERNEL11" length="1">
</struct>
<struct name="KERNEL12" length="1">
</struct>
<struct name="KERNEL13" length="1">
</struct>
<struct name="STREAM_LINK0" length="1">
<field name="block_type" start="30" end="31" type="BLOCK_TYPE" default="STREAM_LINK"/>
<field name="link_addrmsb" start="0" end="15" shift="32" type="address"/>
</struct>
<struct name="STREAM_LINK1" length="1">
<field name="link_addrlsb" start="2" end="31" shift="2" type="address"/>
</struct>
<struct name="STREAM_TERMINATE" length="1">
<field name="block_type" start="30" end="31" type="BLOCK_TYPE" default="STREAM_TERMINATE"/>
</struct>
</csbgen>

View file

@ -0,0 +1,139 @@
<?xml version="1.0" ?>
<!--
Copyright © 2025 Imagination Technologies Ltd.
SPDX-License-Identifier: MIT
-->
<csbgen name="VOLCANIC" prefix="IPF">
<define name="TILE_SIZE_PIXELS" value="32"/>
<define name="CONTROL_STREAM_SIZE_DWORDS" value="32"/>
<define name="ISP_VERTEX_XY_BIAS_VALUE" value="4096"/>
<enum name="COMPRESSION_FORMAT">
<value name="UNIQUE_1" value="0"/>
<value name="ORIGIN_1_DELTA_1" value="1"/>
<value name="ORIGIN_1_DELTA_2" value="2"/>
<value name="ORIGIN_1_DELTA_3" value="3"/>
<value name="ORIGIN_1_DELTA_4" value="4"/>
<value name="ORIGIN_1_DELTA_5" value="5"/>
<value name="ORIGIN_1_DELTA_6" value="6"/>
<value name="ORIGIN_1_DELTA_7" value="7"/>
<value name="RAW_BYTE" value="8"/>
<value name="UNIQUE_2" value="9"/>
<value name="ORIGIN_2_DELTA_1" value="10"/>
<value name="ORIGIN_2_DELTA_2" value="11"/>
<value name="ORIGIN_2_DELTA_3" value="12"/>
<value name="ORIGIN_2_DELTA_4" value="13"/>
<value name="ORIGIN_2_DELTA_5" value="14"/>
<value name="ORIGIN_2_DELTA_6" value="15"/>
</enum>
<enum name="CS_MASK_FMT">
<value name="INDEX" value="0"/>
<value name="BYTE" value="1"/>
<value name="BIT" value="2"/>
<value name="FULL" value="3"/>
</enum>
<enum name="CS_TYPE">
<value name="PRIM" value="0"/>
<value name="LINK" value="2"/>
<value name="TERM" value="3"/>
</enum>
<struct name="CONTROL_STREAM" length="1">
<field name="cs_type" start="30" end="31" type="CS_TYPE"/>
<field name="cs_link" start="3" end="29" shift="7" type="address"/>
</struct>
<struct name="PRIMITIVE_FORMAT" length="1">
<field name="cs_type" start="30" end="31" type="CS_TYPE"/>
<field name="cs_isp_state_size" start="26" end="28" type="uint"/>
<field name="cs_prim_total" start="19" end="25" type="uint"/>
<field name="cs_mask_fmt" start="17" end="18" type="CS_MASK_FMT"/>
<field name="cs_prim_base_pres" start="16" end="16" type="bool"/>
<field name="cs_prim_base_offset" start="0" end="15" type="uint"/>
</struct>
<struct name="PRIMITIVE_BASE" length="1">
<field name="cs_prim_base" start="0" end="31" shift="2" type="address"/>
</struct>
<struct name="COMPRESSION_SIZE_WORD" length="1">
<field name="cs_tsp_comp_format_size" start="22" end="27" type="uint"/>
<field name="cs_tsp_comp_table_size" start="12" end="21" type="uint"/>
<field name="cs_tsp_comp_vertex_size" start="0" end="11" type="uint"/>
</struct>
<struct name="ISP_COMPRESSION_WORD_0" length="1">
<field name="cf_isp_comp_fmt_z1" start="28" end="31" type="COMPRESSION_FORMAT"/>
<field name="cf_isp_comp_fmt_z0" start="24" end="27" type="COMPRESSION_FORMAT"/>
<field name="cf_isp_comp_fmt_y2" start="20" end="23" type="COMPRESSION_FORMAT"/>
<field name="cf_isp_comp_fmt_y1" start="16" end="19" type="COMPRESSION_FORMAT"/>
<field name="cf_isp_comp_fmt_y0" start="12" end="15" type="COMPRESSION_FORMAT"/>
<field name="cf_isp_comp_fmt_x2" start="8" end="11" type="COMPRESSION_FORMAT"/>
<field name="cf_isp_comp_fmt_x1" start="4" end="7" type="COMPRESSION_FORMAT"/>
<field name="cf_isp_comp_fmt_x0" start="0" end="3" type="COMPRESSION_FORMAT"/>
</struct>
<struct name="ISP_COMPRESSION_WORD_1" length="1">
<field name="vf_prim_msaa" start="16" end="16" type="bool"/>
<field name="vf_prim_id_pres" start="15" end="15" type="bool"/>
<field name="vf_vertex_clipped" start="14" end="14" type="bool"/>
<field name="vf_vertex_total" start="8" end="13" type="uint"/>
<field name="cf_isp_comp_fmt_z3" start="4" end="7" type="COMPRESSION_FORMAT"/>
<field name="cf_isp_comp_fmt_z2" start="0" end="3" type="COMPRESSION_FORMAT"/>
</struct>
<struct name="INDEX_DATA" length="1">
<field name="ix_edge_flag1_ab" start="30" end="30" type="bool"/>
<field name="ix_index1_0" start="24" end="29" type="uint"/>
<field name="ix_bf_flag0" start="23" end="23" type="bool"/>
<field name="ix_edge_flag0_ca" start="22" end="22" type="bool"/>
<field name="ix_index0_2" start="16" end="21" type="uint"/>
<field name="ix_edge_flag0_bc" start="14" end="14" type="bool"/>
<field name="ix_index0_1" start="8" end="13" type="uint"/>
<field name="ix_edge_flag0_ab" start="6" end="6" type="bool"/>
<field name="ix_index0_0" start="0" end="5" type="uint"/>
</struct>
<struct name="ISP_VERTEX_XY" length="1">
<field name="sign" start="23" end="23" type="bool"/>
<field name="integer" start="8" end="22" type="uint"/>
<field name="frac" start="0" end="7" type="uint"/>
</struct>
<struct name="ISP_VERTEX_WORD_0" length="1">
<field name="y0" start="24" end="31" type="uint"/>
<field name="x0" start="0" end="23" type="uint"/>
</struct>
<struct name="ISP_VERTEX_WORD_1" length="1">
<field name="z0" start="16" end="31" type="uint"/>
<field name="y0" start="0" end="15" type="uint">
<define name="SHIFT" value="8"/>
</field>
</struct>
<struct name="ISP_VERTEX_WORD_2" length="1">
<field name="x1" start="16" end="31" type="uint"/>
<field name="z0" start="0" end="15" type="uint">
<define name="SHIFT" value="16"/>
</field>
</struct>
<struct name="ISP_VERTEX_WORD_3" length="1">
<field name="y1" start="8" end="31" type="uint"/>
<field name="x1" start="0" end="7" type="uint">
<define name="SHIFT" value="16"/>
</field>
</struct>
<struct name="ISP_VERTEX_WORD_4" length="1">
<field name="z1" start="0" end="31" type="uint"/>
</struct>
</csbgen>

View file

@ -0,0 +1,20 @@
<?xml version="1.0" ?>
<!--
Copyright © 2025 Imagination Technologies Ltd.
SPDX-License-Identifier: MIT
-->
<csbgen name="VOLCANIC" prefix="LLS">
<define name="CDM_CONTEXT_RESUME_BUFFER_SIZE" value="72"/>
<define name="CDM_CONTEXT_RESUME_BUFFER_ALIGNMENT" value="32"/>
<define name="TA_STATE_BUFFER_SIZE" value="468"/>
<define name="TA_STATE_BUFFER_ALIGNMENT" value="32"/>
<define name="USC_SHARED_REGS_BUFFER_SIZE" value="16384"/>
<define name="USC_SHARED_REGS_BUFFER_ALIGNMENT" value="32"/>
</csbgen>

View file

@ -0,0 +1,22 @@
# Copyright © 2025 Imagination Technologies Ltd.
# SPDX-License-Identifier: MIT
pvr_xml_files = [
'cdm.xml',
'ipf.xml',
'lls.xml',
'pbestate.xml',
'pds.xml',
'texstate.xml',
]
foreach f : pvr_xml_files
_name = '@0@.h'.format(f.split('.')[0])
pvr_xml_pack += custom_target(
_name,
input : ['../gen_pack_header.py', f],
output : _name,
command : [prog_python, '@INPUT@'],
capture : true,
)
endforeach

View file

@ -0,0 +1,80 @@
<?xml version="1.0" ?>
<!--
Copyright © 2025 Imagination Technologies Ltd.
SPDX-License-Identifier: MIT
-->
<csbgen name="VOLCANIC" prefix="PBESTATE">
<enum name="PACKMODE">
<value name="U8U8U8U8" value="0x0"/>
<value name="S8S8S8S8" value="0x1"/>
<value name="A1R5G5B5" value="0x2"/>
<value name="R5G5B5A1" value="0x3"/>
<value name="A4R4G4B4" value="0x4"/>
<value name="A8R3G3B2" value="0x5"/>
<value name="U16U16U16U16" value="0x6"/>
<value name="S16S16S16S16" value="0x7"/>
<value name="F16F16F16F16" value="0x8"/>
<value name="U32U32U32U32" value="0x9"/>
<value name="S32S32S32S32" value="0xa"/>
<value name="F32F32F32F32" value="0xb"/>
<value name="A2R10B10G10" value="0xc"/>
<value name="R10B10G10A2" value="0xd"/>
<value name="A2F10F10F10" value="0xe"/>
<value name="F10F10F10A2" value="0xf"/>
<value name="U8U8U8" value="0x10"/>
<value name="S8S8S8" value="0x11"/>
<value name="R5G6B5" value="0x12"/>
<value name="R5SG5SB6" value="0x13"/>
<value name="B6G5SR5S" value="0x14"/>
<value name="U16U16U16" value="0x15"/>
<value name="S16S16S16" value="0x16"/>
<value name="F16F16F16" value="0x17"/>
<value name="U32U32U32" value="0x18"/>
<value name="S32S32S32" value="0x19"/>
<value name="F11F11F10" value="0x1a"/>
<value name="F10F11F11" value="0x1b"/>
<value name="F32F32F32" value="0x1d"/>
<value name="U8U8" value="0x1e"/>
<value name="S8S8" value="0x1f"/>
<value name="U16U16" value="0x20"/>
<value name="S16S16" value="0x21"/>
<value name="F16F16" value="0x22"/>
<value name="U32U32" value="0x23"/>
<value name="S32S32" value="0x24"/>
<value name="F32F32" value="0x25"/>
<value name="U24ST8" value="0x26"/>
<value name="ST8U24" value="0x27"/>
<value name="U8" value="0x28"/>
<value name="S8" value="0x29"/>
<value name="U16" value="0x2a"/>
<value name="S16" value="0x2b"/>
<value name="F16" value="0x2c"/>
<value name="U32" value="0x2d"/>
<value name="S32" value="0x2e"/>
<value name="F32" value="0x2f"/>
<value name="ARGBV16_XR10" value="0x30"/>
<value name="A2_XRBIAS_U10U10U10" value="0x31"/>
<value name="U10U10U10_XRBIAS_A2" value="0x32"/>
</enum>
<enum name="SOURCE_FORMAT">
<value name="F16_PER_CHANNEL" value="0"/>
<value name="8_OR_RAW_PER_CHANNEL" value="1"/>
</enum>
<enum name="SOURCE_POS">
<value name="START_BIT0" value="0"/>
<value name="START_BIT32" value="1"/>
<value name="START_BIT64" value="2"/>
<value name="START_BIT96" value="3"/>
</enum>
<struct name="STATE_WORD0" length="1">
<field name="address_low" start="0" end="31" shift="2" type="address"/>
</struct>
</csbgen>

View file

@ -0,0 +1,57 @@
<?xml version="1.0" ?>
<!--
Copyright © 2025 Imagination Technologies Ltd.
SPDX-License-Identifier: MIT
-->
<csbgen name="VOLCANIC" prefix="PDSINST">
<enum name="DOUTI_SHADEMODEL">
<value name="FLAT_VERTEX0" value="0"/>
<value name="FLAT_VERTEX1" value="1"/>
<value name="FLAT_VERTEX2" value="2"/>
<value name="GOURUAD" value="3"/>
</enum>
<enum name="DOUTI_SIZE">
<value name="1D" value="0"/>
<value name="2D" value="1"/>
<value name="3D" value="2"/>
<value name="4D" value="3"/>
</enum>
<enum name="DOUTU_SAMPLE_RATE">
<value name="INSTANCE" value="0"/>
<value name="SELECTIVE" value="1"/>
<value name="FULL" value="2"/>
</enum>
<struct name="DOUT_FIELDS_DOUTD_SRC0" length="1">
<field name="doffset" start="48" end="60" type="uint"/>
<field name="sbase" start="0" end="47" shift="0" type="address"/>
</struct>
<struct name="DOUT_FIELDS_DOUTD_SRC1" length="1">
<field name="last" start="31" end="31" type="bool"/>
<field name="dest" start="28" end="30" type="uint"/>
<field name="bsize" start="0" end="11" type="uint"/>
</struct>
<struct name="DOUT_FIELDS_DOUTI_SRC" length="1">
<field name="depthbias" start="27" end="27" type="bool"/>
<field name="primitiveid" start="26" end="26" type="bool"/>
<field name="shademodel" start="24" end="25" type="DOUTI_SHADEMODEL"/>
<field name="pointsprite" start="23" end="23" type="bool"/>
<field name="wraps" start="22" end="22" type="bool"/>
<field name="wrapv" start="21" end="21" type="bool"/>
<field name="wrapu" start="20" end="20" type="bool"/>
<field name="size" start="18" end="19" type="DOUTI_SIZE"/>
<field name="f16" start="17" end="17" type="bool"/>
<field name="perspective" start="16" end="16" type="bool"/>
<field name="f32_offset" start="8" end="15" type="uint"/>
<field name="f16_offset" start="0" end="7" type="uint"/>
</struct>
</csbgen>

View file

@ -0,0 +1,260 @@
<?xml version="1.0" ?>
<!--
Copyright © 2025 Imagination Technologies Ltd.
SPDX-License-Identifier: MIT
-->
<csbgen name="VOLCANIC" prefix="TEXSTATE">
<enum name="ADDRMODE">
<value name="REPEAT" value="0"/>
<value name="FLIP" value="1"/>
<value name="CLAMP_TO_EDGE" value="2"/>
<value name="FLIP_ONCE_THEN_CLAMP" value="3"/>
<value name="CLAMP_TO_BORDER" value="4"/>
<value name="OGL_CLAMP" value="5"/>
</enum>
<enum name="ANISOCTL">
<value name="DISABLED" value="0"/>
<value name="X2" value="1"/>
<value name="X4" value="2"/>
<value name="X8" value="3"/>
<value name="X16" value="4"/>
</enum>
<enum name="CLAMP">
<value name="INTEGER_BITS" value="4"/>
<value name="FRACTIONAL_BITS" value="8"/>
</enum>
<enum name="CMP_MODE">
<value name="NEVER" value="0"/>
<value name="LESS" value="1"/>
<value name="EQUAL" value="2"/>
<value name="LESSEQUAL" value="3"/>
<value name="GREATER" value="4"/>
<value name="NOTEQUAL" value="5"/>
<value name="GREATEREQUAL" value="6"/>
<value name="ALWAYS" value="7"/>
</enum>
<enum name="DADJUST">
<value name="MIN_UINT" value="0"/>
<value name="ZERO_UINT" value="4095"/>
<value name="MAX_UINT" value="8191"/>
<value name="INTEGER_BITS" value="5"/>
<value name="FRACTIONAL_BITS" value="8"/>
</enum>
<enum name="FILTER">
<value name="POINT" value="0"/>
<value name="LINEAR" value="1"/>
<value name="BICUBIC" value="2"/>
</enum>
<enum name="FORMAT">
<value name="U8" value="0"/>
<value name="S8" value="1"/>
<value name="A4R4G4B4" value="2"/>
<value name="A8R3G3B2" value="3"/>
<value name="A1R5G5B5" value="4"/>
<value name="R5G6B5" value="5"/>
<value name="R5sG5sB6" value="6"/>
<value name="U8U8" value="7"/>
<value name="S8S8" value="8"/>
<value name="U16" value="9"/>
<value name="S16" value="10"/>
<value name="F16" value="11"/>
<value name="U8U8U8U8" value="12"/>
<value name="S8S8S8S8" value="13"/>
<value name="A2R10B10G10" value="14"/>
<value name="U16U16" value="15"/>
<value name="S16S16" value="16"/>
<value name="F16F16" value="17"/>
<value name="F32" value="18"/>
<!-- 19 -->
<value name="X8U8S8S8" value="20"/>
<value name="X8U24" value="21"/>
<value name="ST8U24" value="22"/>
<value name="U8X24" value="23"/>
<value name="U32" value="24"/>
<value name="S32" value="25"/>
<value name="SE9995" value="26"/>
<value name="F11F11F10" value="27"/>
<value name="F16F16F16F16" value="28"/>
<value name="U16U16U16U16" value="29"/>
<value name="S16S16S16S16" value="30"/>
<value name="F16F16F16" value="31"/>
<value name="U16U16U16" value="32"/>
<value name="S16S16S16" value="33"/>
<value name="F32F32" value="34"/>
<value name="U32U32" value="35"/>
<value name="S32S32" value="36"/>
<value name="X24U8F32" value="37"/>
<value name="X24X8F32" value="38"/>
<value name="X24G8X32" value="39"/>
<value name="YUV420_2PLANE" value="40"/>
<value name="YVU420_2PLANE" value="41"/>
<value name="YUV420_3PLANE" value="42"/>
<value name="YVU420_3PLANE" value="43"/>
<value name="U8U8U8" value="44"/>
<value name="S8S8S8" value="45"/>
<value name="A2F10F10F10" value="46"/>
<value name="F32F32F32F32" value="47"/>
<value name="U32U32U32U32" value="48"/>
<value name="S32S32S32S32" value="49"/>
<value name="F32F32F32" value="50"/>
<value name="U32U32U32" value="51"/>
<value name="S32S32S32" value="52"/>
<value name="R5G5B5A1" value="53"/>
<value name="B6G5sR5s" value="54"/>
<value name="R10B10G10A2" value="55"/>
<value name="X8S8S8U8" value="56"/>
<value name="U24ST8" value="57"/>
<value name="F10F11F11" value="58"/>
<value name="VYUY" value="59"/>
<value name="UYVY" value="60"/>
<value name="YVYU" value="61"/>
<value name="YUYV" value="62"/>
<value name="F10F10F10A2" value="63"/>
<value name="YUV420_2PLANE_MACRO_BLOCK" value="64"/>
<value name="YVU420_2PLANE_MACRO_BLOCK" value="65"/>
<value name="YVU8_422_2PLANE_PACK8" value="66"/>
<value name="YVU8_444_2PLANE_PACK8" value="67"/>
<value name="YVU10_444_1PLANE_PACK10" value="68"/>
<value name="YVU10_422_2PLANE_PACK16" value="69"/>
<value name="YVU10_420_2PLANE_PACK16" value="70"/>
<value name="YVU10_444_2PLANE_PACK16" value="71"/>
<value name="YUV8_422_2PLANE_PACK8" value="72"/>
<value name="YUV8_444_3PLANE_PACK8" value="73"/>
<value name="YUV10_444_3PLANE_PACK16" value="74"/>
<value name="YVU10_420_2PLANE_PACK10" value="75"/>
<value name="YUV10_420_2PLANE_PACK10" value="76"/>
<value name="YVU10_422_2PLANE_PACK10" value="77"/>
<value name="YUV10_422_2PLANE_PACK10" value="78"/>
<value name="YUV10_444_3PLANE_PACK10" value="79"/>
<value name="R8G8_B8G8" value="80"/>
<value name="G8R8_G8B8" value="81"/>
<value name="YVYU_IMPLIED_CSC" value="82"/>
<value name="VYUY_IMPLIED_CSC" value="83"/>
<!-- 84..85 -->
<value name="YUV10_420_2PLANE_PACK10_T" value="86"/>
<value name="YVU10_420_2PLANE_PACK10_T" value="87"/>
<value name="YUV8_420_2PLANE_PACK8_P" value="88"/>
<value name="YVU8_420_2PLANE_PACK8_P" value="89"/>
<value name="YUV8_420_2PLANE_PACK8_F" value="90"/>
<value name="YVU8_420_2PLANE_PACK8_F" value="91"/>
<!-- 92..93 -->
<value name="ASTC_4x4" value="94"/>
<value name="ASTC_5x4" value="95"/>
<value name="ASTC_5x5" value="96"/>
<value name="ASTC_6x5" value="97"/>
<value name="ASTC_6x6" value="98"/>
<value name="ASTC_8x5" value="99"/>
<value name="ASTC_8x6" value="100"/>
<value name="ASTC_8x8" value="101"/>
<value name="ASTC_10x5" value="102"/>
<value name="ASTC_10x6" value="103"/>
<value name="ASTC_10x8" value="104"/>
<value name="ASTC_10x10" value="105"/>
<value name="ASTC_12x10" value="106"/>
<value name="ASTC_12x12" value="107"/>
<value name="UBC1" value="108"/>
<value name="UBC2" value="109"/>
<value name="UBC3" value="110"/>
<value name="UBC4" value="111"/>
<value name="SBC4" value="112"/>
<value name="UBC5" value="113"/>
<value name="SBC5" value="114"/>
<value name="UBC6" value="115"/>
<value name="SBC6" value="116"/>
<value name="UBC7" value="117"/>
<value name="ETC2_RGB" value="118"/>
<value name="ETC2A_RGBA" value="119"/>
<value name="ETC2_PUNCHTHROUGHA" value="120"/>
<value name="EAC_R11_UNSIGNED" value="121"/>
<value name="EAC_R11_SIGNED" value="122"/>
<value name="EAC_RG11_UNSIGNED" value="123"/>
<value name="EAC_RG11_SIGNED" value="124"/>
<!-- 125..138 -->
</enum>
<enum name="SWIZ">
<value name="SRCCHAN_0" value="0"/>
<value name="SRCCHAN_1" value="1"/>
<value name="SRCCHAN_2" value="2"/>
<value name="SRCCHAN_3" value="3"/>
<value name="SRC_ONE" value="4"/>
<value name="SRC_ZERO" value="5"/>
</enum>
<enum name="TEXTYPE">
<value name="1D" value="0"/>
<value name="2D" value="1"/>
<value name="3D" value="2"/>
<value name="CUBE" value="3"/>
<value name="STRIDE" value="4"/>
<value name="BUFFER_LOOKUP" value="5"/>
</enum>
<enum name="TWOCOMP_GAMMA">
<value name="OFF" value="0"/>
<value name="R" value="1"/>
<value name="RG" value="3"/>
</enum>
<struct name="IMAGE_WORD0" length="2">
<field name="height" start="49" end="62" type="uint"/>
<field name="width" start="35" end="48" type="uint"/>
<field name="texformat" start="15" end="22" type="FORMAT"/>
<field name="minlod" start="23" end="34" type="uint"/>
<field name="swiz0" start="12" end="14" type="SWIZ"/>
<field name="swiz1" start="9" end="11" type="SWIZ"/>
<field name="swiz2" start="6" end="8" type="SWIZ"/>
<field name="swiz3" start="3" end="5" type="SWIZ"/>
<field name="textype" start="0" end="2" type="TEXTYPE"/>
</struct>
<struct name="IMAGE_WORD1" length="2">
<field name="alpha_msb" start="62" end="62" type="bool"/>
<field name="mipmaps_present" start="61" end="61" type="bool"/>
<field name="depth" start="48" end="58" type="uint"/>
<field name="border" start="46" end="46" type="bool"/>
<field name="texaddr" start="0" end="45" shift="2" type="address"/>
</struct>
<struct name="IMAGE_WORD2" length="2">
<field name="num_mip_levels" start="10" end="13" type="uint"/>
<field name="twocomp_gamma" start="4" end="5" type="TWOCOMP_GAMMA"/>
<field name="baselevel" start="0" end="3" type="uint"/>
</struct>
<struct name="STRIDE_IMAGE_WORD1" length="2">
<field name="alpha_msb" start="62" end="62" type="bool"/>
<field name="mipmaps_present" start="61" end="61" type="bool"/>
<field name="stride" start="46" end="60" type="uint"/>
<field name="texaddr" start="0" end="45" shift="2" type="address"/>
</struct>
<struct name="SAMPLER_WORD0" length="2">
<field name="cemedge_dontfilter" start="63" end="63" type="bool"/>
<field name="cmp_mode" start="57" end="59" type="CMP_MODE"/>
<field name="non_normalized_coords" start="56" end="56" type="bool"/>
<field name="lumakey_alphamult" start="55" end="55" type="bool"/>
<field name="lumakey" start="54" end="54" type="bool"/>
<field name="addrmode_w" start="51" end="53" type="ADDRMODE"/>
<field name="addrmode_v" start="48" end="50" type="ADDRMODE"/>
<field name="addrmode_u" start="45" end="47" type="ADDRMODE"/>
<field name="mipfilter" start="44" end="44" type="bool"/>
<field name="minfilter" start="42" end="43" type="FILTER"/>
<field name="magfilter" start="40" end="41" type="FILTER"/>
<field name="anisoctl" start="37" end="39" type="ANISOCTL"/>
<field name="maxlod" start="25" end="36" type="CLAMP"/>
<field name="minlod" start="13" end="24" type="CLAMP"/>
<field name="dadjust" start="0" end="12" type="DADJUST"/>
</struct>
</csbgen>