Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/gpu/drm/msm/registers/adreno/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 82 kB image not shown  

Quelle  a3xx.xml   Sprache: XML

 
<?xml version="1.0" encoding="UTF-8"?>
<database xmlns="http://nouveau.freedesktop.org/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://gitlab.freedesktop.org/freedreno/ rules-fd.xsd">
<import file="freedreno_copyright.xml"/>
<import file="adreno/adreno_common.xml"/>
<import file="adreno/adreno_pm4.xml"/>

<enum name="a3xx_tile_mode">
 <value name="LINEAR" value="0"/>
 <value name="TILE_4X4" value="1"/>    <!-- "normal" case for textures -->
 <value name="TILE_32X32" value="2"/>  <!-- only used in GMEM -->
 <value name="TILE_4X2" value="3"/>    <!-- only used for CrCb -->
</enum>

<enum name="a3xx_state_block_id">
 <value name="HLSQ_BLOCK_ID_TP_TEX" value="2"/>
 <value name="HLSQ_BLOCK_ID_TP_MIPMAP" value="3"/>
 <value name="HLSQ_BLOCK_ID_SP_VS" value="4"/>
 <value name="HLSQ_BLOCK_ID_SP_FS" value="6"/>
</enum>

<enum name="a3xx_cache_opcode">
 <value name="INVALIDATE" value="1"/>
</enum>

<enum name="a3xx_vtx_fmt">
 <value name="VFMT_32_FLOAT" value="0x0"/>
 <value name="VFMT_32_32_FLOAT" value="0x1"/>
 <value name="VFMT_32_32_32_FLOAT" value="0x2"/>
 <value name="VFMT_32_32_32_32_FLOAT" value="0x3"/>

 <value name="VFMT_16_FLOAT" value="0x4"/>
 <value name="VFMT_16_16_FLOAT" value="0x5"/>
 <value name="VFMT_16_16_16_FLOAT" value="0x6"/>
 <value name="VFMT_16_16_16_16_FLOAT" value="0x7"/>

 <value name="VFMT_32_FIXED" value="0x8"/>
 <value name="VFMT_32_32_FIXED" value="0x9"/>
 <value name="VFMT_32_32_32_FIXED" value="0xa"/>
 <value name="VFMT_32_32_32_32_FIXED" value="0xb"/>

 <value name="VFMT_16_SINT" value="0x10"/>
 <value name="VFMT_16_16_SINT" value="0x11"/>
 <value name="VFMT_16_16_16_SINT" value="0x12"/>
 <value name="VFMT_16_16_16_16_SINT" value="0x13"/>
 <value name="VFMT_16_UINT" value="0x14"/>
 <value name="VFMT_16_16_UINT" value="0x15"/>
 <value name="VFMT_16_16_16_UINT" value="0x16"/>
 <value name="VFMT_16_16_16_16_UINT" value="0x17"/>
 <value name="VFMT_16_SNORM" value="0x18"/>
 <value name="VFMT_16_16_SNORM" value="0x19"/>
 <value name="VFMT_16_16_16_SNORM" value="0x1a"/>
 <value name="VFMT_16_16_16_16_SNORM" value="0x1b"/>
 <value name="VFMT_16_UNORM" value="0x1c"/>
 <value name="VFMT_16_16_UNORM" value="0x1d"/>
 <value name="VFMT_16_16_16_UNORM" value="0x1e"/>
 <value name="VFMT_16_16_16_16_UNORM" value="0x1f"/>

 <!-- seems to be no NORM variants for 32bit.. -->
 <value name="VFMT_32_UINT" value="0x20"/>
 <value name="VFMT_32_32_UINT" value="0x21"/>
 <value name="VFMT_32_32_32_UINT" value="0x22"/>
 <value name="VFMT_32_32_32_32_UINT" value="0x23"/>
 <value name="VFMT_32_SINT" value="0x24"/>
 <value name="VFMT_32_32_SINT" value="0x25"/>
 <value name="VFMT_32_32_32_SINT" value="0x26"/>
 <value name="VFMT_32_32_32_32_SINT" value="0x27"/>

 <value name="VFMT_8_UINT" value="0x28"/>
 <value name="VFMT_8_8_UINT" value="0x29"/>
 <value name="VFMT_8_8_8_UINT" value="0x2a"/>
 <value name="VFMT_8_8_8_8_UINT" value="0x2b"/>
 <value name="VFMT_8_UNORM" value="0x2c"/>
 <value name="VFMT_8_8_UNORM" value="0x2d"/>
 <value name="VFMT_8_8_8_UNORM" value="0x2e"/>
 <value name="VFMT_8_8_8_8_UNORM" value="0x2f"/>
 <value name="VFMT_8_SINT" value="0x30"/>
 <value name="VFMT_8_8_SINT" value="0x31"/>
 <value name="VFMT_8_8_8_SINT" value="0x32"/>
 <value name="VFMT_8_8_8_8_SINT" value="0x33"/>
 <value name="VFMT_8_SNORM" value="0x34"/>
 <value name="VFMT_8_8_SNORM" value="0x35"/>
 <value name="VFMT_8_8_8_SNORM" value="0x36"/>
 <value name="VFMT_8_8_8_8_SNORM" value="0x37"/>
 <value name="VFMT_10_10_10_2_UINT" value="0x38"/>
 <value name="VFMT_10_10_10_2_UNORM" value="0x39"/>
 <value name="VFMT_10_10_10_2_SINT" value="0x3a"/>
 <value name="VFMT_10_10_10_2_SNORM" value="0x3b"/>
 <value name="VFMT_2_10_10_10_UINT" value="0x3c"/>
 <value name="VFMT_2_10_10_10_UNORM" value="0x3d"/>
 <value name="VFMT_2_10_10_10_SINT" value="0x3e"/>
 <value name="VFMT_2_10_10_10_SNORM" value="0x3f"/>

 <value name="VFMT_NONE" value="0xff"/>
</enum>

<enum name="a3xx_tex_fmt">
 <value name="TFMT_5_6_5_UNORM" value="0x4"/>
 <value name="TFMT_5_5_5_1_UNORM" value="0x5"/>
 <value name="TFMT_4_4_4_4_UNORM" value="0x7"/>
 <value name="TFMT_Z16_UNORM" value="0x9"/>
 <value name="TFMT_X8Z24_UNORM" value="0xa"/>
 <value name="TFMT_Z32_FLOAT" value="0xb"/>

 <!--
The NV12 tiled/linear formats seem to require gang'd sampler
slots (ie. sampler state N plus N+1) for Y and UV planes.
They fetch yuv in single sam instruction, but still require
colorspace conversion in the shader.
 -->

 <value name="TFMT_UV_64X32" value="0x10"/>
 <value name="TFMT_VU_64X32" value="0x11"/>
 <value name="TFMT_Y_64X32" value="0x12"/>
 <value name="TFMT_NV12_64X32" value="0x13"/>
 <value name="TFMT_UV_LINEAR" value="0x14"/>
 <value name="TFMT_VU_LINEAR" value="0x15"/>
 <value name="TFMT_Y_LINEAR" value="0x16"/>
 <value name="TFMT_NV12_LINEAR" value="0x17"/>
 <value name="TFMT_I420_Y" value="0x18"/>
 <value name="TFMT_I420_U" value="0x1a"/>
 <value name="TFMT_I420_V" value="0x1b"/>

 <value name="TFMT_ATC_RGB" value="0x20"/>
 <value name="TFMT_ATC_RGBA_EXPLICIT" value="0x21"/>
 <value name="TFMT_ETC1" value="0x22"/>
 <value name="TFMT_ATC_RGBA_INTERPOLATED" value="0x23"/>

 <value name="TFMT_DXT1" value="0x24"/>
 <value name="TFMT_DXT3" value="0x25"/>
 <value name="TFMT_DXT5" value="0x26"/>

 <value name="TFMT_2_10_10_10_UNORM" value="0x28"/>
 <value name="TFMT_10_10_10_2_UNORM" value="0x29"/>
 <value name="TFMT_9_9_9_E5_FLOAT" value="0x2a"/>
 <value name="TFMT_11_11_10_FLOAT" value="0x2b"/>
 <value name="TFMT_A8_UNORM" value="0x2c"/>    <!-- GL_ALPHA -->
 <value name="TFMT_L8_UNORM" value="0x2d"/>
 <value name="TFMT_L8_A8_UNORM" value="0x2f"/> <!-- GL_LUMINANCE_ALPHA -->

 <!--
NOTE: GL_ALPHA and GL_LUMINANCE_ALPHA aren't handled in a similar way
to float16, float32.. but they seem to use non-standard swizzle too..
perhaps we can ditch that if the pattern follows of 0xn0, 0xn1, 0xn2,
0xn3 for 1, 2, 3, 4 components respectively..

Only formats filled in below are the ones that have been observed by
the blob or tested.. you can guess what the missing ones are..
 -->


 <value name="TFMT_8_UNORM" value="0x30"/>     <!-- GL_LUMINANCE -->
 <value name="TFMT_8_8_UNORM" value="0x31"/>
 <value name="TFMT_8_8_8_UNORM" value="0x32"/>
 <value name="TFMT_8_8_8_8_UNORM" value="0x33"/>

 <value name="TFMT_8_SNORM" value="0x34"/>
 <value name="TFMT_8_8_SNORM" value="0x35"/>
 <value name="TFMT_8_8_8_SNORM" value="0x36"/>
 <value name="TFMT_8_8_8_8_SNORM" value="0x37"/>

 <value name="TFMT_8_UINT" value="0x38"/>
 <value name="TFMT_8_8_UINT" value="0x39"/>
 <value name="TFMT_8_8_8_UINT" value="0x3a"/>
 <value name="TFMT_8_8_8_8_UINT" value="0x3b"/>

 <value name="TFMT_8_SINT" value="0x3c"/>
 <value name="TFMT_8_8_SINT" value="0x3d"/>
 <value name="TFMT_8_8_8_SINT" value="0x3e"/>
 <value name="TFMT_8_8_8_8_SINT" value="0x3f"/>

 <value name="TFMT_16_FLOAT" value="0x40"/>
 <value name="TFMT_16_16_FLOAT" value="0x41"/>
 <!-- TFMT_FLOAT_16_16_16 -->
 <value name="TFMT_16_16_16_16_FLOAT" value="0x43"/>

 <value name="TFMT_16_UINT" value="0x44"/>
 <value name="TFMT_16_16_UINT" value="0x45"/>
 <value name="TFMT_16_16_16_16_UINT" value="0x47"/>

 <value name="TFMT_16_SINT" value="0x48"/>
 <value name="TFMT_16_16_SINT" value="0x49"/>
 <value name="TFMT_16_16_16_16_SINT" value="0x4b"/>

 <value name="TFMT_16_UNORM" value="0x4c"/>
 <value name="TFMT_16_16_UNORM" value="0x4d"/>
 <value name="TFMT_16_16_16_16_UNORM" value="0x4f"/>

 <value name="TFMT_16_SNORM" value="0x50"/>
 <value name="TFMT_16_16_SNORM" value="0x51"/>
 <value name="TFMT_16_16_16_16_SNORM" value="0x53"/>

 <value name="TFMT_32_FLOAT" value="0x54"/>
 <value name="TFMT_32_32_FLOAT" value="0x55"/>
 <!-- TFMT_32_32_32_FLOAT -->
 <value name="TFMT_32_32_32_32_FLOAT" value="0x57"/>

 <value name="TFMT_32_UINT" value="0x58"/>
 <value name="TFMT_32_32_UINT" value="0x59"/>
 <value name="TFMT_32_32_32_32_UINT" value="0x5b"/>

 <value name="TFMT_32_SINT" value="0x5c"/>
 <value name="TFMT_32_32_SINT" value="0x5d"/>
 <value name="TFMT_32_32_32_32_SINT" value="0x5f"/>

 <value name="TFMT_2_10_10_10_UINT" value="0x60"/>
 <value name="TFMT_10_10_10_2_UINT" value="0x61"/>

 <value name="TFMT_ETC2_RG11_SNORM" value="0x70"/>
 <value name="TFMT_ETC2_RG11_UNORM" value="0x71"/>
 <value name="TFMT_ETC2_R11_SNORM" value="0x72"/>
 <value name="TFMT_ETC2_R11_UNORM" value="0x73"/>
 <value name="TFMT_ETC2_RGBA8" value="0x74"/>
 <value name="TFMT_ETC2_RGB8A1" value="0x75"/>
 <value name="TFMT_ETC2_RGB8" value="0x76"/>

 <value name="TFMT_NONE" value="0xff"/>
</enum>

<enum name="a3xx_color_fmt">
 <value name="RB_R5G6B5_UNORM"       value="0x00"/>
 <value name="RB_R5G5B5A1_UNORM"     value="0x01"/>
 <value name="RB_R4G4B4A4_UNORM"     value="0x03"/>
 <value name="RB_R8G8B8_UNORM"     value="0x04"/>
 <value name="RB_R8G8B8A8_UNORM"     value="0x08"/>
 <value name="RB_R8G8B8A8_SNORM"     value="0x09"/>
 <value name="RB_R8G8B8A8_UINT"     value="0x0a"/>
 <value name="RB_R8G8B8A8_SINT"     value="0x0b"/>
 <value name="RB_R8G8_UNORM"     value="0x0c"/>
 <value name="RB_R8G8_SNORM"     value="0x0d"/>
 <value name="RB_R8G8_UINT"     value="0x0e"/>
 <value name="RB_R8G8_SINT"     value="0x0f"/>
 <value name="RB_R10G10B10A2_UNORM"  value="0x10"/>
 <value name="RB_A2R10G10B10_UNORM"  value="0x11"/>
 <value name="RB_R10G10B10A2_UINT"   value="0x12"/>
 <value name="RB_A2R10G10B10_UINT"   value="0x13"/>

 <value name="RB_A8_UNORM"     value="0x14"/>
 <value name="RB_R8_UNORM"     value="0x15"/>

 <value name="RB_R16_FLOAT"          value="0x18"/>
 <value name="RB_R16G16_FLOAT"       value="0x19"/>
 <value name="RB_R16G16B16A16_FLOAT" value="0x1b"/> <!-- GL_HALF_FLOAT_OES -->
 <value name="RB_R11G11B10_FLOAT"    value="0x1c"/>

 <value name="RB_R16_SNORM"          value="0x20"/>
 <value name="RB_R16G16_SNORM"       value="0x21"/>
 <value name="RB_R16G16B16A16_SNORM" value="0x23"/>

 <value name="RB_R16_UNORM"          value="0x24"/>
 <value name="RB_R16G16_UNORM"       value="0x25"/>
 <value name="RB_R16G16B16A16_UNORM" value="0x27"/>

 <value name="RB_R16_SINT"     value="0x28"/>
 <value name="RB_R16G16_SINT"     value="0x29"/>
 <value name="RB_R16G16B16A16_SINT"  value="0x2b"/>

 <value name="RB_R16_UINT"     value="0x2c"/>
 <value name="RB_R16G16_UINT"     value="0x2d"/>
 <value name="RB_R16G16B16A16_UINT"  value="0x2f"/>

 <value name="RB_R32_FLOAT"          value="0x30"/>
 <value name="RB_R32G32_FLOAT"       value="0x31"/>
 <value name="RB_R32G32B32A32_FLOAT" value="0x33"/> <!-- GL_FLOAT -->

 <value name="RB_R32_SINT"     value="0x34"/>
 <value name="RB_R32G32_SINT"     value="0x35"/>
 <value name="RB_R32G32B32A32_SINT"  value="0x37"/>

 <value name="RB_R32_UINT"     value="0x38"/>
 <value name="RB_R32G32_UINT"     value="0x39"/>
 <value name="RB_R32G32B32A32_UINT"  value="0x3b"/>

 <value name="RB_NONE"               value="0xff"/>
</enum>

<enum name="a3xx_cp_perfcounter_select">
 <value value="0x00" name="CP_ALWAYS_COUNT"/>
 <value value="0x03" name="CP_AHB_PFPTRANS_WAIT"/>
 <value value="0x06" name="CP_AHB_NRTTRANS_WAIT"/>
 <value value="0x08" name="CP_CSF_NRT_READ_WAIT"/>
 <value value="0x09" name="CP_CSF_I1_FIFO_FULL"/>
 <value value="0x0a" name="CP_CSF_I2_FIFO_FULL"/>
 <value value="0x0b" name="CP_CSF_ST_FIFO_FULL"/>
 <value value="0x0c" name="CP_RESERVED_12"/>
 <value value="0x0d" name="CP_CSF_RING_ROQ_FULL"/>
 <value value="0x0e" name="CP_CSF_I1_ROQ_FULL"/>
 <value value="0x0f" name="CP_CSF_I2_ROQ_FULL"/>
 <value value="0x10" name="CP_CSF_ST_ROQ_FULL"/>
 <value value="0x11" name="CP_RESERVED_17"/>
 <value value="0x12" name="CP_MIU_TAG_MEM_FULL"/>
 <value value="0x16" name="CP_MIU_NRT_WRITE_STALLED"/>
 <value value="0x17" name="CP_MIU_NRT_READ_STALLED"/>
 <value value="0x1a" name="CP_ME_REGS_RB_DONE_FIFO_FULL"/>
 <value value="0x1b" name="CP_ME_REGS_VS_EVENT_FIFO_FULL"/>
 <value value="0x1c" name="CP_ME_REGS_PS_EVENT_FIFO_FULL"/>
 <value value="0x1d" name="CP_ME_REGS_CF_EVENT_FIFO_FULL"/>
 <value value="0x1e" name="CP_ME_MICRO_RB_STARVED"/>
 <value value="0x28" name="CP_AHB_RBBM_DWORD_SENT"/>
 <value value="0x29" name="CP_ME_BUSY_CLOCKS"/>
 <value value="0x2a" name="CP_ME_WAIT_CONTEXT_AVAIL"/>
 <value value="0x2b" name="CP_PFP_TYPE0_PACKET"/>
 <value value="0x2c" name="CP_PFP_TYPE3_PACKET"/>
 <value value="0x2d" name="CP_CSF_RB_WPTR_NEQ_RPTR"/>
 <value value="0x2e" name="CP_CSF_I1_SIZE_NEQ_ZERO"/>
 <value value="0x2f" name="CP_CSF_I2_SIZE_NEQ_ZERO"/>
 <value value="0x30" name="CP_CSF_RBI1I2_FETCHING"/>
</enum>

<enum name="a3xx_gras_tse_perfcounter_select">
 <value value="0x00" name="GRAS_TSEPERF_INPUT_PRIM"/>
 <value value="0x01" name="GRAS_TSEPERF_INPUT_NULL_PRIM"/>
 <value value="0x02" name="GRAS_TSEPERF_TRIVAL_REJ_PRIM"/>
 <value value="0x03" name="GRAS_TSEPERF_CLIPPED_PRIM"/>
 <value value="0x04" name="GRAS_TSEPERF_NEW_PRIM"/>
 <value value="0x05" name="GRAS_TSEPERF_ZERO_AREA_PRIM"/>
 <value value="0x06" name="GRAS_TSEPERF_FACENESS_CULLED_PRIM"/>
 <value value="0x07" name="GRAS_TSEPERF_ZERO_PIXEL_PRIM"/>
 <value value="0x08" name="GRAS_TSEPERF_OUTPUT_NULL_PRIM"/>
 <value value="0x09" name="GRAS_TSEPERF_OUTPUT_VISIBLE_PRIM"/>
 <value value="0x0a" name="GRAS_TSEPERF_PRE_CLIP_PRIM"/>
 <value value="0x0b" name="GRAS_TSEPERF_POST_CLIP_PRIM"/>
 <value value="0x0c" name="GRAS_TSEPERF_WORKING_CYCLES"/>
 <value value="0x0d" name="GRAS_TSEPERF_PC_STARVE"/>
 <value value="0x0e" name="GRAS_TSERASPERF_STALL"/>
</enum>

<enum name="a3xx_gras_ras_perfcounter_select">
 <value value="0x00" name="GRAS_RASPERF_16X16_TILES"/>
 <value value="0x01" name="GRAS_RASPERF_8X8_TILES"/>
 <value value="0x02" name="GRAS_RASPERF_4X4_TILES"/>
 <value value="0x03" name="GRAS_RASPERF_WORKING_CYCLES"/>
 <value value="0x04" name="GRAS_RASPERF_STALL_CYCLES_BY_RB"/>
 <value value="0x05" name="GRAS_RASPERF_STALL_CYCLES_BY_VSC"/>
 <value value="0x06" name="GRAS_RASPERF_STARVE_CYCLES_BY_TSE"/>
</enum>

<enum name="a3xx_hlsq_perfcounter_select">
 <value value="0x00" name="HLSQ_PERF_SP_VS_CONSTANT"/>
 <value value="0x01" name="HLSQ_PERF_SP_VS_INSTRUCTIONS"/>
 <value value="0x02" name="HLSQ_PERF_SP_FS_CONSTANT"/>
 <value value="0x03" name="HLSQ_PERF_SP_FS_INSTRUCTIONS"/>
 <value value="0x04" name="HLSQ_PERF_TP_STATE"/>
 <value value="0x05" name="HLSQ_PERF_QUADS"/>
 <value value="0x06" name="HLSQ_PERF_PIXELS"/>
 <value value="0x07" name="HLSQ_PERF_VERTICES"/>
 <value value="0x08" name="HLSQ_PERF_FS8_THREADS"/>
 <value value="0x09" name="HLSQ_PERF_FS16_THREADS"/>
 <value value="0x0a" name="HLSQ_PERF_FS32_THREADS"/>
 <value value="0x0b" name="HLSQ_PERF_VS8_THREADS"/>
 <value value="0x0c" name="HLSQ_PERF_VS16_THREADS"/>
 <value value="0x0d" name="HLSQ_PERF_SP_VS_DATA_BYTES"/>
 <value value="0x0e" name="HLSQ_PERF_SP_FS_DATA_BYTES"/>
 <value value="0x0f" name="HLSQ_PERF_ACTIVE_CYCLES"/>
 <value value="0x10" name="HLSQ_PERF_STALL_CYCLES_SP_STATE"/>
 <value value="0x11" name="HLSQ_PERF_STALL_CYCLES_SP_VS"/>
 <value value="0x12" name="HLSQ_PERF_STALL_CYCLES_SP_FS"/>
 <value value="0x13" name="HLSQ_PERF_STALL_CYCLES_UCHE"/>
 <value value="0x14" name="HLSQ_PERF_RBBM_LOAD_CYCLES"/>
 <value value="0x15" name="HLSQ_PERF_DI_TO_VS_START_SP0"/>
 <value value="0x16" name="HLSQ_PERF_DI_TO_FS_START_SP0"/>
 <value value="0x17" name="HLSQ_PERF_VS_START_TO_DONE_SP0"/>
 <value value="0x18" name="HLSQ_PERF_FS_START_TO_DONE_SP0"/>
 <value value="0x19" name="HLSQ_PERF_SP_STATE_COPY_CYCLES_VS"/>
 <value value="0x1a" name="HLSQ_PERF_SP_STATE_COPY_CYCLES_FS"/>
 <value value="0x1b" name="HLSQ_PERF_UCHE_LATENCY_CYCLES"/>
 <value value="0x1c" name="HLSQ_PERF_UCHE_LATENCY_COUNT"/>
</enum>

<enum name="a3xx_pc_perfcounter_select">
 <value value="0x00" name="PC_PCPERF_VISIBILITY_STREAMS"/>
 <value value="0x01" name="PC_PCPERF_TOTAL_INSTANCES"/>
 <value value="0x02" name="PC_PCPERF_PRIMITIVES_PC_VPC"/>
 <value value="0x03" name="PC_PCPERF_PRIMITIVES_KILLED_BY_VS"/>
 <value value="0x04" name="PC_PCPERF_PRIMITIVES_VISIBLE_BY_VS"/>
 <value value="0x05" name="PC_PCPERF_DRAWCALLS_KILLED_BY_VS"/>
 <value value="0x06" name="PC_PCPERF_DRAWCALLS_VISIBLE_BY_VS"/>
 <value value="0x07" name="PC_PCPERF_VERTICES_TO_VFD"/>
 <value value="0x08" name="PC_PCPERF_REUSED_VERTICES"/>
 <value value="0x09" name="PC_PCPERF_CYCLES_STALLED_BY_VFD"/>
 <value value="0x0a" name="PC_PCPERF_CYCLES_STALLED_BY_TSE"/>
 <value value="0x0b" name="PC_PCPERF_CYCLES_STALLED_BY_VBIF"/>
 <value value="0x0c" name="PC_PCPERF_CYCLES_IS_WORKING"/>
</enum>

<enum name="a3xx_rb_perfcounter_select">
 <value value="0x00" name="RB_RBPERF_ACTIVE_CYCLES_ANY"/>
 <value value="0x01" name="RB_RBPERF_ACTIVE_CYCLES_ALL"/>
 <value value="0x02" name="RB_RBPERF_STARVE_CYCLES_BY_SP"/>
 <value value="0x03" name="RB_RBPERF_STARVE_CYCLES_BY_RAS"/>
 <value value="0x04" name="RB_RBPERF_STARVE_CYCLES_BY_MARB"/>
 <value value="0x05" name="RB_RBPERF_STALL_CYCLES_BY_MARB"/>
 <value value="0x06" name="RB_RBPERF_STALL_CYCLES_BY_HLSQ"/>
 <value value="0x07" name="RB_RBPERF_RB_MARB_DATA"/>
 <value value="0x08" name="RB_RBPERF_SP_RB_QUAD"/>
 <value value="0x09" name="RB_RBPERF_RAS_EARLY_Z_QUADS"/>
 <value value="0x0a" name="RB_RBPERF_GMEM_CH0_READ"/>
 <value value="0x0b" name="RB_RBPERF_GMEM_CH1_READ"/>
 <value value="0x0c" name="RB_RBPERF_GMEM_CH0_WRITE"/>
 <value value="0x0d" name="RB_RBPERF_GMEM_CH1_WRITE"/>
 <value value="0x0e" name="RB_RBPERF_CP_CONTEXT_DONE"/>
 <value value="0x0f" name="RB_RBPERF_CP_CACHE_FLUSH"/>
 <value value="0x10" name="RB_RBPERF_CP_ZPASS_DONE"/>
</enum>

<enum name="a3xx_rbbm_perfcounter_select">
 <value value="0" name="RBBM_ALAWYS_ON"/>
 <value value="1" name="RBBM_VBIF_BUSY"/>
 <value value="2" name="RBBM_TSE_BUSY"/>
 <value value="3" name="RBBM_RAS_BUSY"/>
 <value value="4" name="RBBM_PC_DCALL_BUSY"/>
 <value value="5" name="RBBM_PC_VSD_BUSY"/>
 <value value="6" name="RBBM_VFD_BUSY"/>
 <value value="7" name="RBBM_VPC_BUSY"/>
 <value value="8" name="RBBM_UCHE_BUSY"/>
 <value value="9" name="RBBM_VSC_BUSY"/>
 <value value="10" name="RBBM_HLSQ_BUSY"/>
 <value value="11" name="RBBM_ANY_RB_BUSY"/>
 <value value="12" name="RBBM_ANY_TEX_BUSY"/>
 <value value="13" name="RBBM_ANY_USP_BUSY"/>
 <value value="14" name="RBBM_ANY_MARB_BUSY"/>
 <value value="15" name="RBBM_ANY_ARB_BUSY"/>
 <value value="16" name="RBBM_AHB_STATUS_BUSY"/>
 <value value="17" name="RBBM_AHB_STATUS_STALLED"/>
 <value value="18" name="RBBM_AHB_STATUS_TXFR"/>
 <value value="19" name="RBBM_AHB_STATUS_TXFR_SPLIT"/>
 <value value="20" name="RBBM_AHB_STATUS_TXFR_ERROR"/>
 <value value="21" name="RBBM_AHB_STATUS_LONG_STALL"/>
 <value value="22" name="RBBM_RBBM_STATUS_MASKED"/>
</enum>

<enum name="a3xx_sp_perfcounter_select">
 <value value="0x00" name="SP_LM_LOAD_INSTRUCTIONS"/>
 <value value="0x01" name="SP_LM_STORE_INSTRUCTIONS"/>
 <value value="0x02" name="SP_LM_ATOMICS"/>
 <value value="0x03" name="SP_UCHE_LOAD_INSTRUCTIONS"/>
 <value value="0x04" name="SP_UCHE_STORE_INSTRUCTIONS"/>
 <value value="0x05" name="SP_UCHE_ATOMICS"/>
 <value value="0x06" name="SP_VS_TEX_INSTRUCTIONS"/>
 <value value="0x07" name="SP_VS_CFLOW_INSTRUCTIONS"/>
 <value value="0x08" name="SP_VS_EFU_INSTRUCTIONS"/>
 <value value="0x09" name="SP_VS_FULL_ALU_INSTRUCTIONS"/>
 <value value="0x0a" name="SP_VS_HALF_ALU_INSTRUCTIONS"/>
 <value value="0x0b" name="SP_FS_TEX_INSTRUCTIONS"/>
 <value value="0x0c" name="SP_FS_CFLOW_INSTRUCTIONS"/>
 <value value="0x0d" name="SP_FS_EFU_INSTRUCTIONS"/>
 <value value="0x0e" name="SP_FS_FULL_ALU_INSTRUCTIONS"/>
 <value value="0x0f" name="SP_FS_HALF_ALU_INSTRUCTIONS"/>
 <value value="0x10" name="SP_FS_BARY_INSTRUCTIONS"/>
 <value value="0x11" name="SP_VS_INSTRUCTIONS"/>
 <value value="0x12" name="SP_FS_INSTRUCTIONS"/>
 <value value="0x13" name="SP_ADDR_LOCK_COUNT"/>
 <value value="0x14" name="SP_UCHE_READ_TRANS"/>
 <value value="0x15" name="SP_UCHE_WRITE_TRANS"/>
 <value value="0x16" name="SP_EXPORT_VPC_TRANS"/>
 <value value="0x17" name="SP_EXPORT_RB_TRANS"/>
 <value value="0x18" name="SP_PIXELS_KILLED"/>
 <value value="0x19" name="SP_ICL1_REQUESTS"/>
 <value value="0x1a" name="SP_ICL1_MISSES"/>
 <value value="0x1b" name="SP_ICL0_REQUESTS"/>
 <value value="0x1c" name="SP_ICL0_MISSES"/>
 <value value="0x1d" name="SP_ALU_ACTIVE_CYCLES"/>
 <value value="0x1e" name="SP_EFU_ACTIVE_CYCLES"/>
 <value value="0x1f" name="SP_STALL_CYCLES_BY_VPC"/>
 <value value="0x20" name="SP_STALL_CYCLES_BY_TP"/>
 <value value="0x21" name="SP_STALL_CYCLES_BY_UCHE"/>
 <value value="0x22" name="SP_STALL_CYCLES_BY_RB"/>
 <value value="0x23" name="SP_ACTIVE_CYCLES_ANY"/>
 <value value="0x24" name="SP_ACTIVE_CYCLES_ALL"/>
</enum>

<enum name="a3xx_tp_perfcounter_select">
 <value value="0x00" name="TPL1_TPPERF_L1_REQUESTS"/>
 <value value="0x01" name="TPL1_TPPERF_TP0_L1_REQUESTS"/>
 <value value="0x02" name="TPL1_TPPERF_TP0_L1_MISSES"/>
 <value value="0x03" name="TPL1_TPPERF_TP1_L1_REQUESTS"/>
 <value value="0x04" name="TPL1_TPPERF_TP1_L1_MISSES"/>
 <value value="0x05" name="TPL1_TPPERF_TP2_L1_REQUESTS"/>
 <value value="0x06" name="TPL1_TPPERF_TP2_L1_MISSES"/>
 <value value="0x07" name="TPL1_TPPERF_TP3_L1_REQUESTS"/>
 <value value="0x08" name="TPL1_TPPERF_TP3_L1_MISSES"/>
 <value value="0x09" name="TPL1_TPPERF_OUTPUT_TEXELS_POINT"/>
 <value value="0x0a" name="TPL1_TPPERF_OUTPUT_TEXELS_BILINEAR"/>
 <value value="0x0b" name="TPL1_TPPERF_OUTPUT_TEXELS_MIP"/>
 <value value="0x0c" name="TPL1_TPPERF_OUTPUT_TEXELS_ANISO"/>
 <value value="0x0d" name="TPL1_TPPERF_BILINEAR_OPS"/>
 <value value="0x0e" name="TPL1_TPPERF_QUADSQUADS_OFFSET"/>
 <value value="0x0f" name="TPL1_TPPERF_QUADQUADS_SHADOW"/>
 <value value="0x10" name="TPL1_TPPERF_QUADS_ARRAY"/>
 <value value="0x11" name="TPL1_TPPERF_QUADS_PROJECTION"/>
 <value value="0x12" name="TPL1_TPPERF_QUADS_GRADIENT"/>
 <value value="0x13" name="TPL1_TPPERF_QUADS_1D2D"/>
 <value value="0x14" name="TPL1_TPPERF_QUADS_3DCUBE"/>
 <value value="0x15" name="TPL1_TPPERF_ZERO_LOD"/>
 <value value="0x16" name="TPL1_TPPERF_OUTPUT_TEXELS"/>
 <value value="0x17" name="TPL1_TPPERF_ACTIVE_CYCLES_ANY"/>
 <value value="0x18" name="TPL1_TPPERF_ACTIVE_CYCLES_ALL"/>
 <value value="0x19" name="TPL1_TPPERF_STALL_CYCLES_BY_ARB"/>
 <value value="0x1a" name="TPL1_TPPERF_LATENCY"/>
 <value value="0x1b" name="TPL1_TPPERF_LATENCY_TRANS"/>
</enum>

<enum name="a3xx_vfd_perfcounter_select">
 <value value="0" name="VFD_PERF_UCHE_BYTE_FETCHED"/>
 <value value="1" name="VFD_PERF_UCHE_TRANS"/>
 <value value="2" name="VFD_PERF_VPC_BYPASS_COMPONENTS"/>
 <value value="3" name="VFD_PERF_FETCH_INSTRUCTIONS"/>
 <value value="4" name="VFD_PERF_DECODE_INSTRUCTIONS"/>
 <value value="5" name="VFD_PERF_ACTIVE_CYCLES"/>
 <value value="6" name="VFD_PERF_STALL_CYCLES_UCHE"/>
 <value value="7" name="VFD_PERF_STALL_CYCLES_HLSQ"/>
 <value value="8" name="VFD_PERF_STALL_CYCLES_VPC_BYPASS"/>
 <value value="9" name="VFD_PERF_STALL_CYCLES_VPC_ALLOC"/>
</enum>

<enum name="a3xx_vpc_perfcounter_select">
 <value value="0" name="VPC_PERF_SP_LM_PRIMITIVES"/>
 <value value="1" name="VPC_PERF_COMPONENTS_FROM_SP"/>
 <value value="2" name="VPC_PERF_SP_LM_COMPONENTS"/>
 <value value="3" name="VPC_PERF_ACTIVE_CYCLES"/>
 <value value="4" name="VPC_PERF_STALL_CYCLES_LM"/>
 <value value="5" name="VPC_PERF_STALL_CYCLES_RAS"/>
</enum>

<enum name="a3xx_uche_perfcounter_select">
 <value value="0x00" name="UCHE_UCHEPERF_VBIF_READ_BEATS_TP"/>
 <value value="0x01" name="UCHE_UCHEPERF_VBIF_READ_BEATS_VFD"/>
 <value value="0x02" name="UCHE_UCHEPERF_VBIF_READ_BEATS_HLSQ"/>
 <value value="0x03" name="UCHE_UCHEPERF_VBIF_READ_BEATS_MARB"/>
 <value value="0x04" name="UCHE_UCHEPERF_VBIF_READ_BEATS_SP"/>
 <value value="0x08" name="UCHE_UCHEPERF_READ_REQUESTS_TP"/>
 <value value="0x09" name="UCHE_UCHEPERF_READ_REQUESTS_VFD"/>
 <value value="0x0a" name="UCHE_UCHEPERF_READ_REQUESTS_HLSQ"/>
 <value value="0x0b" name="UCHE_UCHEPERF_READ_REQUESTS_MARB"/>
 <value value="0x0c" name="UCHE_UCHEPERF_READ_REQUESTS_SP"/>
 <value value="0x0d" name="UCHE_UCHEPERF_WRITE_REQUESTS_MARB"/>
 <value value="0x0e" name="UCHE_UCHEPERF_WRITE_REQUESTS_SP"/>
 <value value="0x0f" name="UCHE_UCHEPERF_TAG_CHECK_FAILS"/>
 <value value="0x10" name="UCHE_UCHEPERF_EVICTS"/>
 <value value="0x11" name="UCHE_UCHEPERF_FLUSHES"/>
 <value value="0x12" name="UCHE_UCHEPERF_VBIF_LATENCY_CYCLES"/>
 <value value="0x13" name="UCHE_UCHEPERF_VBIF_LATENCY_SAMPLES"/>
 <value value="0x14" name="UCHE_UCHEPERF_ACTIVE_CYCLES"/>
</enum>

<enum name="a3xx_intp_mode">
 <value name="SMOOTH" value="0"/>
 <value name="FLAT" value="1"/>
 <value name="ZERO" value="2"/>
 <value name="ONE" value="3"/>
</enum>

<enum name="a3xx_repl_mode">
 <value name="S" value="1"/>
 <value name="T" value="2"/>
 <value name="ONE_T" value="3"/>
</enum>

<domain name="A3XX" width="32">
 <!-- RBBM registers -->
 <reg32 offset="0x0000" name="RBBM_HW_VERSION"/>
 <reg32 offset="0x0001" name="RBBM_HW_RELEASE"/>
 <reg32 offset="0x0002" name="RBBM_HW_CONFIGURATION"/>
 <reg32 offset="0x0010" name="RBBM_CLOCK_CTL"/>
 <reg32 offset="0x0012" name="RBBM_SP_HYST_CNT"/>
 <reg32 offset="0x0018" name="RBBM_SW_RESET_CMD"/>
 <reg32 offset="0x0020" name="RBBM_AHB_CTL0"/>
 <reg32 offset="0x0021" name="RBBM_AHB_CTL1"/>
 <reg32 offset="0x0022" name="RBBM_AHB_CMD"/>
 <reg32 offset="0x0027" name="RBBM_AHB_ERROR_STATUS"/>
 <reg32 offset="0x002e" name="RBBM_GPR0_CTL"/>
 <reg32 offset="0x0030" name="RBBM_STATUS">
  <bitfield name="HI_BUSY" pos="0" type="boolean"/>
  <bitfield name="CP_ME_BUSY" pos="1" type="boolean"/>
  <bitfield name="CP_PFP_BUSY" pos="2" type="boolean"/>
  <bitfield name="CP_NRT_BUSY" pos="14" type="boolean"/>
  <bitfield name="VBIF_BUSY" pos="15" type="boolean"/>
  <bitfield name="TSE_BUSY" pos="16" type="boolean"/>
  <bitfield name="RAS_BUSY" pos="17" type="boolean"/>
  <bitfield name="RB_BUSY" pos="18" type="boolean"/>
  <bitfield name="PC_DCALL_BUSY" pos="19" type="boolean"/>
  <bitfield name="PC_VSD_BUSY" pos="20" type="boolean"/>
  <bitfield name="VFD_BUSY" pos="21" type="boolean"/>
  <bitfield name="VPC_BUSY" pos="22" type="boolean"/>
  <bitfield name="UCHE_BUSY" pos="23" type="boolean"/>
  <bitfield name="SP_BUSY" pos="24" type="boolean"/>
  <bitfield name="TPL1_BUSY" pos="25" type="boolean"/>
  <bitfield name="MARB_BUSY" pos="26" type="boolean"/>
  <bitfield name="VSC_BUSY" pos="27" type="boolean"/>
  <bitfield name="ARB_BUSY" pos="28" type="boolean"/>
  <bitfield name="HLSQ_BUSY" pos="29" type="boolean"/>
  <bitfield name="GPU_BUSY_NOHC" pos="30" type="boolean"/>
  <bitfield name="GPU_BUSY" pos="31" type="boolean"/>
 </reg32>
 <!-- used in fw CP_WAIT_FOR_IDLE, similar to NQWAIT_UNTIL on a2xx: -->
 <reg32 offset="0x0040" name="RBBM_NQWAIT_UNTIL"/>
 <reg32 offset="0x0033" name="RBBM_WAIT_IDLE_CLOCKS_CTL"/>
 <reg32 offset="0x0050" name="RBBM_INTERFACE_HANG_INT_CTL"/>
 <reg32 offset="0x0051" name="RBBM_INTERFACE_HANG_MASK_CTL0"/>
 <reg32 offset="0x0054" name="RBBM_INTERFACE_HANG_MASK_CTL1"/>
 <reg32 offset="0x0057" name="RBBM_INTERFACE_HANG_MASK_CTL2"/>
 <reg32 offset="0x005a" name="RBBM_INTERFACE_HANG_MASK_CTL3"/>

 <bitset name="A3XX_INT0">
  <bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>
  <bitfield name="RBBM_AHB_ERROR" pos="1" type="boolean"/>
  <bitfield name="RBBM_REG_TIMEOUT" pos="2" type="boolean"/>
  <bitfield name="RBBM_ME_MS_TIMEOUT" pos="3" type="boolean"/>
  <bitfield name="RBBM_PFP_MS_TIMEOUT" pos="4" type="boolean"/>
  <bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="5" type="boolean"/>
  <bitfield name="VFD_ERROR" pos="6" type="boolean"/>
  <bitfield name="CP_SW_INT" pos="7" type="boolean"/>
  <bitfield name="CP_T0_PACKET_IN_IB" pos="8" type="boolean"/>
  <bitfield name="CP_OPCODE_ERROR" pos="9" type="boolean"/>
  <bitfield name="CP_RESERVED_BIT_ERROR" pos="10" type="boolean"/>
  <bitfield name="CP_HW_FAULT" pos="11" type="boolean"/>
  <bitfield name="CP_DMA" pos="12" type="boolean"/>
  <bitfield name="CP_IB2_INT" pos="13" type="boolean"/>
  <bitfield name="CP_IB1_INT" pos="14" type="boolean"/>
  <bitfield name="CP_RB_INT" pos="15" type="boolean"/>
  <bitfield name="CP_REG_PROTECT_FAULT" pos="16" type="boolean"/>
  <bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>
  <bitfield name="CP_VS_DONE_TS" pos="18" type="boolean"/>
  <bitfield name="CP_PS_DONE_TS" pos="19" type="boolean"/>
  <bitfield name="CACHE_FLUSH_TS" pos="20" type="boolean"/>
  <bitfield name="CP_AHB_ERROR_HALT" pos="21" type="boolean"/>
  <bitfield name="MISC_HANG_DETECT" pos="24" type="boolean"/>
  <bitfield name="UCHE_OOB_ACCESS" pos="25" type="boolean"/>
 </bitset>


 <!--
set in pm4 fw INVALID_JUMP_TABLE_ENTRY and CP_INTERRUPT (compare
to CP_INT_STATUS in a2xx firmware), so this seems to be the a3xx
way for fw to raise and irq:
 -->

 <reg32 offset="0x0060" name="RBBM_INT_SET_CMD" type="A3XX_INT0"/>
 <reg32 offset="0x0061" name="RBBM_INT_CLEAR_CMD" type="A3XX_INT0"/>
 <reg32 offset="0x0063" name="RBBM_INT_0_MASK" type="A3XX_INT0"/>
 <reg32 offset="0x0064" name="RBBM_INT_0_STATUS" type="A3XX_INT0"/>
 <reg32 offset="0x0080" name="RBBM_PERFCTR_CTL">
  <bitfield name="ENABLE" pos="0" type="boolean"/>
 </reg32>
 <reg32 offset="0x0081" name="RBBM_PERFCTR_LOAD_CMD0"/>
 <reg32 offset="0x0082" name="RBBM_PERFCTR_LOAD_CMD1"/>
 <reg32 offset="0x0084" name="RBBM_PERFCTR_LOAD_VALUE_LO"/>
 <reg32 offset="0x0085" name="RBBM_PERFCTR_LOAD_VALUE_HI"/>
 <reg32 offset="0x0086" name="RBBM_PERFCOUNTER0_SELECT" type="a3xx_rbbm_perfcounter_select"/>
 <reg32 offset="0x0087" name="RBBM_PERFCOUNTER1_SELECT" type="a3xx_rbbm_perfcounter_select"/>
 <reg32 offset="0x0088" name="RBBM_GPU_BUSY_MASKED"/>
 <reg32 offset="0x0090" name="RBBM_PERFCTR_CP_0_LO"/>
 <reg32 offset="0x0091" name="RBBM_PERFCTR_CP_0_HI"/>
 <reg32 offset="0x0092" name="RBBM_PERFCTR_RBBM_0_LO"/>
 <reg32 offset="0x0093" name="RBBM_PERFCTR_RBBM_0_HI"/>
 <reg32 offset="0x0094" name="RBBM_PERFCTR_RBBM_1_LO"/>
 <reg32 offset="0x0095" name="RBBM_PERFCTR_RBBM_1_HI"/>
 <reg32 offset="0x0096" name="RBBM_PERFCTR_PC_0_LO"/>
 <reg32 offset="0x0097" name="RBBM_PERFCTR_PC_0_HI"/>
 <reg32 offset="0x0098" name="RBBM_PERFCTR_PC_1_LO"/>
 <reg32 offset="0x0099" name="RBBM_PERFCTR_PC_1_HI"/>
 <reg32 offset="0x009a" name="RBBM_PERFCTR_PC_2_LO"/>
 <reg32 offset="0x009b" name="RBBM_PERFCTR_PC_2_HI"/>
 <reg32 offset="0x009c" name="RBBM_PERFCTR_PC_3_LO"/>
 <reg32 offset="0x009d" name="RBBM_PERFCTR_PC_3_HI"/>
 <reg32 offset="0x009e" name="RBBM_PERFCTR_VFD_0_LO"/>
 <reg32 offset="0x009f" name="RBBM_PERFCTR_VFD_0_HI"/>
 <reg32 offset="0x00a0" name="RBBM_PERFCTR_VFD_1_LO"/>
 <reg32 offset="0x00a1" name="RBBM_PERFCTR_VFD_1_HI"/>
 <reg32 offset="0x00a2" name="RBBM_PERFCTR_HLSQ_0_LO"/>
 <reg32 offset="0x00a3" name="RBBM_PERFCTR_HLSQ_0_HI"/>
 <reg32 offset="0x00a4" name="RBBM_PERFCTR_HLSQ_1_LO"/>
 <reg32 offset="0x00a5" name="RBBM_PERFCTR_HLSQ_1_HI"/>
 <reg32 offset="0x00a6" name="RBBM_PERFCTR_HLSQ_2_LO"/>
 <reg32 offset="0x00a7" name="RBBM_PERFCTR_HLSQ_2_HI"/>
 <reg32 offset="0x00a8" name="RBBM_PERFCTR_HLSQ_3_LO"/>
 <reg32 offset="0x00a9" name="RBBM_PERFCTR_HLSQ_3_HI"/>
 <reg32 offset="0x00aa" name="RBBM_PERFCTR_HLSQ_4_LO"/>
 <reg32 offset="0x00ab" name="RBBM_PERFCTR_HLSQ_4_HI"/>
 <reg32 offset="0x00ac" name="RBBM_PERFCTR_HLSQ_5_LO"/>
 <reg32 offset="0x00ad" name="RBBM_PERFCTR_HLSQ_5_HI"/>
 <reg32 offset="0x00ae" name="RBBM_PERFCTR_VPC_0_LO"/>
 <reg32 offset="0x00af" name="RBBM_PERFCTR_VPC_0_HI"/>
 <reg32 offset="0x00b0" name="RBBM_PERFCTR_VPC_1_LO"/>
 <reg32 offset="0x00b1" name="RBBM_PERFCTR_VPC_1_HI"/>
 <reg32 offset="0x00b2" name="RBBM_PERFCTR_TSE_0_LO"/>
 <reg32 offset="0x00b3" name="RBBM_PERFCTR_TSE_0_HI"/>
 <reg32 offset="0x00b4" name="RBBM_PERFCTR_TSE_1_LO"/>
 <reg32 offset="0x00b5" name="RBBM_PERFCTR_TSE_1_HI"/>
 <reg32 offset="0x00b6" name="RBBM_PERFCTR_RAS_0_LO"/>
 <reg32 offset="0x00b7" name="RBBM_PERFCTR_RAS_0_HI"/>
 <reg32 offset="0x00b8" name="RBBM_PERFCTR_RAS_1_LO"/>
 <reg32 offset="0x00b9" name="RBBM_PERFCTR_RAS_1_HI"/>
 <reg32 offset="0x00ba" name="RBBM_PERFCTR_UCHE_0_LO"/>
 <reg32 offset="0x00bb" name="RBBM_PERFCTR_UCHE_0_HI"/>
 <reg32 offset="0x00bc" name="RBBM_PERFCTR_UCHE_1_LO"/>
 <reg32 offset="0x00bd" name="RBBM_PERFCTR_UCHE_1_HI"/>
 <reg32 offset="0x00be" name="RBBM_PERFCTR_UCHE_2_LO"/>
 <reg32 offset="0x00bf" name="RBBM_PERFCTR_UCHE_2_HI"/>
 <reg32 offset="0x00c0" name="RBBM_PERFCTR_UCHE_3_LO"/>
 <reg32 offset="0x00c1" name="RBBM_PERFCTR_UCHE_3_HI"/>
 <reg32 offset="0x00c2" name="RBBM_PERFCTR_UCHE_4_LO"/>
 <reg32 offset="0x00c3" name="RBBM_PERFCTR_UCHE_4_HI"/>
 <reg32 offset="0x00c4" name="RBBM_PERFCTR_UCHE_5_LO"/>
 <reg32 offset="0x00c5" name="RBBM_PERFCTR_UCHE_5_HI"/>
 <reg32 offset="0x00c6" name="RBBM_PERFCTR_TP_0_LO"/>
 <reg32 offset="0x00c7" name="RBBM_PERFCTR_TP_0_HI"/>
 <reg32 offset="0x00c8" name="RBBM_PERFCTR_TP_1_LO"/>
 <reg32 offset="0x00c9" name="RBBM_PERFCTR_TP_1_HI"/>
 <reg32 offset="0x00ca" name="RBBM_PERFCTR_TP_2_LO"/>
 <reg32 offset="0x00cb" name="RBBM_PERFCTR_TP_2_HI"/>
 <reg32 offset="0x00cc" name="RBBM_PERFCTR_TP_3_LO"/>
 <reg32 offset="0x00cd" name="RBBM_PERFCTR_TP_3_HI"/>
 <reg32 offset="0x00ce" name="RBBM_PERFCTR_TP_4_LO"/>
 <reg32 offset="0x00cf" name="RBBM_PERFCTR_TP_4_HI"/>
 <reg32 offset="0x00d0" name="RBBM_PERFCTR_TP_5_LO"/>
 <reg32 offset="0x00d1" name="RBBM_PERFCTR_TP_5_HI"/>
 <reg32 offset="0x00d2" name="RBBM_PERFCTR_SP_0_LO"/>
 <reg32 offset="0x00d3" name="RBBM_PERFCTR_SP_0_HI"/>
 <reg32 offset="0x00d4" name="RBBM_PERFCTR_SP_1_LO"/>
 <reg32 offset="0x00d5" name="RBBM_PERFCTR_SP_1_HI"/>
 <reg32 offset="0x00d6" name="RBBM_PERFCTR_SP_2_LO"/>
 <reg32 offset="0x00d7" name="RBBM_PERFCTR_SP_2_HI"/>
 <reg32 offset="0x00d8" name="RBBM_PERFCTR_SP_3_LO"/>
 <reg32 offset="0x00d9" name="RBBM_PERFCTR_SP_3_HI"/>
 <reg32 offset="0x00da" name="RBBM_PERFCTR_SP_4_LO"/>
 <reg32 offset="0x00db" name="RBBM_PERFCTR_SP_4_HI"/>
 <reg32 offset="0x00dc" name="RBBM_PERFCTR_SP_5_LO"/>
 <reg32 offset="0x00dd" name="RBBM_PERFCTR_SP_5_HI"/>
 <reg32 offset="0x00de" name="RBBM_PERFCTR_SP_6_LO"/>
 <reg32 offset="0x00df" name="RBBM_PERFCTR_SP_6_HI"/>
 <reg32 offset="0x00e0" name="RBBM_PERFCTR_SP_7_LO"/>
 <reg32 offset="0x00e1" name="RBBM_PERFCTR_SP_7_HI"/>
 <reg32 offset="0x00e2" name="RBBM_PERFCTR_RB_0_LO"/>
 <reg32 offset="0x00e3" name="RBBM_PERFCTR_RB_0_HI"/>
 <reg32 offset="0x00e4" name="RBBM_PERFCTR_RB_1_LO"/>
 <reg32 offset="0x00e5" name="RBBM_PERFCTR_RB_1_HI"/>
 <reg32 offset="0x00ea" name="RBBM_PERFCTR_PWR_0_LO"/>
 <reg32 offset="0x00eb" name="RBBM_PERFCTR_PWR_0_HI"/>
 <reg32 offset="0x00ec" name="RBBM_PERFCTR_PWR_1_LO"/>
 <reg32 offset="0x00ed" name="RBBM_PERFCTR_PWR_1_HI"/>
 <reg32 offset="0x0100" name="RBBM_RBBM_CTL"/>
 <reg32 offset="0x0111" name="RBBM_DEBUG_BUS_CTL"/>
 <reg32 offset="0x0112" name="RBBM_DEBUG_BUS_DATA_STATUS"/>

 <!-- CP registers -->
 <reg32 offset="0x01c9" name="CP_PFP_UCODE_ADDR"/>
 <reg32 offset="0x01ca" name="CP_PFP_UCODE_DATA"/>
 <reg32 offset="0x01cc" name="CP_ROQ_ADDR"/>
 <reg32 offset="0x01cd" name="CP_ROQ_DATA"/>
 <reg32 offset="0x01d1" name="CP_MERCIU_ADDR"/>
 <reg32 offset="0x01d2" name="CP_MERCIU_DATA"/>
 <reg32 offset="0x01d3" name="CP_MERCIU_DATA2"/>
 <!-- see a3xx_snapshot_cp_meq().. looks like the way to dump queue between pfp and pm4 -->
 <reg32 offset="0x01da" name="CP_MEQ_ADDR"/>
 <reg32 offset="0x01db" name="CP_MEQ_DATA"/>
 <reg32 offset="0x01f5" name="CP_WFI_PEND_CTR"/>
 <reg32 offset="0x039d" name="RBBM_PM_OVERRIDE2"/>

 <reg32 offset="0x0445" name="CP_PERFCOUNTER_SELECT" type="a3xx_cp_perfcounter_select"/>
 <reg32 offset="0x045c" name="CP_HW_FAULT"/>
 <reg32 offset="0x045e" name="CP_PROTECT_CTRL"/>
 <reg32 offset="0x045f" name="CP_PROTECT_STATUS"/>
 <array offset="0x0460" name="CP_PROTECT" stride="1" length="16">
  <reg32 offset="0x0" name="REG"/>
 </array>
 <reg32 offset="0x054d" name="CP_AHB_FAULT"/>

 <reg32 offset="0x0d00" name="SQ_GPR_MANAGEMENT"/>
 <reg32 offset="0x0d02" name="SQ_INST_STORE_MANAGMENT"/>
 <reg32 offset="0x0e1e" name="TP0_CHICKEN"/>

 <!-- these I guess or either SP or HLSQ since related to shader core setup: -->
 <reg32 offset="0x0e22" name="SP_GLOBAL_MEM_SIZE" type="uint">
  <doc>
   The pair of MEM_SIZE/ADDR registers get programmed
   in sequence with the size/addr of each buffer.
  </doc>
 </reg32>
 <reg32 offset="0x0e23" name="SP_GLOBAL_MEM_ADDR"/>

 <!-- GRAS registers -->
 <reg32 offset="0x2040" name="GRAS_CL_CLIP_CNTL">
  <bitfield name="IJ_PERSP_CENTER" pos="12" type="boolean"/>
  <bitfield name="IJ_NON_PERSP_CENTER" pos="13" type="boolean"/>
  <bitfield name="IJ_PERSP_CENTROID" pos="14" type="boolean"/>
  <bitfield name="IJ_NON_PERSP_CENTROID" pos="15" type="boolean"/>
  <bitfield name="CLIP_DISABLE" pos="16" type="boolean"/>
  <bitfield name="ZFAR_CLIP_DISABLE" pos="17" type="boolean"/>
  <bitfield name="VP_CLIP_CODE_IGNORE" pos="19" type="boolean"/>
  <bitfield name="VP_XFORM_DISABLE" pos="20" type="boolean"/>
  <bitfield name="PERSP_DIVISION_DISABLE" pos="21" type="boolean"/>
  <bitfield name="ZERO_GB_SCALE_Z" pos="22" type="boolean">
   <doc>aka clip_halfz</doc>
  </bitfield>
  <!-- set when gl_FragCoord.z is enabled in frag shader: -->
  <bitfield name="ZCOORD" pos="23" type="boolean"/>
  <bitfield name="WCOORD" pos="24" type="boolean"/>
  <!-- set when frag shader writes z (so early z test disabled: -->
  <bitfield name="ZCLIP_DISABLE" pos="25" type="boolean"/>
  <bitfield name="NUM_USER_CLIP_PLANES" low="26" high="28" type="uint"/>
 </reg32>
 <reg32 offset="0x2044" name="GRAS_CL_GB_CLIP_ADJ">
  <bitfield name="HORZ" low="0" high="9" type="uint"/>
  <bitfield name="VERT" low="10" high="19" type="uint"/>
 </reg32>
 <reg32 offset="0x2048" name="GRAS_CL_VPORT_XOFFSET" type="float"/>
 <reg32 offset="0x2049" name="GRAS_CL_VPORT_XSCALE" type="float"/>
 <reg32 offset="0x204a" name="GRAS_CL_VPORT_YOFFSET" type="float"/>
 <reg32 offset="0x204b" name="GRAS_CL_VPORT_YSCALE" type="float"/>
 <reg32 offset="0x204c" name="GRAS_CL_VPORT_ZOFFSET" type="float"/>
 <reg32 offset="0x204d" name="GRAS_CL_VPORT_ZSCALE" type="float"/>
 <reg32 offset="0x2068" name="GRAS_SU_POINT_MINMAX">
  <bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>
  <bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>
 </reg32>
 <reg32 offset="0x2069" name="GRAS_SU_POINT_SIZE" type="fixed" radix="4"/>
 <reg32 offset="0x206c" name="GRAS_SU_POLY_OFFSET_SCALE">
  <bitfield name="VAL" low="0" high="23" type="fixed" radix="20"/>
  <doc>range of -8.0 to 8.0</doc>
 </reg32>
 <reg32 offset="0x206d" name="GRAS_SU_POLY_OFFSET_OFFSET" radix="6" type="fixed">
  <doc>range of -512.0 to 512.0</doc>
 </reg32>
 <reg32 offset="0x2070" name="GRAS_SU_MODE_CONTROL">
  <bitfield name="CULL_FRONT" pos="0" type="boolean"/>
  <bitfield name="CULL_BACK" pos="1" type="boolean"/>
  <bitfield name="FRONT_CW" pos="2" type="boolean"/>
  <bitfield name="LINEHALFWIDTH" low="3" high="10" radix="2" type="fixed"/>
  <bitfield name="POLY_OFFSET" pos="11" type="boolean"/>
 </reg32>
 <reg32 offset="0x2072" name="GRAS_SC_CONTROL">
  <!-- complete wild-ass-guess for sizes of these bitfields.. -->
  <bitfield name="RENDER_MODE" low="4" high="7" type="a3xx_render_mode"/>
  <bitfield name="MSAA_SAMPLES" low="8" high="11" type="a3xx_msaa_samples"/>
  <bitfield name="RASTER_MODE" low="12" high="15"/>
 </reg32>

 <reg32 offset="0x2074" name="GRAS_SC_SCREEN_SCISSOR_TL" type="adreno_reg_xy"/>
 <reg32 offset="0x2075" name="GRAS_SC_SCREEN_SCISSOR_BR" type="adreno_reg_xy"/>
 <reg32 offset="0x2079" name="GRAS_SC_WINDOW_SCISSOR_TL" type="adreno_reg_xy"/>
 <reg32 offset="0x207a" name="GRAS_SC_WINDOW_SCISSOR_BR" type="adreno_reg_xy"/>

 <!-- RB registers -->
 <reg32 offset="0x20c0" name="RB_MODE_CONTROL">
  <!-- guess on the # of bits here.. -->
  <bitfield name="GMEM_BYPASS" pos="7" type="boolean"/>
  <doc>
   RENDER_MODE is RB_RESOLVE_PASS for gmem->mem, otherwise RB_RENDER_PASS
  </doc>
  <bitfield name="RENDER_MODE" low="8" high="10" type="a3xx_render_mode"/>
  <bitfield name="MRT" low="12" high="13" type="uint">
   <doc>render targets - 1</doc>
  </bitfield>
  <bitfield name="MARB_CACHE_SPLIT_MODE" pos="15" type="boolean"/>
  <bitfield name="PACKER_TIMER_ENABLE" pos="16" type="boolean"/>
 </reg32>
 <reg32 offset="0x20c1" name="RB_RENDER_CONTROL">
  <bitfield name="DUAL_COLOR_IN_ENABLE" pos="0" type="boolean"/>
  <bitfield name="YUV_IN_ENABLE" pos="1" type="boolean"/>
  <bitfield name="COV_VALUE_INPUT_ENABLE" pos="2" type="boolean"/>
  <!-- set when gl_FrontFacing is accessed in frag shader: -->
  <bitfield name="FACENESS" pos="3" type="boolean"/>
  <bitfield name="BIN_WIDTH" low="4" high="11" shr="5" type="uint"/>
  <bitfield name="DISABLE_COLOR_PIPE" pos="12" type="boolean"/>
  <!--
ENABLE_GMEM not set on mem2gmem..  so possibly it is actually
controlling blend or readback from GMEM??
 -->

  <bitfield name="ENABLE_GMEM" pos="13" type="boolean"/>
  <bitfield name="COORD_MASK" low="14" high="17" type="hex"/>
  <bitfield name="I_CLAMP_ENABLE" pos="19" type="boolean"/>
  <bitfield name="COV_VALUE_OUTPUT_ENABLE" pos="20" type="boolean"/>
  <bitfield name="ALPHA_TEST" pos="22" type="boolean"/>
  <bitfield name="ALPHA_TEST_FUNC" low="24" high="26" type="adreno_compare_func"/>
  <bitfield name="ALPHA_TO_COVERAGE" pos="30" type="boolean"/>
  <bitfield name="ALPHA_TO_ONE" pos="31" type="boolean"/>
 </reg32>
 <reg32 offset="0x20c2" name="RB_MSAA_CONTROL">
  <bitfield name="DISABLE" pos="10" type="boolean"/>
  <bitfield name="SAMPLES" low="12" high="15" type="a3xx_msaa_samples"/>
  <bitfield name="SAMPLE_MASK" low="16" high="31" type="hex"/>
 </reg32>
 <reg32 offset="0x20c3" name="RB_ALPHA_REF">
  <bitfield name="UINT" low="8" high="15" type="hex"/>
  <bitfield name="FLOAT" low="16" high="31" type="float"/>
 </reg32>
 <array offset="0x20c4" name="RB_MRT" stride="4" length="4">
  <reg32 offset="0x0" name="CONTROL">
   <bitfield name="READ_DEST_ENABLE" pos="3" type="boolean"/>
   <!-- both these bits seem to get set when enabling GL_BLEND.. -->
   <bitfield name="BLEND" pos="4" type="boolean"/>
   <bitfield name="BLEND2" pos="5" type="boolean"/>
   <bitfield name="ROP_CODE" low="8" high="11" type="a3xx_rop_code"/>
   <bitfield name="DITHER_MODE" low="12" high="13" type="adreno_rb_dither_mode"/>
   <bitfield name="COMPONENT_ENABLE" low="24" high="27" type="hex"/>
  </reg32>
  <reg32 offset="0x1" name="BUF_INFO">
   <bitfield name="COLOR_FORMAT" low="0" high="5" type="a3xx_color_fmt"/>
   <bitfield name="COLOR_TILE_MODE" low="6" high="7" type="a3xx_tile_mode"/>
   <bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>
   <bitfield name="COLOR_SRGB" pos="14" type="boolean"/>
   <doc>
    Pitch (actually, appears to be pitch in bytes, so really is a stride)
    in GMEM, so pitch of the current tile.
   </doc>
   <bitfield name="COLOR_BUF_PITCH" low="17" high="31" shr="5" type="uint"/>
  </reg32>
  <reg32 offset="0x2" name="BUF_BASE">
   <doc>offset into GMEM (or system memory address in bypass mode)</doc>
   <bitfield name="COLOR_BUF_BASE" low="4" high="31" shr="5" type="hex"/>
  </reg32>
  <reg32 offset="0x3" name="BLEND_CONTROL">
   <bitfield name="RGB_SRC_FACTOR" low="0" high="4" type="adreno_rb_blend_factor"/>
   <bitfield name="RGB_BLEND_OPCODE" low="5" high="7" type="a3xx_rb_blend_opcode"/>
   <bitfield name="RGB_DEST_FACTOR" low="8" high="12" type="adreno_rb_blend_factor"/>
   <bitfield name="ALPHA_SRC_FACTOR" low="16" high="20" type="adreno_rb_blend_factor"/>
   <bitfield name="ALPHA_BLEND_OPCODE" low="21" high="23" type="a3xx_rb_blend_opcode"/>
   <bitfield name="ALPHA_DEST_FACTOR" low="24" high="28" type="adreno_rb_blend_factor"/>
   <bitfield name="CLAMP_ENABLE" pos="29" type="boolean"/>
  </reg32>
 </array>

 <reg32 offset="0x20e4" name="RB_BLEND_RED">
  <bitfield name="UINT" low="0" high="7" type="hex"/>
  <bitfield name="FLOAT" low="16" high="31" type="float"/>
 </reg32>
 <reg32 offset="0x20e5" name="RB_BLEND_GREEN">
  <bitfield name="UINT" low="0" high="7" type="hex"/>
  <bitfield name="FLOAT" low="16" high="31" type="float"/>
 </reg32>
 <reg32 offset="0x20e6" name="RB_BLEND_BLUE">
  <bitfield name="UINT" low="0" high="7" type="hex"/>
  <bitfield name="FLOAT" low="16" high="31" type="float"/>
 </reg32>
 <reg32 offset="0x20e7" name="RB_BLEND_ALPHA">
  <bitfield name="UINT" low="0" high="7" type="hex"/>
  <bitfield name="FLOAT" low="16" high="31" type="float"/>
 </reg32>

 <reg32 offset="0x20e8" name="RB_CLEAR_COLOR_DW0"/>
 <reg32 offset="0x20e9" name="RB_CLEAR_COLOR_DW1"/>
 <reg32 offset="0x20ea" name="RB_CLEAR_COLOR_DW2"/>
 <reg32 offset="0x20eb" name="RB_CLEAR_COLOR_DW3"/>
 <reg32 offset="0x20ec" name="RB_COPY_CONTROL">
  <!-- not sure # of bits -->
  <bitfield name="MSAA_RESOLVE" low="0" high="1" type="a3xx_msaa_samples"/>
  <bitfield name="DEPTHCLEAR" pos="3" type="boolean"/>
  <bitfield name="MODE" low="4" high="6" type="adreno_rb_copy_control_mode"/>
  <bitfield name="MSAA_SRGB_DOWNSAMPLE" pos="7" type="boolean"/>
  <bitfield name="FASTCLEAR" low="8" high="11" type="hex"/>
  <bitfield name="DEPTH32_RESOLVE" pos="12" type="boolean"/> <!-- enabled on a Z32F copy -->
  <bitfield name="GMEM_BASE" low="14" high="31" shr="14" type="hex"/>
 </reg32>
 <reg32 offset="0x20ed" name="RB_COPY_DEST_BASE">
  <bitfield name="BASE" low="4" high="31" shr="5" type="hex"/>
 </reg32>
 <reg32 offset="0x20ee" name="RB_COPY_DEST_PITCH">
  <doc>actually, appears to be pitch in bytes, so really is a stride</doc>
  <!-- not actually sure about max pitch... -->
  <bitfield name="PITCH" low="0" high="31" shr="5" type="uint"/>
 </reg32>
 <reg32 offset="0x20ef" name="RB_COPY_DEST_INFO">
  <bitfield name="TILE" low="0" high="1" type="a3xx_tile_mode"/>
  <bitfield name="FORMAT" low="2" high="7" type="a3xx_color_fmt"/>
  <bitfield name="SWAP" low="8" high="9" type="a3xx_color_swap"/>
  <bitfield name="DITHER_MODE" low="10" high="11" type="adreno_rb_dither_mode"/>
  <bitfield name="COMPONENT_ENABLE" low="14" high="17" type="hex"/>
  <bitfield name="ENDIAN" low="18" high="20" type="adreno_rb_surface_endian"/>
 </reg32>
 <reg32 offset="0x2100" name="RB_DEPTH_CONTROL">
  <!--
guessing that this matches a2xx with the stencil fields
moved out into RB_STENCIL_CONTROL?
 -->

  <bitfield name="FRAG_WRITES_Z" pos="0" type="boolean"/>
  <bitfield name="Z_TEST_ENABLE" pos="1" type="boolean"/>
  <bitfield name="Z_WRITE_ENABLE" pos="2" type="boolean"/>
  <bitfield name="EARLY_Z_DISABLE" pos="3" type="boolean"/>
  <bitfield name="ZFUNC" low="4" high="6" type="adreno_compare_func"/>
  <bitfield name="Z_CLAMP_ENABLE" pos="7" type="boolean"/>
  <doc>Z_READ_ENABLE bit is set for zfunc other than GL_ALWAYS or GL_NEVER</doc>
  <bitfield name="Z_READ_ENABLE" pos="31" type="boolean"/>
 </reg32>
 <reg32 offset="0x2101" name="RB_DEPTH_CLEAR">
  <doc>seems to be always set to 0x00000000</doc>
 </reg32>
 <reg32 offset="0x2102" name="RB_DEPTH_INFO">
  <bitfield name="DEPTH_FORMAT" low="0" high="1" type="adreno_rb_depth_format"/>
  <doc>
   DEPTH_BASE is offset in GMEM to depth/stencil buffer, ie
   bin_w * bin_h / 1024 (possible rounded up to multiple of
   something??  ie. 39 becomes 40, 78 becomes 80.. 75 becomes
   80.. so maybe it needs to be multiple of 8??
  </doc>
  <bitfield name="DEPTH_BASE" low="11" high="31" shr="12" type="hex"/>
 </reg32>
 <reg32 offset="0x2103" name="RB_DEPTH_PITCH" shr="3" type="uint">
  <doc>
   Pitch of depth buffer or combined depth+stencil buffer
   in z24s8 cases.
  </doc>
 </reg32>
 <reg32 offset="0x2104" name="RB_STENCIL_CONTROL">
  <bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>
  <bitfield name="STENCIL_ENABLE_BF" pos="1" type="boolean"/>
  <!--
set for stencil operations that require read from stencil
buffer, but not for example for stencil clear (which does
not require read).. so guessing this is analogous to
READ_DEST_ENABLE for color buffer..
 -->

  <bitfield name="STENCIL_READ" pos="2" type="boolean"/>
  <bitfield name="FUNC" low="8" high="10" type="adreno_compare_func"/>
  <bitfield name="FAIL" low="11" high="13" type="adreno_stencil_op"/>
  <bitfield name="ZPASS" low="14" high="16" type="adreno_stencil_op"/>
  <bitfield name="ZFAIL" low="17" high="19" type="adreno_stencil_op"/>
  <bitfield name="FUNC_BF" low="20" high="22" type="adreno_compare_func"/>
  <bitfield name="FAIL_BF" low="23" high="25" type="adreno_stencil_op"/>
  <bitfield name="ZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>
  <bitfield name="ZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>
 </reg32>
 <reg32 offset="0x2105" name="RB_STENCIL_CLEAR">
  <doc>seems to be always set to 0x00000000</doc>
 </reg32>
 <reg32 offset="0x2106" name="RB_STENCIL_INFO">
  <doc>Base address for stencil when not using interleaved depth/stencil</doc>
  <bitfield name="STENCIL_BASE" low="11" high="31" shr="12" type="hex"/>
 </reg32>
 <reg32 offset="0x2107" name="RB_STENCIL_PITCH" shr="3" type="uint">
  <doc>pitch of stencil buffer when not using interleaved depth/stencil</doc>
 </reg32>
 <reg32 offset="0x2108" name="RB_STENCILREFMASK" type="adreno_rb_stencilrefmask"/>
 <reg32 offset="0x2109" name="RB_STENCILREFMASK_BF" type="adreno_rb_stencilrefmask"/>
 <!-- VSC == visibility stream c?? -->
 <reg32 offset="0x210c" name="RB_LRZ_VSC_CONTROL">
  <doc>seems to be set to 0x00000002 during binning pass</doc>
  <bitfield name="BINNING_ENABLE" pos="1" type="boolean"/>
 </reg32>
 <reg32 offset="0x210e" name="RB_WINDOW_OFFSET">
  <doc>X/Y offset of current bin</doc>
  <bitfield name="X" low="0" high="15" type="uint"/>
  <bitfield name="Y" low="16" high="31" type="uint"/>
 </reg32>
 <reg32 offset="0x2110" name="RB_SAMPLE_COUNT_CONTROL">
  <bitfield name="RESET" pos="0" type="boolean"/>
  <bitfield name="COPY" pos="1" type="boolean"/>
 </reg32>
 <reg32 offset="0x2111" name="RB_SAMPLE_COUNT_ADDR"/>
 <reg32 offset="0x2114" name="RB_Z_CLAMP_MIN"/>
 <reg32 offset="0x2115" name="RB_Z_CLAMP_MAX"/>

 <!-- PC registers -->
 <reg32 offset="0x21e1" name="VGT_BIN_BASE">
  <doc>
   seems to be where firmware writes BIN_DATA_ADDR from
   CP_SET_BIN_DATA packet..  probably should be called
   PC_BIN_BASE (just using name from yamato for now)
  </doc>
 </reg32>
 <reg32 offset="0x21e2" name="VGT_BIN_SIZE">
  <doc>probably should be PC_BIN_SIZE</doc>
 </reg32>
 <reg32 offset="0x21e4" name="PC_VSTREAM_CONTROL">
  <doc>SIZE is current pipe width * height (in tiles)</doc>
  <bitfield name="SIZE" low="16" high="21" type="uint"/>
  <doc>
   N is some sort of slot # between 0..(SIZE-1).  In case
   multiple tiles use same pipe, each tile gets unique slot #
  </doc>
  <bitfield name="N" low="22" high="26" type="uint"/>
 </reg32>
 <reg32 offset="0x21ea" name="PC_VERTEX_REUSE_BLOCK_CNTL"/>
 <reg32 offset="0x21ec" name="PC_PRIM_VTX_CNTL">
  <doc>
   STRIDE_IN_VPC: ALIGN(next_outloc - 8, 4) / 4
   (but, in cases where you'd expect 1, the blob driver uses
   2, so possibly 0 (no varying) or minimum of 2)
  </doc>
  <bitfield name="STRIDE_IN_VPC" low="0" high="4" type="uint"/>
  <bitfield name="POLYMODE_FRONT_PTYPE" low="5" high="7" type="adreno_pa_su_sc_draw"/>
  <bitfield name="POLYMODE_BACK_PTYPE" low="8" high="10" type="adreno_pa_su_sc_draw"/>
  <bitfield name="POLYMODE_ENABLE" pos="12" type="boolean"/>
  <bitfield name="PRIMITIVE_RESTART" pos="20" type="boolean"/>
  <bitfield name="PROVOKING_VTX_LAST" pos="25" type="boolean"/>
  <!-- PSIZE bit set if gl_PointSize written: -->
  <bitfield name="PSIZE" pos="26" type="boolean"/>
 </reg32>
 <reg32 offset="0x21ed" name="PC_RESTART_INDEX"/>

 <!-- HLSQ registers -->
 <bitset name="a3xx_hlsq_vs_fs_control_reg" inline="yes">
  <bitfield name="CONSTLENGTH" low="0" high="9" type="uint"/>
  <bitfield name="CONSTSTARTOFFSET" low="12" high="20" type="uint"/>
  <bitfield name="INSTRLENGTH" low="24" high="31" type="uint"/>
 </bitset>
 <bitset name="a3xx_hlsq_const_vs_fs_presv_range_reg" inline="yes">
  <!-- are these a3xx_regid?? -->
  <bitfield name="STARTENTRY" low="0" high="8"/>
  <bitfield name="ENDENTRY" low="16" high="24"/>
 </bitset>

 <reg32 offset="0x2200" name="HLSQ_CONTROL_0_REG">
  <bitfield name="FSTHREADSIZE" low="4" high="5" type="a3xx_threadsize"/>
  <bitfield name="FSSUPERTHREADENABLE" pos="6" type="boolean"/>
  <bitfield name="COMPUTEMODE" pos="8" type="boolean"/>
  <bitfield name="SPSHADERRESTART" pos="9" type="boolean"/>
  <bitfield name="RESERVED2" pos="10" type="boolean"/>
  <bitfield name="CYCLETIMEOUTLIMITVPC" low="12" high="23" type="uint"/>
  <bitfield name="FSONLYTEX" pos="25" type="boolean"/>
  <bitfield name="CHUNKDISABLE" pos="26" type="boolean"/>
  <bitfield name="CONSTMODE" pos="27" type="uint"/>
  <bitfield name="LAZYUPDATEDISABLE" pos="28" type="boolean"/>
  <bitfield name="SPCONSTFULLUPDATE" pos="29" type="boolean"/>
  <bitfield name="TPFULLUPDATE" pos="30" type="boolean"/>
  <bitfield name="SINGLECONTEXT" pos="31" type="boolean"/>
 </reg32>
 <reg32 offset="0x2201" name="HLSQ_CONTROL_1_REG">
  <bitfield name="VSTHREADSIZE" low="6" high="7" type="a3xx_threadsize"/>
  <bitfield name="VSSUPERTHREADENABLE" pos="8" type="boolean"/>
  <bitfield name="FRAGCOORDXYREGID" low="16" high="23" type="a3xx_regid"/>
  <bitfield name="FRAGCOORDZWREGID" low="24" high="31" type="a3xx_regid"/>
 </reg32>
 <reg32 offset="0x2202" name="HLSQ_CONTROL_2_REG">
  <bitfield name="FACENESSREGID" low="2" high="9" type="a3xx_regid"/>
  <bitfield name="COVVALUEREGID" low="18" high="25" type="a3xx_regid"/>
  <bitfield name="PRIMALLOCTHRESHOLD" low="26" high="31" type="uint"/>
 </reg32>
 <reg32 offset="0x2203" name="HLSQ_CONTROL_3_REG">
  <bitfield name="IJPERSPCENTERREGID" low="0" high="7" type="a3xx_regid"/>
  <bitfield name="IJNONPERSPCENTERREGID" low="8" high="15" type="a3xx_regid"/>
  <bitfield name="IJPERSPCENTROIDREGID" low="16" high="23" type="a3xx_regid"/>
  <bitfield name="IJNONPERSPCENTROIDREGID" low="24" high="31" type="a3xx_regid"/>
 </reg32>
 <reg32 offset="0x2204" name="HLSQ_VS_CONTROL_REG" type="a3xx_hlsq_vs_fs_control_reg"/>
 <reg32 offset="0x2205" name="HLSQ_FS_CONTROL_REG" type="a3xx_hlsq_vs_fs_control_reg"/>
 <reg32 offset="0x2206" name="HLSQ_CONST_VSPRESV_RANGE_REG" type="a3xx_hlsq_const_vs_fs_presv_range_reg"/>
 <reg32 offset="0x2207" name="HLSQ_CONST_FSPRESV_RANGE_REG" type="a3xx_hlsq_const_vs_fs_presv_range_reg"/>
 <reg32 offset="0x220a" name="HLSQ_CL_NDRANGE_0_REG">
  <bitfield name="WORKDIM" low="0" high="1" type="uint"/>
  <bitfield name="LOCALSIZE0" low="2" high="11" type="uint"/>
  <bitfield name="LOCALSIZE1" low="12" high="21" type="uint"/>
  <bitfield name="LOCALSIZE2" low="22" high="31" type="uint"/>
 </reg32>
 <array offset="0x220b" name="HLSQ_CL_GLOBAL_WORK" stride="2" length="3">
  <doc>indexed by dimension</doc>
  <reg32 offset="0" name="SIZE" type="uint"/>
  <reg32 offset="1" name="OFFSET" type="uint"/>
 </array>
 <reg32 offset="0x2211" name="HLSQ_CL_CONTROL_0_REG"/>
 <reg32 offset="0x2212" name="HLSQ_CL_CONTROL_1_REG"/>
 <reg32 offset="0x2214" name="HLSQ_CL_KERNEL_CONST_REG"/>
 <array offset="0x2215" name="HLSQ_CL_KERNEL_GROUP" stride="1" length="3">
  <doc>indexed by dimension, global_size / local_size</doc>
  <reg32 offset="0" name="RATIO" type="uint"/>
 </array>
 <reg32 offset="0x2216" name="HLSQ_CL_KERNEL_GROUP_Y_REG" type="uint"/>
 <reg32 offset="0x2217" name="HLSQ_CL_KERNEL_GROUP_Z_REG" type="uint"/>
 <reg32 offset="0x221a" name="HLSQ_CL_WG_OFFSET_REG"/>

 <!-- VFD registers -->
 <reg32 offset="0x2240" name="VFD_CONTROL_0">
  <doc>
   TOTALATTRTOVS is # of attributes to vertex shader, in register
   slots (ie. vec4+vec3 -> 7)
  </doc>
  <bitfield name="TOTALATTRTOVS" low="0" high="17" type="uint"/>
  <bitfield name="PACKETSIZE" low="18" high="21" type="uint"/>
  <doc>STRMDECINSTRCNT is # of VFD_DECODE_INSTR registers valid</doc>
  <bitfield name="STRMDECINSTRCNT" low="22" high="26" type="uint"/>
  <doc>STRMFETCHINSTRCNT is # of VFD_FETCH_INSTR registers valid</doc>
  <bitfield name="STRMFETCHINSTRCNT" low="27" high="31" type="uint"/>
 </reg32>
 <reg32 offset="0x2241" name="VFD_CONTROL_1">
  <doc>MAXSTORAGE could be # of attributes/vbo's
  <bitfield name="MAXSTORAGE" low="0" high="3" type="uint"/>
  <bitfield name="MAXTHRESHOLD" low="4" high="7" type="uint"/>
  <bitfield name="MINTHRESHOLD" low="8" high="11" type="uint"/>
  <bitfield name="REGID4VTX" low="16" high="23" type="a3xx_regid"/>
  <bitfield name="REGID4INST" low="24" high="31" type="a3xx_regid"/>
 </reg32>
 <reg32 offset="0x2242" name="VFD_INDEX_MIN" type="uint"/>
 <reg32 offset="0x2243" name="VFD_INDEX_MAX" type="uint"/>
 <reg32 offset="0x2244" name="VFD_INSTANCEID_OFFSET" type="uint"/>
 <reg32 offset="0x2245" name="VFD_INDEX_OFFSET" type="uint"/>
 <array offset="0x2246" name="VFD_FETCH" stride="2" length="16">
  <reg32 offset="0x0" name="INSTR_0">
   <bitfield name="FETCHSIZE" low="0" high="6" type="uint"/>
   <bitfield name="BUFSTRIDE" low="7" high="15" type="uint"/>
   <bitfield name="INSTANCED" pos="16" type="boolean"/>
   <bitfield name="SWITCHNEXT" pos="17" type="boolean"/>
   <bitfield name="INDEXCODE" low="18" high="23" type="uint"/>
   <bitfield name="STEPRATE" low="24" high="31" type="uint"/>
  </reg32>
  <reg32 offset="0x1" name="INSTR_1"/>
 </array>
 <array offset="0x2266" name="VFD_DECODE" stride="1" length="16">
  <reg32 offset="0x0" name="INSTR">
   <bitfield name="WRITEMASK" low="0" high="3" type="hex"/>
   <!-- not sure if this is a bit flag and another flag above it, or?? -->
   <bitfield name="CONSTFILL" pos="4" type="boolean"/>
   <bitfield name="FORMAT" low="6" high="11" type="a3xx_vtx_fmt"/>
   <bitfield name="REGID" low="12" high="19" type="a3xx_regid"/>
   <bitfield name="INT" pos="20" type="boolean"/>
   <doc>SHIFTCNT appears to be size, ie. FLOAT_32_32_32 is 12, and BYTE_8 is 1</doc>
   <bitfield name="SWAP" low="22" high="23" type="a3xx_color_swap"/>
   <bitfield name="SHIFTCNT" low="24" high="28" type="uint"/>
   <bitfield name="LASTCOMPVALID" pos="29" type="boolean"/>
   <bitfield name="SWITCHNEXT" pos="30" type="boolean"/>
  </reg32>
 </array>
 <reg32 offset="0x227e" name="VFD_VS_THREADING_THRESHOLD">
  <bitfield name="REGID_THRESHOLD" low="0" high="3" type="uint"/>
  <!-- <bitfield name="RESERVED6" low="4" high="7" type="uint"/> -->
  <bitfield name="REGID_VTXCNT" low="8" high="15" type="a3xx_regid"/>
 </reg32>

 <!-- VPC registers -->
 <reg32 offset="0x2280" name="VPC_ATTR">
  <bitfield name="TOTALATTR" low="0" high="8" type="uint"/>
  <!-- PSIZE bit set if gl_PointSize written: -->
  <bitfield name="PSIZE" pos="9" type="boolean"/>
  <bitfield name="THRDASSIGN" low="12" high="27" type="uint"/>
  <bitfield name="LMSIZE" low="28" high="31" type="uint"/>
 </reg32>
 <reg32 offset="0x2281" name="VPC_PACK">
  <!-- these are always seem to be set to same as TOTALATTR -->
  <bitfield name="NUMFPNONPOSVAR" low="8" high="15" type="uint"/>
  <bitfield name="NUMNONPOSVSVAR" low="16" high="23" type="uint"/>
 </reg32>
 <!--
varying interpolate mode.  One field per scalar/component
(since varying slots are scalar, so things don't have to
be aligned to vec4).
4 regs * 16 scalar components each => 16 vec4
 -->

 <array offset="0x2282" name="VPC_VARYING_INTERP" stride="1" length="4">
  <reg32 offset="0x0" name="MODE">
   <bitfield name="C0" low="0"  high="1"  type="a3xx_intp_mode"/>
   <bitfield name="C1" low="2"  high="3"  type="a3xx_intp_mode"/>
   <bitfield name="C2" low="4"  high="5"  type="a3xx_intp_mode"/>
   <bitfield name="C3" low="6"  high="7"  type="a3xx_intp_mode"/>
   <bitfield name="C4" low="8"  high="9"  type="a3xx_intp_mode"/>
   <bitfield name="C5" low="10" high="11" type="a3xx_intp_mode"/>
   <bitfield name="C6" low="12" high="13" type="a3xx_intp_mode"/>
   <bitfield name="C7" low="14" high="15" type="a3xx_intp_mode"/>
   <bitfield name="C8" low="16" high="17" type="a3xx_intp_mode"/>
   <bitfield name="C9" low="18" high="19" type="a3xx_intp_mode"/>
   <bitfield name="CA" low="20" high="21" type="a3xx_intp_mode"/>
   <bitfield name="CB" low="22" high="23" type="a3xx_intp_mode"/>
   <bitfield name="CC" low="24" high="25" type="a3xx_intp_mode"/>
   <bitfield name="CD" low="26" high="27" type="a3xx_intp_mode"/>
   <bitfield name="CE" low="28" high="29" type="a3xx_intp_mode"/>
   <bitfield name="CF" low="30" high="31" type="a3xx_intp_mode"/>
  </reg32>
 </array>
 <array offset="0x2286" name="VPC_VARYING_PS_REPL" stride="1" length="4">
  <reg32 offset="0x0" name="MODE">
   <bitfield name="C0" low="0"  high="1"  type="a3xx_repl_mode"/>
   <bitfield name="C1" low="2"  high="3"  type="a3xx_repl_mode"/>
   <bitfield name="C2" low="4"  high="5"  type="a3xx_repl_mode"/>
   <bitfield name="C3" low="6"  high="7"  type="a3xx_repl_mode"/>
   <bitfield name="C4" low="8"  high="9"  type="a3xx_repl_mode"/>
   <bitfield name="C5" low="10" high="11" type="a3xx_repl_mode"/>
   <bitfield name="C6" low="12" high="13" type="a3xx_repl_mode"/>
   <bitfield name="C7" low="14" high="15" type="a3xx_repl_mode"/>
   <bitfield name="C8" low="16" high="17" type="a3xx_repl_mode"/>
   <bitfield name="C9" low="18" high="19" type="a3xx_repl_mode"/>
   <bitfield name="CA" low="20" high="21" type="a3xx_repl_mode"/>
   <bitfield name="CB" low="22" high="23" type="a3xx_repl_mode"/>
   <bitfield name="CC" low="24" high="25" type="a3xx_repl_mode"/>
   <bitfield name="CD" low="26" high="27" type="a3xx_repl_mode"/>
   <bitfield name="CE" low="28" high="29" type="a3xx_repl_mode"/>
   <bitfield name="CF" low="30" high="31" type="a3xx_repl_mode"/>
  </reg32>
 </array>
 <reg32 offset="0x228a" name="VPC_VARY_CYLWRAP_ENABLE_0"/>
 <reg32 offset="0x228b" name="VPC_VARY_CYLWRAP_ENABLE_1"/>

 <!-- SP registers -->
 <bitset name="a3xx_vs_fs_length_reg" inline="yes">
  <bitfield name="SHADERLENGTH" low="0" high="31" type="uint"/>
 </bitset>

 <bitset name="sp_vs_fs_obj_offset_reg" inline="yes">
  <bitfield name="FIRSTEXECINSTROFFSET" low="0" high="15" type="uint"/>
  <doc>
   From register spec:
   SP_FS_OBJ_OFFSET_REG.CONSTOBJECTSTARTOFFSET [16:24]: Constant object
   start offset in on chip RAM,
   128bit aligned
  </doc>
  <bitfield name="CONSTOBJECTOFFSET" low="16" high="24" type="uint"/>
  <bitfield name="SHADEROBJOFFSET" low="25" high="31" type="uint"/>
 </bitset>

 <reg32 offset="0x22c0" name="SP_SP_CTRL_REG">
  <!-- this bit is set during resolve pass: -->
  <bitfield name="RESOLVE" pos="16" type="boolean"/>
  <bitfield name="CONSTMODE" pos="18" type="uint"/>
  <bitfield name="BINNING" pos="19" type="boolean"/>
  <bitfield name="SLEEPMODE" low="20" high="21" type="uint"/>
  <!-- L0MODE==1 when oxiliForceSpL0ModeBuffer=1 -->
  <bitfield name="L0MODE" low="22" high="23" type="uint"/>
 </reg32>
 <reg32 offset="0x22c4" name="SP_VS_CTRL_REG0">
  <bitfield name="THREADMODE" pos="0" type="a3xx_threadmode"/>
  <bitfield name="INSTRBUFFERMODE" pos="1" type="a3xx_instrbuffermode"/>
  <!-- maybe CACHEINVALID is two bits?? -->
  <bitfield name="CACHEINVALID" pos="2" type="boolean"/>
  <bitfield name="ALUSCHMODE" pos="3" type="boolean"/>
  <doc>
   The full/half register footprint is in units of four components,
   so if r0.x is used, that counts as all of r0.[xyzw] as used.
   There are separate full/half register footprint values as the
   full and half registers are independent (not overlapping).
   Presumably the thread scheduler hardware allocates the full/half
   register names from the actual physical register file and
   handles the register renaming.
  </doc>
  <bitfield name="HALFREGFOOTPRINT" low="4" high="9" type="uint"/>
  <bitfield name="FULLREGFOOTPRINT" low="10" high="15" type="uint"/>
  <bitfield name="THREADSIZE" pos="20" type="a3xx_threadsize"/>
  <bitfield name="SUPERTHREADMODE" pos="21" type="boolean"/>
  <doc>
   From regspec:
   SP_FS_CTRL_REG0.FS_LENGTH [31:24]: FS length, unit = 256bits.
   If bit31 is 1, it means overflow
   or any long shader.
  </doc>
  <bitfield name="LENGTH" low="24" high="31" type="uint"/>
 </reg32>
 <reg32 offset="0x22c5" name="SP_VS_CTRL_REG1">
  <bitfield name="CONSTLENGTH" low="0" high="9" type="uint"/>
  <!--
not sure about full vs half const.. I can't get blob generate
something with a mediump/lowp uniform.
 -->

  <bitfield name="CONSTFOOTPRINT" low="10" high="19" type="uint"/>
  <bitfield name="INITIALOUTSTANDING" low="24" high="30" type="uint"/>
 </reg32>
 <reg32 offset="0x22c6" name="SP_VS_PARAM_REG">
  <bitfield name="POSREGID" low="0" high="7" type="a3xx_regid"/>
  <bitfield name="PSIZEREGID" low="8" high="15" type="a3xx_regid"/>
  <bitfield name="POS2DMODE" pos="16" type="boolean"/>
  <bitfield name="TOTALVSOUTVAR" low="20" high="24" type="uint"/>
 </reg32>
 <array offset="0x22c7" name="SP_VS_OUT" stride="1" length="8">
  <reg32 offset="0x0" name="REG">
   <bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>
   <bitfield name="A_HALF" pos="8" type="boolean"/>
   <bitfield name="A_COMPMASK" low="9" high="12" type="hex"/>
   <bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>
   <bitfield name="B_HALF" pos="24" type="boolean"/>
   <bitfield name="B_COMPMASK" low="25" high="28" type="hex"/>
  </reg32>
 </array>
 <array offset="0x22d0" name="SP_VS_VPC_DST" stride="1" length="4">
  <reg32 offset="0x0" name="REG">
   <doc>
    These seem to be offsets for storage of the varyings.
    Always seems to start from 8, possibly loc 0 and 4
    are for gl_Position and gl_PointSize?
   </doc>
   <bitfield name="OUTLOC0" low="0" high="6" type="uint"/>
   <bitfield name="OUTLOC1" low="8" high="14" type="uint"/>
   <bitfield name="OUTLOC2" low="16" high="22" type="uint"/>
   <bitfield name="OUTLOC3" low="24" high="30" type="uint"/>
  </reg32>
 </array>
 <reg32 offset="0x22d4" name="SP_VS_OBJ_OFFSET_REG" type="sp_vs_fs_obj_offset_reg"/>
 <doc>
  SP_VS_OBJ_START_REG contains pointer to the vertex shader program,
  immediately followed by the binning shader program (although I
  guess that is probably just re-using the same gpu buffer)
 </doc>
 <reg32 offset="0x22d5" name="SP_VS_OBJ_START_REG"/>
 <reg32 offset="0x22d6" name="SP_VS_PVT_MEM_PARAM_REG">
--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5
C=97 H=93 G=94

¤ Dauer der Verarbeitung: 0.21 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.