Path: blob/21.2-virgl/src/freedreno/registers/adreno/a6xx.xml
8255 views
<?xml version="1.0" encoding="UTF-8"?>1<database xmlns="http://nouveau.freedesktop.org/"2xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"3xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">4<import file="freedreno_copyright.xml"/>5<import file="adreno/adreno_common.xml"/>6<import file="adreno/adreno_pm4.xml"/>78<!-- these might be same as a5xx -->9<enum name="a6xx_tile_mode">10<value name="TILE6_LINEAR" value="0"/>11<value name="TILE6_2" value="2"/>12<value name="TILE6_3" value="3"/>13</enum>1415<enum name="a6xx_format">16<value value="0x02" name="FMT6_A8_UNORM"/>17<value value="0x03" name="FMT6_8_UNORM"/>18<value value="0x04" name="FMT6_8_SNORM"/>19<value value="0x05" name="FMT6_8_UINT"/>20<value value="0x06" name="FMT6_8_SINT"/>2122<value value="0x08" name="FMT6_4_4_4_4_UNORM"/>23<value value="0x0a" name="FMT6_5_5_5_1_UNORM"/>24<value value="0x0c" name="FMT6_1_5_5_5_UNORM"/> <!-- read only -->25<value value="0x0e" name="FMT6_5_6_5_UNORM"/>2627<value value="0x0f" name="FMT6_8_8_UNORM"/>28<value value="0x10" name="FMT6_8_8_SNORM"/>29<value value="0x11" name="FMT6_8_8_UINT"/>30<value value="0x12" name="FMT6_8_8_SINT"/>31<value value="0x13" name="FMT6_L8_A8_UNORM"/>3233<value value="0x15" name="FMT6_16_UNORM"/>34<value value="0x16" name="FMT6_16_SNORM"/>35<value value="0x17" name="FMT6_16_FLOAT"/>36<value value="0x18" name="FMT6_16_UINT"/>37<value value="0x19" name="FMT6_16_SINT"/>3839<value value="0x21" name="FMT6_8_8_8_UNORM"/>40<value value="0x22" name="FMT6_8_8_8_SNORM"/>41<value value="0x23" name="FMT6_8_8_8_UINT"/>42<value value="0x24" name="FMT6_8_8_8_SINT"/>4344<value value="0x30" name="FMT6_8_8_8_8_UNORM"/>45<value value="0x31" name="FMT6_8_8_8_X8_UNORM"/> <!-- samples 1 for alpha -->46<value value="0x32" name="FMT6_8_8_8_8_SNORM"/>47<value value="0x33" name="FMT6_8_8_8_8_UINT"/>48<value value="0x34" name="FMT6_8_8_8_8_SINT"/>4950<value value="0x35" name="FMT6_9_9_9_E5_FLOAT"/>5152<value value="0x36" name="FMT6_10_10_10_2_UNORM"/>53<value value="0x37" name="FMT6_10_10_10_2_UNORM_DEST"/>54<value value="0x39" name="FMT6_10_10_10_2_SNORM"/>55<value value="0x3a" name="FMT6_10_10_10_2_UINT"/>56<value value="0x3b" name="FMT6_10_10_10_2_SINT"/>5758<value value="0x42" name="FMT6_11_11_10_FLOAT"/>5960<value value="0x43" name="FMT6_16_16_UNORM"/>61<value value="0x44" name="FMT6_16_16_SNORM"/>62<value value="0x45" name="FMT6_16_16_FLOAT"/>63<value value="0x46" name="FMT6_16_16_UINT"/>64<value value="0x47" name="FMT6_16_16_SINT"/>6566<value value="0x48" name="FMT6_32_UNORM"/>67<value value="0x49" name="FMT6_32_SNORM"/>68<value value="0x4a" name="FMT6_32_FLOAT"/>69<value value="0x4b" name="FMT6_32_UINT"/>70<value value="0x4c" name="FMT6_32_SINT"/>71<value value="0x4d" name="FMT6_32_FIXED"/>7273<value value="0x58" name="FMT6_16_16_16_UNORM"/>74<value value="0x59" name="FMT6_16_16_16_SNORM"/>75<value value="0x5a" name="FMT6_16_16_16_FLOAT"/>76<value value="0x5b" name="FMT6_16_16_16_UINT"/>77<value value="0x5c" name="FMT6_16_16_16_SINT"/>7879<value value="0x60" name="FMT6_16_16_16_16_UNORM"/>80<value value="0x61" name="FMT6_16_16_16_16_SNORM"/>81<value value="0x62" name="FMT6_16_16_16_16_FLOAT"/>82<value value="0x63" name="FMT6_16_16_16_16_UINT"/>83<value value="0x64" name="FMT6_16_16_16_16_SINT"/>8485<value value="0x65" name="FMT6_32_32_UNORM"/>86<value value="0x66" name="FMT6_32_32_SNORM"/>87<value value="0x67" name="FMT6_32_32_FLOAT"/>88<value value="0x68" name="FMT6_32_32_UINT"/>89<value value="0x69" name="FMT6_32_32_SINT"/>90<value value="0x6a" name="FMT6_32_32_FIXED"/>9192<value value="0x70" name="FMT6_32_32_32_UNORM"/>93<value value="0x71" name="FMT6_32_32_32_SNORM"/>94<value value="0x72" name="FMT6_32_32_32_UINT"/>95<value value="0x73" name="FMT6_32_32_32_SINT"/>96<value value="0x74" name="FMT6_32_32_32_FLOAT"/>97<value value="0x75" name="FMT6_32_32_32_FIXED"/>9899<value value="0x80" name="FMT6_32_32_32_32_UNORM"/>100<value value="0x81" name="FMT6_32_32_32_32_SNORM"/>101<value value="0x82" name="FMT6_32_32_32_32_FLOAT"/>102<value value="0x83" name="FMT6_32_32_32_32_UINT"/>103<value value="0x84" name="FMT6_32_32_32_32_SINT"/>104<value value="0x85" name="FMT6_32_32_32_32_FIXED"/>105106<value value="0x8c" name="FMT6_G8R8B8R8_422_UNORM"/>107<value value="0x8d" name="FMT6_R8G8R8B8_422_UNORM"/>108<value value="0x8e" name="FMT6_R8_G8B8_2PLANE_420_UNORM"/>109<value value="0x90" name="FMT6_R8_G8_B8_3PLANE_420_UNORM"/>110111<value value="0x91" name="FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8"/>112113<!-- used with the Y plane of FMT6_R8_G8B8_2PLANE_420_UNORM114which has different UBWC compression from regular 8_UNORM format -->115<value value="0x94" name="FMT6_8_PLANE_UNORM"/>116117<value value="0xa0" name="FMT6_Z24_UNORM_S8_UINT"/>118119<value value="0xab" name="FMT6_ETC2_RG11_UNORM"/>120<value value="0xac" name="FMT6_ETC2_RG11_SNORM"/>121<value value="0xad" name="FMT6_ETC2_R11_UNORM"/>122<value value="0xae" name="FMT6_ETC2_R11_SNORM"/>123<value value="0xaf" name="FMT6_ETC1"/>124<value value="0xb0" name="FMT6_ETC2_RGB8"/>125<value value="0xb1" name="FMT6_ETC2_RGBA8"/>126<value value="0xb2" name="FMT6_ETC2_RGB8A1"/>127<value value="0xb3" name="FMT6_DXT1"/>128<value value="0xb4" name="FMT6_DXT3"/>129<value value="0xb5" name="FMT6_DXT5"/>130<value value="0xb7" name="FMT6_RGTC1_UNORM"/>131<value value="0xb8" name="FMT6_RGTC1_SNORM"/>132<value value="0xbb" name="FMT6_RGTC2_UNORM"/>133<value value="0xbc" name="FMT6_RGTC2_SNORM"/>134<value value="0xbe" name="FMT6_BPTC_UFLOAT"/>135<value value="0xbf" name="FMT6_BPTC_FLOAT"/>136<value value="0xc0" name="FMT6_BPTC"/>137<value value="0xc1" name="FMT6_ASTC_4x4"/>138<value value="0xc2" name="FMT6_ASTC_5x4"/>139<value value="0xc3" name="FMT6_ASTC_5x5"/>140<value value="0xc4" name="FMT6_ASTC_6x5"/>141<value value="0xc5" name="FMT6_ASTC_6x6"/>142<value value="0xc6" name="FMT6_ASTC_8x5"/>143<value value="0xc7" name="FMT6_ASTC_8x6"/>144<value value="0xc8" name="FMT6_ASTC_8x8"/>145<value value="0xc9" name="FMT6_ASTC_10x5"/>146<value value="0xca" name="FMT6_ASTC_10x6"/>147<value value="0xcb" name="FMT6_ASTC_10x8"/>148<value value="0xcc" name="FMT6_ASTC_10x10"/>149<value value="0xcd" name="FMT6_ASTC_12x10"/>150<value value="0xce" name="FMT6_ASTC_12x12"/>151152<!-- for sampling stencil (integer, 2nd channel), not available on a630 -->153<value value="0xea" name="FMT6_Z24_UINT_S8_UINT"/>154155<!-- Not a hw enum, used internally in driver -->156<value value="0xff" name="FMT6_NONE"/>157158</enum>159160<!-- probably same as a5xx -->161<enum name="a6xx_polygon_mode">162<value name="POLYMODE6_POINTS" value="1"/>163<value name="POLYMODE6_LINES" value="2"/>164<value name="POLYMODE6_TRIANGLES" value="3"/>165</enum>166167<enum name="a6xx_depth_format">168<value name="DEPTH6_NONE" value="0"/>169<value name="DEPTH6_16" value="1"/>170<value name="DEPTH6_24_8" value="2"/>171<value name="DEPTH6_32" value="4"/>172</enum>173174<bitset name="a6x_cp_protect" inline="yes">175<bitfield name="BASE_ADDR" low="0" high="17"/>176<bitfield name="MASK_LEN" low="18" high="30"/>177<bitfield name="READ" pos="31" type="boolean"/>178</bitset>179180<enum name="a6xx_shader_id">181<value value="0x9" name="A6XX_TP0_TMO_DATA"/>182<value value="0xa" name="A6XX_TP0_SMO_DATA"/>183<value value="0xb" name="A6XX_TP0_MIPMAP_BASE_DATA"/>184<value value="0x19" name="A6XX_TP1_TMO_DATA"/>185<value value="0x1a" name="A6XX_TP1_SMO_DATA"/>186<value value="0x1b" name="A6XX_TP1_MIPMAP_BASE_DATA"/>187<value value="0x29" name="A6XX_SP_INST_DATA"/>188<value value="0x2a" name="A6XX_SP_LB_0_DATA"/>189<value value="0x2b" name="A6XX_SP_LB_1_DATA"/>190<value value="0x2c" name="A6XX_SP_LB_2_DATA"/>191<value value="0x2d" name="A6XX_SP_LB_3_DATA"/>192<value value="0x2e" name="A6XX_SP_LB_4_DATA"/>193<value value="0x2f" name="A6XX_SP_LB_5_DATA"/>194<value value="0x30" name="A6XX_SP_CB_BINDLESS_DATA"/>195<value value="0x31" name="A6XX_SP_CB_LEGACY_DATA"/>196<value value="0x32" name="A6XX_SP_UAV_DATA"/>197<value value="0x33" name="A6XX_SP_INST_TAG"/>198<value value="0x34" name="A6XX_SP_CB_BINDLESS_TAG"/>199<value value="0x35" name="A6XX_SP_TMO_UMO_TAG"/>200<value value="0x36" name="A6XX_SP_SMO_TAG"/>201<value value="0x37" name="A6XX_SP_STATE_DATA"/>202<value value="0x49" name="A6XX_HLSQ_CHUNK_CVS_RAM"/>203<value value="0x4a" name="A6XX_HLSQ_CHUNK_CPS_RAM"/>204<value value="0x4b" name="A6XX_HLSQ_CHUNK_CVS_RAM_TAG"/>205<value value="0x4c" name="A6XX_HLSQ_CHUNK_CPS_RAM_TAG"/>206<value value="0x4d" name="A6XX_HLSQ_ICB_CVS_CB_BASE_TAG"/>207<value value="0x4e" name="A6XX_HLSQ_ICB_CPS_CB_BASE_TAG"/>208<value value="0x50" name="A6XX_HLSQ_CVS_MISC_RAM"/>209<value value="0x51" name="A6XX_HLSQ_CPS_MISC_RAM"/>210<value value="0x52" name="A6XX_HLSQ_INST_RAM"/>211<value value="0x53" name="A6XX_HLSQ_GFX_CVS_CONST_RAM"/>212<value value="0x54" name="A6XX_HLSQ_GFX_CPS_CONST_RAM"/>213<value value="0x55" name="A6XX_HLSQ_CVS_MISC_RAM_TAG"/>214<value value="0x56" name="A6XX_HLSQ_CPS_MISC_RAM_TAG"/>215<value value="0x57" name="A6XX_HLSQ_INST_RAM_TAG"/>216<value value="0x58" name="A6XX_HLSQ_GFX_CVS_CONST_RAM_TAG"/>217<value value="0x59" name="A6XX_HLSQ_GFX_CPS_CONST_RAM_TAG"/>218<value value="0x5a" name="A6XX_HLSQ_PWR_REST_RAM"/>219<value value="0x5b" name="A6XX_HLSQ_PWR_REST_TAG"/>220<value value="0x60" name="A6XX_HLSQ_DATAPATH_META"/>221<value value="0x61" name="A6XX_HLSQ_FRONTEND_META"/>222<value value="0x62" name="A6XX_HLSQ_INDIRECT_META"/>223<value value="0x63" name="A6XX_HLSQ_BACKEND_META"/>224</enum>225226<enum name="a6xx_debugbus_id">227<value value="0x1" name="A6XX_DBGBUS_CP"/>228<value value="0x2" name="A6XX_DBGBUS_RBBM"/>229<value value="0x3" name="A6XX_DBGBUS_VBIF"/>230<value value="0x4" name="A6XX_DBGBUS_HLSQ"/>231<value value="0x5" name="A6XX_DBGBUS_UCHE"/>232<value value="0x6" name="A6XX_DBGBUS_DPM"/>233<value value="0x7" name="A6XX_DBGBUS_TESS"/>234<value value="0x8" name="A6XX_DBGBUS_PC"/>235<value value="0x9" name="A6XX_DBGBUS_VFDP"/>236<value value="0xa" name="A6XX_DBGBUS_VPC"/>237<value value="0xb" name="A6XX_DBGBUS_TSE"/>238<value value="0xc" name="A6XX_DBGBUS_RAS"/>239<value value="0xd" name="A6XX_DBGBUS_VSC"/>240<value value="0xe" name="A6XX_DBGBUS_COM"/>241<value value="0x10" name="A6XX_DBGBUS_LRZ"/>242<value value="0x11" name="A6XX_DBGBUS_A2D"/>243<value value="0x12" name="A6XX_DBGBUS_CCUFCHE"/>244<value value="0x13" name="A6XX_DBGBUS_GMU_CX"/>245<value value="0x14" name="A6XX_DBGBUS_RBP"/>246<value value="0x15" name="A6XX_DBGBUS_DCS"/>247<value value="0x16" name="A6XX_DBGBUS_DBGC"/>248<value value="0x17" name="A6XX_DBGBUS_CX"/>249<value value="0x18" name="A6XX_DBGBUS_GMU_GX"/>250<value value="0x19" name="A6XX_DBGBUS_TPFCHE"/>251<value value="0x1a" name="A6XX_DBGBUS_GBIF_GX"/>252<value value="0x1d" name="A6XX_DBGBUS_GPC"/>253<value value="0x1e" name="A6XX_DBGBUS_LARC"/>254<value value="0x1f" name="A6XX_DBGBUS_HLSQ_SPTP"/>255<value value="0x20" name="A6XX_DBGBUS_RB_0"/>256<value value="0x21" name="A6XX_DBGBUS_RB_1"/>257<value value="0x24" name="A6XX_DBGBUS_UCHE_WRAPPER"/>258<value value="0x28" name="A6XX_DBGBUS_CCU_0"/>259<value value="0x29" name="A6XX_DBGBUS_CCU_1"/>260<value value="0x38" name="A6XX_DBGBUS_VFD_0"/>261<value value="0x39" name="A6XX_DBGBUS_VFD_1"/>262<value value="0x3a" name="A6XX_DBGBUS_VFD_2"/>263<value value="0x3b" name="A6XX_DBGBUS_VFD_3"/>264<value value="0x40" name="A6XX_DBGBUS_SP_0"/>265<value value="0x41" name="A6XX_DBGBUS_SP_1"/>266<value value="0x48" name="A6XX_DBGBUS_TPL1_0"/>267<value value="0x49" name="A6XX_DBGBUS_TPL1_1"/>268<value value="0x4a" name="A6XX_DBGBUS_TPL1_2"/>269<value value="0x4b" name="A6XX_DBGBUS_TPL1_3"/>270</enum>271272<enum name="a6xx_cp_perfcounter_select">273<value value="0" name="PERF_CP_ALWAYS_COUNT"/>274<value value="1" name="PERF_CP_BUSY_GFX_CORE_IDLE"/>275<value value="2" name="PERF_CP_BUSY_CYCLES"/>276<value value="3" name="PERF_CP_NUM_PREEMPTIONS"/>277<value value="4" name="PERF_CP_PREEMPTION_REACTION_DELAY"/>278<value value="5" name="PERF_CP_PREEMPTION_SWITCH_OUT_TIME"/>279<value value="6" name="PERF_CP_PREEMPTION_SWITCH_IN_TIME"/>280<value value="7" name="PERF_CP_DEAD_DRAWS_IN_BIN_RENDER"/>281<value value="8" name="PERF_CP_PREDICATED_DRAWS_KILLED"/>282<value value="9" name="PERF_CP_MODE_SWITCH"/>283<value value="10" name="PERF_CP_ZPASS_DONE"/>284<value value="11" name="PERF_CP_CONTEXT_DONE"/>285<value value="12" name="PERF_CP_CACHE_FLUSH"/>286<value value="13" name="PERF_CP_LONG_PREEMPTIONS"/>287<value value="14" name="PERF_CP_SQE_I_CACHE_STARVE"/>288<value value="15" name="PERF_CP_SQE_IDLE"/>289<value value="16" name="PERF_CP_SQE_PM4_STARVE_RB_IB"/>290<value value="17" name="PERF_CP_SQE_PM4_STARVE_SDS"/>291<value value="18" name="PERF_CP_SQE_MRB_STARVE"/>292<value value="19" name="PERF_CP_SQE_RRB_STARVE"/>293<value value="20" name="PERF_CP_SQE_VSD_STARVE"/>294<value value="21" name="PERF_CP_VSD_DECODE_STARVE"/>295<value value="22" name="PERF_CP_SQE_PIPE_OUT_STALL"/>296<value value="23" name="PERF_CP_SQE_SYNC_STALL"/>297<value value="24" name="PERF_CP_SQE_PM4_WFI_STALL"/>298<value value="25" name="PERF_CP_SQE_SYS_WFI_STALL"/>299<value value="26" name="PERF_CP_SQE_T4_EXEC"/>300<value value="27" name="PERF_CP_SQE_LOAD_STATE_EXEC"/>301<value value="28" name="PERF_CP_SQE_SAVE_SDS_STATE"/>302<value value="29" name="PERF_CP_SQE_DRAW_EXEC"/>303<value value="30" name="PERF_CP_SQE_CTXT_REG_BUNCH_EXEC"/>304<value value="31" name="PERF_CP_SQE_EXEC_PROFILED"/>305<value value="32" name="PERF_CP_MEMORY_POOL_EMPTY"/>306<value value="33" name="PERF_CP_MEMORY_POOL_SYNC_STALL"/>307<value value="34" name="PERF_CP_MEMORY_POOL_ABOVE_THRESH"/>308<value value="35" name="PERF_CP_AHB_WR_STALL_PRE_DRAWS"/>309<value value="36" name="PERF_CP_AHB_STALL_SQE_GMU"/>310<value value="37" name="PERF_CP_AHB_STALL_SQE_WR_OTHER"/>311<value value="38" name="PERF_CP_AHB_STALL_SQE_RD_OTHER"/>312<value value="39" name="PERF_CP_CLUSTER0_EMPTY"/>313<value value="40" name="PERF_CP_CLUSTER1_EMPTY"/>314<value value="41" name="PERF_CP_CLUSTER2_EMPTY"/>315<value value="42" name="PERF_CP_CLUSTER3_EMPTY"/>316<value value="43" name="PERF_CP_CLUSTER4_EMPTY"/>317<value value="44" name="PERF_CP_CLUSTER5_EMPTY"/>318<value value="45" name="PERF_CP_PM4_DATA"/>319<value value="46" name="PERF_CP_PM4_HEADERS"/>320<value value="47" name="PERF_CP_VBIF_READ_BEATS"/>321<value value="48" name="PERF_CP_VBIF_WRITE_BEATS"/>322<value value="49" name="PERF_CP_SQE_INSTR_COUNTER"/>323</enum>324325<enum name="a6xx_rbbm_perfcounter_select">326<value value="0" name="PERF_RBBM_ALWAYS_COUNT"/>327<value value="1" name="PERF_RBBM_ALWAYS_ON"/>328<value value="2" name="PERF_RBBM_TSE_BUSY"/>329<value value="3" name="PERF_RBBM_RAS_BUSY"/>330<value value="4" name="PERF_RBBM_PC_DCALL_BUSY"/>331<value value="5" name="PERF_RBBM_PC_VSD_BUSY"/>332<value value="6" name="PERF_RBBM_STATUS_MASKED"/>333<value value="7" name="PERF_RBBM_COM_BUSY"/>334<value value="8" name="PERF_RBBM_DCOM_BUSY"/>335<value value="9" name="PERF_RBBM_VBIF_BUSY"/>336<value value="10" name="PERF_RBBM_VSC_BUSY"/>337<value value="11" name="PERF_RBBM_TESS_BUSY"/>338<value value="12" name="PERF_RBBM_UCHE_BUSY"/>339<value value="13" name="PERF_RBBM_HLSQ_BUSY"/>340</enum>341342<enum name="a6xx_pc_perfcounter_select">343<value value="0" name="PERF_PC_BUSY_CYCLES"/>344<value value="1" name="PERF_PC_WORKING_CYCLES"/>345<value value="2" name="PERF_PC_STALL_CYCLES_VFD"/>346<value value="3" name="PERF_PC_STALL_CYCLES_TSE"/>347<value value="4" name="PERF_PC_STALL_CYCLES_VPC"/>348<value value="5" name="PERF_PC_STALL_CYCLES_UCHE"/>349<value value="6" name="PERF_PC_STALL_CYCLES_TESS"/>350<value value="7" name="PERF_PC_STALL_CYCLES_TSE_ONLY"/>351<value value="8" name="PERF_PC_STALL_CYCLES_VPC_ONLY"/>352<value value="9" name="PERF_PC_PASS1_TF_STALL_CYCLES"/>353<value value="10" name="PERF_PC_STARVE_CYCLES_FOR_INDEX"/>354<value value="11" name="PERF_PC_STARVE_CYCLES_FOR_TESS_FACTOR"/>355<value value="12" name="PERF_PC_STARVE_CYCLES_FOR_VIZ_STREAM"/>356<value value="13" name="PERF_PC_STARVE_CYCLES_FOR_POSITION"/>357<value value="14" name="PERF_PC_STARVE_CYCLES_DI"/>358<value value="15" name="PERF_PC_VIS_STREAMS_LOADED"/>359<value value="16" name="PERF_PC_INSTANCES"/>360<value value="17" name="PERF_PC_VPC_PRIMITIVES"/>361<value value="18" name="PERF_PC_DEAD_PRIM"/>362<value value="19" name="PERF_PC_LIVE_PRIM"/>363<value value="20" name="PERF_PC_VERTEX_HITS"/>364<value value="21" name="PERF_PC_IA_VERTICES"/>365<value value="22" name="PERF_PC_IA_PRIMITIVES"/>366<value value="23" name="PERF_PC_GS_PRIMITIVES"/>367<value value="24" name="PERF_PC_HS_INVOCATIONS"/>368<value value="25" name="PERF_PC_DS_INVOCATIONS"/>369<value value="26" name="PERF_PC_VS_INVOCATIONS"/>370<value value="27" name="PERF_PC_GS_INVOCATIONS"/>371<value value="28" name="PERF_PC_DS_PRIMITIVES"/>372<value value="29" name="PERF_PC_VPC_POS_DATA_TRANSACTION"/>373<value value="30" name="PERF_PC_3D_DRAWCALLS"/>374<value value="31" name="PERF_PC_2D_DRAWCALLS"/>375<value value="32" name="PERF_PC_NON_DRAWCALL_GLOBAL_EVENTS"/>376<value value="33" name="PERF_TESS_BUSY_CYCLES"/>377<value value="34" name="PERF_TESS_WORKING_CYCLES"/>378<value value="35" name="PERF_TESS_STALL_CYCLES_PC"/>379<value value="36" name="PERF_TESS_STARVE_CYCLES_PC"/>380<value value="37" name="PERF_PC_TSE_TRANSACTION"/>381<value value="38" name="PERF_PC_TSE_VERTEX"/>382<value value="39" name="PERF_PC_TESS_PC_UV_TRANS"/>383<value value="40" name="PERF_PC_TESS_PC_UV_PATCHES"/>384<value value="41" name="PERF_PC_TESS_FACTOR_TRANS"/>385</enum>386387<enum name="a6xx_vfd_perfcounter_select">388<value value="0" name="PERF_VFD_BUSY_CYCLES"/>389<value value="1" name="PERF_VFD_STALL_CYCLES_UCHE"/>390<value value="2" name="PERF_VFD_STALL_CYCLES_VPC_ALLOC"/>391<value value="3" name="PERF_VFD_STALL_CYCLES_SP_INFO"/>392<value value="4" name="PERF_VFD_STALL_CYCLES_SP_ATTR"/>393<value value="5" name="PERF_VFD_STARVE_CYCLES_UCHE"/>394<value value="6" name="PERF_VFD_RBUFFER_FULL"/>395<value value="7" name="PERF_VFD_ATTR_INFO_FIFO_FULL"/>396<value value="8" name="PERF_VFD_DECODED_ATTRIBUTE_BYTES"/>397<value value="9" name="PERF_VFD_NUM_ATTRIBUTES"/>398<value value="10" name="PERF_VFD_UPPER_SHADER_FIBERS"/>399<value value="11" name="PERF_VFD_LOWER_SHADER_FIBERS"/>400<value value="12" name="PERF_VFD_MODE_0_FIBERS"/>401<value value="13" name="PERF_VFD_MODE_1_FIBERS"/>402<value value="14" name="PERF_VFD_MODE_2_FIBERS"/>403<value value="15" name="PERF_VFD_MODE_3_FIBERS"/>404<value value="16" name="PERF_VFD_MODE_4_FIBERS"/>405<value value="17" name="PERF_VFD_TOTAL_VERTICES"/>406<value value="18" name="PERF_VFDP_STALL_CYCLES_VFD"/>407<value value="19" name="PERF_VFDP_STALL_CYCLES_VFD_INDEX"/>408<value value="20" name="PERF_VFDP_STALL_CYCLES_VFD_PROG"/>409<value value="21" name="PERF_VFDP_STARVE_CYCLES_PC"/>410<value value="22" name="PERF_VFDP_VS_STAGE_WAVES"/>411</enum>412413<enum name="a6xx_hlsq_perfcounter_select">414<value value="0" name="PERF_HLSQ_BUSY_CYCLES"/>415<value value="1" name="PERF_HLSQ_STALL_CYCLES_UCHE"/>416<value value="2" name="PERF_HLSQ_STALL_CYCLES_SP_STATE"/>417<value value="3" name="PERF_HLSQ_STALL_CYCLES_SP_FS_STAGE"/>418<value value="4" name="PERF_HLSQ_UCHE_LATENCY_CYCLES"/>419<value value="5" name="PERF_HLSQ_UCHE_LATENCY_COUNT"/>420<value value="6" name="PERF_HLSQ_FS_STAGE_1X_WAVES"/>421<value value="7" name="PERF_HLSQ_FS_STAGE_2X_WAVES"/>422<value value="8" name="PERF_HLSQ_QUADS"/>423<value value="9" name="PERF_HLSQ_CS_INVOCATIONS"/>424<value value="10" name="PERF_HLSQ_COMPUTE_DRAWCALLS"/>425<value value="11" name="PERF_HLSQ_FS_DATA_WAIT_PROGRAMMING"/>426<value value="12" name="PERF_HLSQ_DUAL_FS_PROG_ACTIVE"/>427<value value="13" name="PERF_HLSQ_DUAL_VS_PROG_ACTIVE"/>428<value value="14" name="PERF_HLSQ_FS_BATCH_COUNT_ZERO"/>429<value value="15" name="PERF_HLSQ_VS_BATCH_COUNT_ZERO"/>430<value value="16" name="PERF_HLSQ_WAVE_PENDING_NO_QUAD"/>431<value value="17" name="PERF_HLSQ_WAVE_PENDING_NO_PRIM_BASE"/>432<value value="18" name="PERF_HLSQ_STALL_CYCLES_VPC"/>433<value value="19" name="PERF_HLSQ_PIXELS"/>434<value value="20" name="PERF_HLSQ_DRAW_MODE_SWITCH_VSFS_SYNC"/>435</enum>436437<enum name="a6xx_vpc_perfcounter_select">438<value value="0" name="PERF_VPC_BUSY_CYCLES"/>439<value value="1" name="PERF_VPC_WORKING_CYCLES"/>440<value value="2" name="PERF_VPC_STALL_CYCLES_UCHE"/>441<value value="3" name="PERF_VPC_STALL_CYCLES_VFD_WACK"/>442<value value="4" name="PERF_VPC_STALL_CYCLES_HLSQ_PRIM_ALLOC"/>443<value value="5" name="PERF_VPC_STALL_CYCLES_PC"/>444<value value="6" name="PERF_VPC_STALL_CYCLES_SP_LM"/>445<value value="7" name="PERF_VPC_STARVE_CYCLES_SP"/>446<value value="8" name="PERF_VPC_STARVE_CYCLES_LRZ"/>447<value value="9" name="PERF_VPC_PC_PRIMITIVES"/>448<value value="10" name="PERF_VPC_SP_COMPONENTS"/>449<value value="11" name="PERF_VPC_STALL_CYCLES_VPCRAM_POS"/>450<value value="12" name="PERF_VPC_LRZ_ASSIGN_PRIMITIVES"/>451<value value="13" name="PERF_VPC_RB_VISIBLE_PRIMITIVES"/>452<value value="14" name="PERF_VPC_LM_TRANSACTION"/>453<value value="15" name="PERF_VPC_STREAMOUT_TRANSACTION"/>454<value value="16" name="PERF_VPC_VS_BUSY_CYCLES"/>455<value value="17" name="PERF_VPC_PS_BUSY_CYCLES"/>456<value value="18" name="PERF_VPC_VS_WORKING_CYCLES"/>457<value value="19" name="PERF_VPC_PS_WORKING_CYCLES"/>458<value value="20" name="PERF_VPC_STARVE_CYCLES_RB"/>459<value value="21" name="PERF_VPC_NUM_VPCRAM_READ_POS"/>460<value value="22" name="PERF_VPC_WIT_FULL_CYCLES"/>461<value value="23" name="PERF_VPC_VPCRAM_FULL_CYCLES"/>462<value value="24" name="PERF_VPC_LM_FULL_WAIT_FOR_INTP_END"/>463<value value="25" name="PERF_VPC_NUM_VPCRAM_WRITE"/>464<value value="26" name="PERF_VPC_NUM_VPCRAM_READ_SO"/>465<value value="27" name="PERF_VPC_NUM_ATTR_REQ_LM"/>466</enum>467468<enum name="a6xx_tse_perfcounter_select">469<value value="0" name="PERF_TSE_BUSY_CYCLES"/>470<value value="1" name="PERF_TSE_CLIPPING_CYCLES"/>471<value value="2" name="PERF_TSE_STALL_CYCLES_RAS"/>472<value value="3" name="PERF_TSE_STALL_CYCLES_LRZ_BARYPLANE"/>473<value value="4" name="PERF_TSE_STALL_CYCLES_LRZ_ZPLANE"/>474<value value="5" name="PERF_TSE_STARVE_CYCLES_PC"/>475<value value="6" name="PERF_TSE_INPUT_PRIM"/>476<value value="7" name="PERF_TSE_INPUT_NULL_PRIM"/>477<value value="8" name="PERF_TSE_TRIVAL_REJ_PRIM"/>478<value value="9" name="PERF_TSE_CLIPPED_PRIM"/>479<value value="10" name="PERF_TSE_ZERO_AREA_PRIM"/>480<value value="11" name="PERF_TSE_FACENESS_CULLED_PRIM"/>481<value value="12" name="PERF_TSE_ZERO_PIXEL_PRIM"/>482<value value="13" name="PERF_TSE_OUTPUT_NULL_PRIM"/>483<value value="14" name="PERF_TSE_OUTPUT_VISIBLE_PRIM"/>484<value value="15" name="PERF_TSE_CINVOCATION"/>485<value value="16" name="PERF_TSE_CPRIMITIVES"/>486<value value="17" name="PERF_TSE_2D_INPUT_PRIM"/>487<value value="18" name="PERF_TSE_2D_ALIVE_CYCLES"/>488<value value="19" name="PERF_TSE_CLIP_PLANES"/>489</enum>490491<enum name="a6xx_ras_perfcounter_select">492<value value="0" name="PERF_RAS_BUSY_CYCLES"/>493<value value="1" name="PERF_RAS_SUPERTILE_ACTIVE_CYCLES"/>494<value value="2" name="PERF_RAS_STALL_CYCLES_LRZ"/>495<value value="3" name="PERF_RAS_STARVE_CYCLES_TSE"/>496<value value="4" name="PERF_RAS_SUPER_TILES"/>497<value value="5" name="PERF_RAS_8X4_TILES"/>498<value value="6" name="PERF_RAS_MASKGEN_ACTIVE"/>499<value value="7" name="PERF_RAS_FULLY_COVERED_SUPER_TILES"/>500<value value="8" name="PERF_RAS_FULLY_COVERED_8X4_TILES"/>501<value value="9" name="PERF_RAS_PRIM_KILLED_INVISILBE"/>502<value value="10" name="PERF_RAS_SUPERTILE_GEN_ACTIVE_CYCLES"/>503<value value="11" name="PERF_RAS_LRZ_INTF_WORKING_CYCLES"/>504<value value="12" name="PERF_RAS_BLOCKS"/>505</enum>506507<enum name="a6xx_uche_perfcounter_select">508<value value="0" name="PERF_UCHE_BUSY_CYCLES"/>509<value value="1" name="PERF_UCHE_STALL_CYCLES_ARBITER"/>510<value value="2" name="PERF_UCHE_VBIF_LATENCY_CYCLES"/>511<value value="3" name="PERF_UCHE_VBIF_LATENCY_SAMPLES"/>512<value value="4" name="PERF_UCHE_VBIF_READ_BEATS_TP"/>513<value value="5" name="PERF_UCHE_VBIF_READ_BEATS_VFD"/>514<value value="6" name="PERF_UCHE_VBIF_READ_BEATS_HLSQ"/>515<value value="7" name="PERF_UCHE_VBIF_READ_BEATS_LRZ"/>516<value value="8" name="PERF_UCHE_VBIF_READ_BEATS_SP"/>517<value value="9" name="PERF_UCHE_READ_REQUESTS_TP"/>518<value value="10" name="PERF_UCHE_READ_REQUESTS_VFD"/>519<value value="11" name="PERF_UCHE_READ_REQUESTS_HLSQ"/>520<value value="12" name="PERF_UCHE_READ_REQUESTS_LRZ"/>521<value value="13" name="PERF_UCHE_READ_REQUESTS_SP"/>522<value value="14" name="PERF_UCHE_WRITE_REQUESTS_LRZ"/>523<value value="15" name="PERF_UCHE_WRITE_REQUESTS_SP"/>524<value value="16" name="PERF_UCHE_WRITE_REQUESTS_VPC"/>525<value value="17" name="PERF_UCHE_WRITE_REQUESTS_VSC"/>526<value value="18" name="PERF_UCHE_EVICTS"/>527<value value="19" name="PERF_UCHE_BANK_REQ0"/>528<value value="20" name="PERF_UCHE_BANK_REQ1"/>529<value value="21" name="PERF_UCHE_BANK_REQ2"/>530<value value="22" name="PERF_UCHE_BANK_REQ3"/>531<value value="23" name="PERF_UCHE_BANK_REQ4"/>532<value value="24" name="PERF_UCHE_BANK_REQ5"/>533<value value="25" name="PERF_UCHE_BANK_REQ6"/>534<value value="26" name="PERF_UCHE_BANK_REQ7"/>535<value value="27" name="PERF_UCHE_VBIF_READ_BEATS_CH0"/>536<value value="28" name="PERF_UCHE_VBIF_READ_BEATS_CH1"/>537<value value="29" name="PERF_UCHE_GMEM_READ_BEATS"/>538<value value="30" name="PERF_UCHE_TPH_REF_FULL"/>539<value value="31" name="PERF_UCHE_TPH_VICTIM_FULL"/>540<value value="32" name="PERF_UCHE_TPH_EXT_FULL"/>541<value value="33" name="PERF_UCHE_VBIF_STALL_WRITE_DATA"/>542<value value="34" name="PERF_UCHE_DCMP_LATENCY_SAMPLES"/>543<value value="35" name="PERF_UCHE_DCMP_LATENCY_CYCLES"/>544<value value="36" name="PERF_UCHE_VBIF_READ_BEATS_PC"/>545<value value="37" name="PERF_UCHE_READ_REQUESTS_PC"/>546<value value="38" name="PERF_UCHE_RAM_READ_REQ"/>547<value value="39" name="PERF_UCHE_RAM_WRITE_REQ"/>548</enum>549550<enum name="a6xx_tp_perfcounter_select">551<value value="0" name="PERF_TP_BUSY_CYCLES"/>552<value value="1" name="PERF_TP_STALL_CYCLES_UCHE"/>553<value value="2" name="PERF_TP_LATENCY_CYCLES"/>554<value value="3" name="PERF_TP_LATENCY_TRANS"/>555<value value="4" name="PERF_TP_FLAG_CACHE_REQUEST_SAMPLES"/>556<value value="5" name="PERF_TP_FLAG_CACHE_REQUEST_LATENCY"/>557<value value="6" name="PERF_TP_L1_CACHELINE_REQUESTS"/>558<value value="7" name="PERF_TP_L1_CACHELINE_MISSES"/>559<value value="8" name="PERF_TP_SP_TP_TRANS"/>560<value value="9" name="PERF_TP_TP_SP_TRANS"/>561<value value="10" name="PERF_TP_OUTPUT_PIXELS"/>562<value value="11" name="PERF_TP_FILTER_WORKLOAD_16BIT"/>563<value value="12" name="PERF_TP_FILTER_WORKLOAD_32BIT"/>564<value value="13" name="PERF_TP_QUADS_RECEIVED"/>565<value value="14" name="PERF_TP_QUADS_OFFSET"/>566<value value="15" name="PERF_TP_QUADS_SHADOW"/>567<value value="16" name="PERF_TP_QUADS_ARRAY"/>568<value value="17" name="PERF_TP_QUADS_GRADIENT"/>569<value value="18" name="PERF_TP_QUADS_1D"/>570<value value="19" name="PERF_TP_QUADS_2D"/>571<value value="20" name="PERF_TP_QUADS_BUFFER"/>572<value value="21" name="PERF_TP_QUADS_3D"/>573<value value="22" name="PERF_TP_QUADS_CUBE"/>574<value value="23" name="PERF_TP_DIVERGENT_QUADS_RECEIVED"/>575<value value="24" name="PERF_TP_PRT_NON_RESIDENT_EVENTS"/>576<value value="25" name="PERF_TP_OUTPUT_PIXELS_POINT"/>577<value value="26" name="PERF_TP_OUTPUT_PIXELS_BILINEAR"/>578<value value="27" name="PERF_TP_OUTPUT_PIXELS_MIP"/>579<value value="28" name="PERF_TP_OUTPUT_PIXELS_ANISO"/>580<value value="29" name="PERF_TP_OUTPUT_PIXELS_ZERO_LOD"/>581<value value="30" name="PERF_TP_FLAG_CACHE_REQUESTS"/>582<value value="31" name="PERF_TP_FLAG_CACHE_MISSES"/>583<value value="32" name="PERF_TP_L1_5_L2_REQUESTS"/>584<value value="33" name="PERF_TP_2D_OUTPUT_PIXELS"/>585<value value="34" name="PERF_TP_2D_OUTPUT_PIXELS_POINT"/>586<value value="35" name="PERF_TP_2D_OUTPUT_PIXELS_BILINEAR"/>587<value value="36" name="PERF_TP_2D_FILTER_WORKLOAD_16BIT"/>588<value value="37" name="PERF_TP_2D_FILTER_WORKLOAD_32BIT"/>589<value value="38" name="PERF_TP_TPA2TPC_TRANS"/>590<value value="39" name="PERF_TP_L1_MISSES_ASTC_1TILE"/>591<value value="40" name="PERF_TP_L1_MISSES_ASTC_2TILE"/>592<value value="41" name="PERF_TP_L1_MISSES_ASTC_4TILE"/>593<value value="42" name="PERF_TP_L1_5_L2_COMPRESS_REQS"/>594<value value="43" name="PERF_TP_L1_5_L2_COMPRESS_MISS"/>595<value value="44" name="PERF_TP_L1_BANK_CONFLICT"/>596<value value="45" name="PERF_TP_L1_5_MISS_LATENCY_CYCLES"/>597<value value="46" name="PERF_TP_L1_5_MISS_LATENCY_TRANS"/>598<value value="47" name="PERF_TP_QUADS_CONSTANT_MULTIPLIED"/>599<value value="48" name="PERF_TP_FRONTEND_WORKING_CYCLES"/>600<value value="49" name="PERF_TP_L1_TAG_WORKING_CYCLES"/>601<value value="50" name="PERF_TP_L1_DATA_WRITE_WORKING_CYCLES"/>602<value value="51" name="PERF_TP_PRE_L1_DECOM_WORKING_CYCLES"/>603<value value="52" name="PERF_TP_BACKEND_WORKING_CYCLES"/>604<value value="53" name="PERF_TP_FLAG_CACHE_WORKING_CYCLES"/>605<value value="54" name="PERF_TP_L1_5_CACHE_WORKING_CYCLES"/>606<value value="55" name="PERF_TP_STARVE_CYCLES_SP"/>607<value value="56" name="PERF_TP_STARVE_CYCLES_UCHE"/>608</enum>609610<enum name="a6xx_sp_perfcounter_select">611<value value="0" name="PERF_SP_BUSY_CYCLES"/>612<value value="1" name="PERF_SP_ALU_WORKING_CYCLES"/>613<value value="2" name="PERF_SP_EFU_WORKING_CYCLES"/>614<value value="3" name="PERF_SP_STALL_CYCLES_VPC"/>615<value value="4" name="PERF_SP_STALL_CYCLES_TP"/>616<value value="5" name="PERF_SP_STALL_CYCLES_UCHE"/>617<value value="6" name="PERF_SP_STALL_CYCLES_RB"/>618<value value="7" name="PERF_SP_NON_EXECUTION_CYCLES"/>619<value value="8" name="PERF_SP_WAVE_CONTEXTS"/>620<value value="9" name="PERF_SP_WAVE_CONTEXT_CYCLES"/>621<value value="10" name="PERF_SP_FS_STAGE_WAVE_CYCLES"/>622<value value="11" name="PERF_SP_FS_STAGE_WAVE_SAMPLES"/>623<value value="12" name="PERF_SP_VS_STAGE_WAVE_CYCLES"/>624<value value="13" name="PERF_SP_VS_STAGE_WAVE_SAMPLES"/>625<value value="14" name="PERF_SP_FS_STAGE_DURATION_CYCLES"/>626<value value="15" name="PERF_SP_VS_STAGE_DURATION_CYCLES"/>627<value value="16" name="PERF_SP_WAVE_CTRL_CYCLES"/>628<value value="17" name="PERF_SP_WAVE_LOAD_CYCLES"/>629<value value="18" name="PERF_SP_WAVE_EMIT_CYCLES"/>630<value value="19" name="PERF_SP_WAVE_NOP_CYCLES"/>631<value value="20" name="PERF_SP_WAVE_WAIT_CYCLES"/>632<value value="21" name="PERF_SP_WAVE_FETCH_CYCLES"/>633<value value="22" name="PERF_SP_WAVE_IDLE_CYCLES"/>634<value value="23" name="PERF_SP_WAVE_END_CYCLES"/>635<value value="24" name="PERF_SP_WAVE_LONG_SYNC_CYCLES"/>636<value value="25" name="PERF_SP_WAVE_SHORT_SYNC_CYCLES"/>637<value value="26" name="PERF_SP_WAVE_JOIN_CYCLES"/>638<value value="27" name="PERF_SP_LM_LOAD_INSTRUCTIONS"/>639<value value="28" name="PERF_SP_LM_STORE_INSTRUCTIONS"/>640<value value="29" name="PERF_SP_LM_ATOMICS"/>641<value value="30" name="PERF_SP_GM_LOAD_INSTRUCTIONS"/>642<value value="31" name="PERF_SP_GM_STORE_INSTRUCTIONS"/>643<value value="32" name="PERF_SP_GM_ATOMICS"/>644<value value="33" name="PERF_SP_VS_STAGE_TEX_INSTRUCTIONS"/>645<value value="34" name="PERF_SP_VS_STAGE_EFU_INSTRUCTIONS"/>646<value value="35" name="PERF_SP_VS_STAGE_FULL_ALU_INSTRUCTIONS"/>647<value value="36" name="PERF_SP_VS_STAGE_HALF_ALU_INSTRUCTIONS"/>648<value value="37" name="PERF_SP_FS_STAGE_TEX_INSTRUCTIONS"/>649<value value="38" name="PERF_SP_FS_STAGE_CFLOW_INSTRUCTIONS"/>650<value value="39" name="PERF_SP_FS_STAGE_EFU_INSTRUCTIONS"/>651<value value="40" name="PERF_SP_FS_STAGE_FULL_ALU_INSTRUCTIONS"/>652<value value="41" name="PERF_SP_FS_STAGE_HALF_ALU_INSTRUCTIONS"/>653<value value="42" name="PERF_SP_FS_STAGE_BARY_INSTRUCTIONS"/>654<value value="43" name="PERF_SP_VS_INSTRUCTIONS"/>655<value value="44" name="PERF_SP_FS_INSTRUCTIONS"/>656<value value="45" name="PERF_SP_ADDR_LOCK_COUNT"/>657<value value="46" name="PERF_SP_UCHE_READ_TRANS"/>658<value value="47" name="PERF_SP_UCHE_WRITE_TRANS"/>659<value value="48" name="PERF_SP_EXPORT_VPC_TRANS"/>660<value value="49" name="PERF_SP_EXPORT_RB_TRANS"/>661<value value="50" name="PERF_SP_PIXELS_KILLED"/>662<value value="51" name="PERF_SP_ICL1_REQUESTS"/>663<value value="52" name="PERF_SP_ICL1_MISSES"/>664<value value="53" name="PERF_SP_HS_INSTRUCTIONS"/>665<value value="54" name="PERF_SP_DS_INSTRUCTIONS"/>666<value value="55" name="PERF_SP_GS_INSTRUCTIONS"/>667<value value="56" name="PERF_SP_CS_INSTRUCTIONS"/>668<value value="57" name="PERF_SP_GPR_READ"/>669<value value="58" name="PERF_SP_GPR_WRITE"/>670<value value="59" name="PERF_SP_FS_STAGE_HALF_EFU_INSTRUCTIONS"/>671<value value="60" name="PERF_SP_VS_STAGE_HALF_EFU_INSTRUCTIONS"/>672<value value="61" name="PERF_SP_LM_BANK_CONFLICTS"/>673<value value="62" name="PERF_SP_TEX_CONTROL_WORKING_CYCLES"/>674<value value="63" name="PERF_SP_LOAD_CONTROL_WORKING_CYCLES"/>675<value value="64" name="PERF_SP_FLOW_CONTROL_WORKING_CYCLES"/>676<value value="65" name="PERF_SP_LM_WORKING_CYCLES"/>677<value value="66" name="PERF_SP_DISPATCHER_WORKING_CYCLES"/>678<value value="67" name="PERF_SP_SEQUENCER_WORKING_CYCLES"/>679<value value="68" name="PERF_SP_LOW_EFFICIENCY_STARVED_BY_TP"/>680<value value="69" name="PERF_SP_STARVE_CYCLES_HLSQ"/>681<value value="70" name="PERF_SP_NON_EXECUTION_LS_CYCLES"/>682<value value="71" name="PERF_SP_WORKING_EU"/>683<value value="72" name="PERF_SP_ANY_EU_WORKING"/>684<value value="73" name="PERF_SP_WORKING_EU_FS_STAGE"/>685<value value="74" name="PERF_SP_ANY_EU_WORKING_FS_STAGE"/>686<value value="75" name="PERF_SP_WORKING_EU_VS_STAGE"/>687<value value="76" name="PERF_SP_ANY_EU_WORKING_VS_STAGE"/>688<value value="77" name="PERF_SP_WORKING_EU_CS_STAGE"/>689<value value="78" name="PERF_SP_ANY_EU_WORKING_CS_STAGE"/>690<value value="79" name="PERF_SP_GPR_READ_PREFETCH"/>691<value value="80" name="PERF_SP_GPR_READ_CONFLICT"/>692<value value="81" name="PERF_SP_GPR_WRITE_CONFLICT"/>693<value value="82" name="PERF_SP_GM_LOAD_LATENCY_CYCLES"/>694<value value="83" name="PERF_SP_GM_LOAD_LATENCY_SAMPLES"/>695<value value="84" name="PERF_SP_EXECUTABLE_WAVES"/>696</enum>697698<enum name="a6xx_rb_perfcounter_select">699<value value="0" name="PERF_RB_BUSY_CYCLES"/>700<value value="1" name="PERF_RB_STALL_CYCLES_HLSQ"/>701<value value="2" name="PERF_RB_STALL_CYCLES_FIFO0_FULL"/>702<value value="3" name="PERF_RB_STALL_CYCLES_FIFO1_FULL"/>703<value value="4" name="PERF_RB_STALL_CYCLES_FIFO2_FULL"/>704<value value="5" name="PERF_RB_STARVE_CYCLES_SP"/>705<value value="6" name="PERF_RB_STARVE_CYCLES_LRZ_TILE"/>706<value value="7" name="PERF_RB_STARVE_CYCLES_CCU"/>707<value value="8" name="PERF_RB_STARVE_CYCLES_Z_PLANE"/>708<value value="9" name="PERF_RB_STARVE_CYCLES_BARY_PLANE"/>709<value value="10" name="PERF_RB_Z_WORKLOAD"/>710<value value="11" name="PERF_RB_HLSQ_ACTIVE"/>711<value value="12" name="PERF_RB_Z_READ"/>712<value value="13" name="PERF_RB_Z_WRITE"/>713<value value="14" name="PERF_RB_C_READ"/>714<value value="15" name="PERF_RB_C_WRITE"/>715<value value="16" name="PERF_RB_TOTAL_PASS"/>716<value value="17" name="PERF_RB_Z_PASS"/>717<value value="18" name="PERF_RB_Z_FAIL"/>718<value value="19" name="PERF_RB_S_FAIL"/>719<value value="20" name="PERF_RB_BLENDED_FXP_COMPONENTS"/>720<value value="21" name="PERF_RB_BLENDED_FP16_COMPONENTS"/>721<value value="22" name="PERF_RB_PS_INVOCATIONS"/>722<value value="23" name="PERF_RB_2D_ALIVE_CYCLES"/>723<value value="24" name="PERF_RB_2D_STALL_CYCLES_A2D"/>724<value value="25" name="PERF_RB_2D_STARVE_CYCLES_SRC"/>725<value value="26" name="PERF_RB_2D_STARVE_CYCLES_SP"/>726<value value="27" name="PERF_RB_2D_STARVE_CYCLES_DST"/>727<value value="28" name="PERF_RB_2D_VALID_PIXELS"/>728<value value="29" name="PERF_RB_3D_PIXELS"/>729<value value="30" name="PERF_RB_BLENDER_WORKING_CYCLES"/>730<value value="31" name="PERF_RB_ZPROC_WORKING_CYCLES"/>731<value value="32" name="PERF_RB_CPROC_WORKING_CYCLES"/>732<value value="33" name="PERF_RB_SAMPLER_WORKING_CYCLES"/>733<value value="34" name="PERF_RB_STALL_CYCLES_CCU_COLOR_READ"/>734<value value="35" name="PERF_RB_STALL_CYCLES_CCU_COLOR_WRITE"/>735<value value="36" name="PERF_RB_STALL_CYCLES_CCU_DEPTH_READ"/>736<value value="37" name="PERF_RB_STALL_CYCLES_CCU_DEPTH_WRITE"/>737<value value="38" name="PERF_RB_STALL_CYCLES_VPC"/>738<value value="39" name="PERF_RB_2D_INPUT_TRANS"/>739<value value="40" name="PERF_RB_2D_OUTPUT_RB_DST_TRANS"/>740<value value="41" name="PERF_RB_2D_OUTPUT_RB_SRC_TRANS"/>741<value value="42" name="PERF_RB_BLENDED_FP32_COMPONENTS"/>742<value value="43" name="PERF_RB_COLOR_PIX_TILES"/>743<value value="44" name="PERF_RB_STALL_CYCLES_CCU"/>744<value value="45" name="PERF_RB_EARLY_Z_ARB3_GRANT"/>745<value value="46" name="PERF_RB_LATE_Z_ARB3_GRANT"/>746<value value="47" name="PERF_RB_EARLY_Z_SKIP_GRANT"/>747</enum>748749<enum name="a6xx_vsc_perfcounter_select">750<value value="0" name="PERF_VSC_BUSY_CYCLES"/>751<value value="1" name="PERF_VSC_WORKING_CYCLES"/>752<value value="2" name="PERF_VSC_STALL_CYCLES_UCHE"/>753<value value="3" name="PERF_VSC_EOT_NUM"/>754<value value="4" name="PERF_VSC_INPUT_TILES"/>755</enum>756757<enum name="a6xx_ccu_perfcounter_select">758<value value="0" name="PERF_CCU_BUSY_CYCLES"/>759<value value="1" name="PERF_CCU_STALL_CYCLES_RB_DEPTH_RETURN"/>760<value value="2" name="PERF_CCU_STALL_CYCLES_RB_COLOR_RETURN"/>761<value value="3" name="PERF_CCU_STARVE_CYCLES_FLAG_RETURN"/>762<value value="4" name="PERF_CCU_DEPTH_BLOCKS"/>763<value value="5" name="PERF_CCU_COLOR_BLOCKS"/>764<value value="6" name="PERF_CCU_DEPTH_BLOCK_HIT"/>765<value value="7" name="PERF_CCU_COLOR_BLOCK_HIT"/>766<value value="8" name="PERF_CCU_PARTIAL_BLOCK_READ"/>767<value value="9" name="PERF_CCU_GMEM_READ"/>768<value value="10" name="PERF_CCU_GMEM_WRITE"/>769<value value="11" name="PERF_CCU_DEPTH_READ_FLAG0_COUNT"/>770<value value="12" name="PERF_CCU_DEPTH_READ_FLAG1_COUNT"/>771<value value="13" name="PERF_CCU_DEPTH_READ_FLAG2_COUNT"/>772<value value="14" name="PERF_CCU_DEPTH_READ_FLAG3_COUNT"/>773<value value="15" name="PERF_CCU_DEPTH_READ_FLAG4_COUNT"/>774<value value="16" name="PERF_CCU_DEPTH_READ_FLAG5_COUNT"/>775<value value="17" name="PERF_CCU_DEPTH_READ_FLAG6_COUNT"/>776<value value="18" name="PERF_CCU_DEPTH_READ_FLAG8_COUNT"/>777<value value="19" name="PERF_CCU_COLOR_READ_FLAG0_COUNT"/>778<value value="20" name="PERF_CCU_COLOR_READ_FLAG1_COUNT"/>779<value value="21" name="PERF_CCU_COLOR_READ_FLAG2_COUNT"/>780<value value="22" name="PERF_CCU_COLOR_READ_FLAG3_COUNT"/>781<value value="23" name="PERF_CCU_COLOR_READ_FLAG4_COUNT"/>782<value value="24" name="PERF_CCU_COLOR_READ_FLAG5_COUNT"/>783<value value="25" name="PERF_CCU_COLOR_READ_FLAG6_COUNT"/>784<value value="26" name="PERF_CCU_COLOR_READ_FLAG8_COUNT"/>785<value value="27" name="PERF_CCU_2D_RD_REQ"/>786<value value="28" name="PERF_CCU_2D_WR_REQ"/>787</enum>788789<enum name="a6xx_lrz_perfcounter_select">790<value value="0" name="PERF_LRZ_BUSY_CYCLES"/>791<value value="1" name="PERF_LRZ_STARVE_CYCLES_RAS"/>792<value value="2" name="PERF_LRZ_STALL_CYCLES_RB"/>793<value value="3" name="PERF_LRZ_STALL_CYCLES_VSC"/>794<value value="4" name="PERF_LRZ_STALL_CYCLES_VPC"/>795<value value="5" name="PERF_LRZ_STALL_CYCLES_FLAG_PREFETCH"/>796<value value="6" name="PERF_LRZ_STALL_CYCLES_UCHE"/>797<value value="7" name="PERF_LRZ_LRZ_READ"/>798<value value="8" name="PERF_LRZ_LRZ_WRITE"/>799<value value="9" name="PERF_LRZ_READ_LATENCY"/>800<value value="10" name="PERF_LRZ_MERGE_CACHE_UPDATING"/>801<value value="11" name="PERF_LRZ_PRIM_KILLED_BY_MASKGEN"/>802<value value="12" name="PERF_LRZ_PRIM_KILLED_BY_LRZ"/>803<value value="13" name="PERF_LRZ_VISIBLE_PRIM_AFTER_LRZ"/>804<value value="14" name="PERF_LRZ_FULL_8X8_TILES"/>805<value value="15" name="PERF_LRZ_PARTIAL_8X8_TILES"/>806<value value="16" name="PERF_LRZ_TILE_KILLED"/>807<value value="17" name="PERF_LRZ_TOTAL_PIXEL"/>808<value value="18" name="PERF_LRZ_VISIBLE_PIXEL_AFTER_LRZ"/>809<value value="19" name="PERF_LRZ_FULLY_COVERED_TILES"/>810<value value="20" name="PERF_LRZ_PARTIAL_COVERED_TILES"/>811<value value="21" name="PERF_LRZ_FEEDBACK_ACCEPT"/>812<value value="22" name="PERF_LRZ_FEEDBACK_DISCARD"/>813<value value="23" name="PERF_LRZ_FEEDBACK_STALL"/>814<value value="24" name="PERF_LRZ_STALL_CYCLES_RB_ZPLANE"/>815<value value="25" name="PERF_LRZ_STALL_CYCLES_RB_BPLANE"/>816<value value="26" name="PERF_LRZ_STALL_CYCLES_VC"/>817<value value="27" name="PERF_LRZ_RAS_MASK_TRANS"/>818</enum>819820<enum name="a6xx_cmp_perfcounter_select">821<value value="0" name="PERF_CMPDECMP_STALL_CYCLES_ARB"/>822<value value="1" name="PERF_CMPDECMP_VBIF_LATENCY_CYCLES"/>823<value value="2" name="PERF_CMPDECMP_VBIF_LATENCY_SAMPLES"/>824<value value="3" name="PERF_CMPDECMP_VBIF_READ_DATA_CCU"/>825<value value="4" name="PERF_CMPDECMP_VBIF_WRITE_DATA_CCU"/>826<value value="5" name="PERF_CMPDECMP_VBIF_READ_REQUEST"/>827<value value="6" name="PERF_CMPDECMP_VBIF_WRITE_REQUEST"/>828<value value="7" name="PERF_CMPDECMP_VBIF_READ_DATA"/>829<value value="8" name="PERF_CMPDECMP_VBIF_WRITE_DATA"/>830<value value="9" name="PERF_CMPDECMP_FLAG_FETCH_CYCLES"/>831<value value="10" name="PERF_CMPDECMP_FLAG_FETCH_SAMPLES"/>832<value value="11" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG1_COUNT"/>833<value value="12" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG2_COUNT"/>834<value value="13" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG3_COUNT"/>835<value value="14" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG4_COUNT"/>836<value value="15" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG5_COUNT"/>837<value value="16" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG6_COUNT"/>838<value value="17" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG8_COUNT"/>839<value value="18" name="PERF_CMPDECMP_COLOR_WRITE_FLAG1_COUNT"/>840<value value="19" name="PERF_CMPDECMP_COLOR_WRITE_FLAG2_COUNT"/>841<value value="20" name="PERF_CMPDECMP_COLOR_WRITE_FLAG3_COUNT"/>842<value value="21" name="PERF_CMPDECMP_COLOR_WRITE_FLAG4_COUNT"/>843<value value="22" name="PERF_CMPDECMP_COLOR_WRITE_FLAG5_COUNT"/>844<value value="23" name="PERF_CMPDECMP_COLOR_WRITE_FLAG6_COUNT"/>845<value value="24" name="PERF_CMPDECMP_COLOR_WRITE_FLAG8_COUNT"/>846<value value="25" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_REQ"/>847<value value="26" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_WR"/>848<value value="27" name="PERF_CMPDECMP_2D_STALL_CYCLES_VBIF_RETURN"/>849<value value="28" name="PERF_CMPDECMP_2D_RD_DATA"/>850<value value="29" name="PERF_CMPDECMP_2D_WR_DATA"/>851<value value="30" name="PERF_CMPDECMP_VBIF_READ_DATA_UCHE_CH0"/>852<value value="31" name="PERF_CMPDECMP_VBIF_READ_DATA_UCHE_CH1"/>853<value value="32" name="PERF_CMPDECMP_2D_OUTPUT_TRANS"/>854<value value="33" name="PERF_CMPDECMP_VBIF_WRITE_DATA_UCHE"/>855<value value="34" name="PERF_CMPDECMP_DEPTH_WRITE_FLAG0_COUNT"/>856<value value="35" name="PERF_CMPDECMP_COLOR_WRITE_FLAG0_COUNT"/>857<value value="36" name="PERF_CMPDECMP_COLOR_WRITE_FLAGALPHA_COUNT"/>858<value value="37" name="PERF_CMPDECMP_2D_BUSY_CYCLES"/>859<value value="38" name="PERF_CMPDECMP_2D_REORDER_STARVE_CYCLES"/>860<value value="39" name="PERF_CMPDECMP_2D_PIXELS"/>861</enum>862863<!--864Used in a6xx_2d_blit_cntl.. the value mostly seems to correlate to the865component type/size, so I think it relates to internal format used for866blending? The one exception is that 16b unorm and 32b float use the867same value... maybe 16b unorm is uncommon enough that it was just easier868to upconvert to 32b float internally?8698708b unorm: 10 (sometimes 0, is the high bit part of something else?)87116b unorm: 487287332b int: 787416b int: 68758b int: 587687732b float: 487816b float: 3879-->880<enum name="a6xx_2d_ifmt">881<value value="0x10" name="R2D_UNORM8"/>882<value value="0x7" name="R2D_INT32"/>883<value value="0x6" name="R2D_INT16"/>884<value value="0x5" name="R2D_INT8"/>885<value value="0x4" name="R2D_FLOAT32"/>886<value value="0x3" name="R2D_FLOAT16"/>887<value value="0x1" name="R2D_UNORM8_SRGB"/>888<value value="0x0" name="R2D_RAW"/>889</enum>890891<enum name="a6xx_ztest_mode">892<doc>Allow early z-test and early-lrz (if applicable)</doc>893<value value="0x0" name="A6XX_EARLY_Z"/>894<doc>Disable early z-test and early-lrz test (if applicable)</doc>895<value value="0x1" name="A6XX_LATE_Z"/>896<doc>897A special mode that allows early-lrz test but disables898early-z test. Which might sound a bit funny, since899lrz-test happens before z-test. But as long as a couple900conditions are maintained this allows using lrz-test in901cases where fragment shader has kill/discard:9029031) Disable lrz-write in cases where it is uncertain during904binning pass that a fragment will pass. Ie. if frag905shader has-kill, writes-z, or alpha/stencil test is906enabled. (For correctness, lrz-write must be disabled907when blend is enabled.) This is analogous to how a908z-prepass works.9099102) Disable lrz-write and test if a depth-test direction911reversal is detected. Due to condition (1), the contents912of the lrz buffer are a conservative estimation of the913depth buffer during the draw pass. Meaning that geometry914that we know for certain will not be visible will not pass915lrz-test. But geometry which may be (or contributes to916blend) will pass the lrz-test.917918This allows us to keep early-lrz-test in cases where the frag919shader does not write-z (ie. we know the z-value before FS)920and does not have side-effects (image/ssbo writes, etc), but921does have kill/discard. Which turns out to be a common922enough case that it is useful to keep early-lrz test against923the conservative lrz buffer to discard fragments that we924know will definitely not be visible.925</doc>926<value value="0x2" name="A6XX_EARLY_LRZ_LATE_Z"/>927</enum>928929<domain name="A6XX" width="32">930<bitset name="A6XX_RBBM_INT_0_MASK" inline="no">931<bitfield name="RBBM_GPU_IDLE" pos="0" type="boolean"/>932<bitfield name="CP_AHB_ERROR" pos="1" type="boolean"/>933<bitfield name="RBBM_ATB_ASYNCFIFO_OVERFLOW" pos="6" type="boolean"/>934<bitfield name="RBBM_GPC_ERROR" pos="7" type="boolean"/>935<bitfield name="CP_SW" pos="8" type="boolean"/>936<bitfield name="CP_HW_ERROR" pos="9" type="boolean"/>937<bitfield name="CP_CCU_FLUSH_DEPTH_TS" pos="10" type="boolean"/>938<bitfield name="CP_CCU_FLUSH_COLOR_TS" pos="11" type="boolean"/>939<bitfield name="CP_CCU_RESOLVE_TS" pos="12" type="boolean"/>940<bitfield name="CP_IB2" pos="13" type="boolean"/>941<bitfield name="CP_IB1" pos="14" type="boolean"/>942<bitfield name="CP_RB" pos="15" type="boolean"/>943<bitfield name="CP_RB_DONE_TS" pos="17" type="boolean"/>944<bitfield name="CP_WT_DONE_TS" pos="18" type="boolean"/>945<bitfield name="CP_CACHE_FLUSH_TS" pos="20" type="boolean"/>946<bitfield name="RBBM_ATB_BUS_OVERFLOW" pos="22" type="boolean"/>947<bitfield name="RBBM_HANG_DETECT" pos="23" type="boolean"/>948<bitfield name="UCHE_OOB_ACCESS" pos="24" type="boolean"/>949<bitfield name="UCHE_TRAP_INTR" pos="25" type="boolean"/>950<bitfield name="DEBBUS_INTR_0" pos="26" type="boolean"/>951<bitfield name="DEBBUS_INTR_1" pos="27" type="boolean"/>952<bitfield name="ISDB_CPU_IRQ" pos="30" type="boolean"/>953<bitfield name="ISDB_UNDER_DEBUG" pos="31" type="boolean"/>954</bitset>955956<bitset name="A6XX_CP_INT">957<bitfield name="CP_OPCODE_ERROR" pos="0" type="boolean"/>958<bitfield name="CP_UCODE_ERROR" pos="1" type="boolean"/>959<bitfield name="CP_HW_FAULT_ERROR" pos="2" type="boolean"/>960<bitfield name="CP_REGISTER_PROTECTION_ERROR" pos="4" type="boolean"/>961<bitfield name="CP_AHB_ERROR" pos="5" type="boolean"/>962<bitfield name="CP_VSD_PARITY_ERROR" pos="6" type="boolean"/>963<bitfield name="CP_ILLEGAL_INSTR_ERROR" pos="7" type="boolean"/>964</bitset>965966<reg32 offset="0x0800" name="CP_RB_BASE"/>967<reg32 offset="0x0801" name="CP_RB_BASE_HI"/>968<reg32 offset="0x0802" name="CP_RB_CNTL"/>969<reg32 offset="0x0804" name="CP_RB_RPTR_ADDR_LO"/>970<reg32 offset="0x0805" name="CP_RB_RPTR_ADDR_HI"/>971<reg32 offset="0x0806" name="CP_RB_RPTR"/>972<reg32 offset="0x0807" name="CP_RB_WPTR"/>973<reg32 offset="0x0808" name="CP_SQE_CNTL"/>974<reg32 offset="0x0812" name="CP_CP2GMU_STATUS">975<bitfield name="IFPC" pos="0" type="boolean"/>976</reg32>977<reg32 offset="0x0821" name="CP_HW_FAULT"/>978<reg32 offset="0x0823" name="CP_INTERRUPT_STATUS"/>979<reg32 offset="0x0824" name="CP_PROTECT_STATUS"/>980<reg64 offset="0x0830" name="CP_SQE_INSTR_BASE"/>981<reg32 offset="0x0840" name="CP_MISC_CNTL"/>982<reg32 offset="0x0844" name="CP_APRIV_CNTL"/>983<!-- all the threshold values seem to be in units of quad-dwords: -->984<reg32 offset="0x08C1" name="CP_ROQ_THRESHOLDS_1">985<doc>986b0..7 seems to contain the size of buffered by not yet processed987RB level cmdstream.. it's possible that it is a low threshold988and b8..15 is a high threshold?989990b16..23 identifies where IB1 data starts (and RB data ends?)991992b24..31 identifies where IB2 data starts (and IB1 data ends)993</doc>994<bitfield name="RB_LO" low="0" high="7" shr="2"/>995<bitfield name="RB_HI" low="8" high="15" shr="2"/>996<bitfield name="IB1_START" low="16" high="23" shr="2"/>997<bitfield name="IB2_START" low="24" high="31" shr="2"/>998</reg32>999<reg32 offset="0x08C2" name="CP_ROQ_THRESHOLDS_2">1000<doc>1001low bits identify where CP_SET_DRAW_STATE stateobj1002processing starts (and IB2 data ends). I'm guessing1003b8 is part of this since (from downstream kgsl):10041005/* ROQ sizes are twice as big on a640/a680 than on a630 */1006if (adreno_is_a640(adreno_dev) || adreno_is_a680(adreno_dev)) {1007kgsl_regwrite(device, A6XX_CP_ROQ_THRESHOLDS_2, 0x02000140);1008kgsl_regwrite(device, A6XX_CP_ROQ_THRESHOLDS_1, 0x8040362C);1009} ...1010</doc>1011<bitfield name="SDS_START" low="0" high="8" shr="2"/>1012<!-- total ROQ size: -->1013<bitfield name="ROQ_SIZE" low="16" high="31" shr="2"/>1014</reg32>1015<reg32 offset="0x08C3" name="CP_MEM_POOL_SIZE"/>1016<reg32 offset="0x0841" name="CP_CHICKEN_DBG"/>1017<reg32 offset="0x0842" name="CP_ADDR_MODE_CNTL" type="a5xx_address_mode"/>1018<reg32 offset="0x0843" name="CP_DBG_ECO_CNTL"/>1019<reg32 offset="0x084F" name="CP_PROTECT_CNTL"/>10201021<array offset="0x0883" name="CP_SCRATCH" stride="1" length="8">1022<reg32 offset="0x0" name="REG" type="uint"/>1023</array>1024<array offset="0x0850" name="CP_PROTECT" stride="1" length="32">1025<reg32 offset="0x0" name="REG" type="a6x_cp_protect"/>1026</array>10271028<reg32 offset="0x08A0" name="CP_CONTEXT_SWITCH_CNTL"/>1029<reg32 offset="0x08A1" name="CP_CONTEXT_SWITCH_SMMU_INFO_LO"/>1030<reg32 offset="0x08A2" name="CP_CONTEXT_SWITCH_SMMU_INFO_HI"/>1031<reg32 offset="0x08A3" name="CP_CONTEXT_SWITCH_PRIV_NON_SECURE_RESTORE_ADDR_LO"/>1032<reg32 offset="0x08A4" name="CP_CONTEXT_SWITCH_PRIV_NON_SECURE_RESTORE_ADDR_HI"/>1033<reg32 offset="0x08A5" name="CP_CONTEXT_SWITCH_PRIV_SECURE_RESTORE_ADDR_LO"/>1034<reg32 offset="0x08A6" name="CP_CONTEXT_SWITCH_PRIV_SECURE_RESTORE_ADDR_HI"/>1035<reg32 offset="0x08A7" name="CP_CONTEXT_SWITCH_NON_PRIV_RESTORE_ADDR_LO"/>1036<reg32 offset="0x08A8" name="CP_CONTEXT_SWITCH_NON_PRIV_RESTORE_ADDR_HI"/>1037<array offset="0x08D0" name="CP_PERFCTR_CP_SEL" stride="1" length="14"/>1038<reg32 offset="0x0900" name="CP_CRASH_SCRIPT_BASE_LO"/>1039<reg32 offset="0x0901" name="CP_CRASH_SCRIPT_BASE_HI"/>1040<reg32 offset="0x0902" name="CP_CRASH_DUMP_CNTL"/>1041<reg32 offset="0x0903" name="CP_CRASH_DUMP_STATUS"/>1042<reg32 offset="0x0908" name="CP_SQE_STAT_ADDR"/>1043<reg32 offset="0x0909" name="CP_SQE_STAT_DATA"/>1044<reg32 offset="0x090A" name="CP_DRAW_STATE_ADDR"/>1045<reg32 offset="0x090B" name="CP_DRAW_STATE_DATA"/>1046<reg32 offset="0x090C" name="CP_ROQ_DBG_ADDR"/>1047<reg32 offset="0x090D" name="CP_ROQ_DBG_DATA"/>1048<reg32 offset="0x090E" name="CP_MEM_POOL_DBG_ADDR"/>1049<reg32 offset="0x090F" name="CP_MEM_POOL_DBG_DATA"/>1050<reg32 offset="0x0910" name="CP_SQE_UCODE_DBG_ADDR"/>1051<reg32 offset="0x0911" name="CP_SQE_UCODE_DBG_DATA"/>1052<reg32 offset="0x0928" name="CP_IB1_BASE"/>1053<reg32 offset="0x0929" name="CP_IB1_BASE_HI"/>1054<reg32 offset="0x092A" name="CP_IB1_REM_SIZE"/>1055<reg32 offset="0x092B" name="CP_IB2_BASE"/>1056<reg32 offset="0x092C" name="CP_IB2_BASE_HI"/>1057<reg32 offset="0x092D" name="CP_IB2_REM_SIZE"/>1058<!-- SDS == CP_SET_DRAW_STATE: -->1059<reg32 offset="0x092e" name="CP_SDS_BASE"/>1060<reg32 offset="0x092f" name="CP_SDS_BASE_HI"/>1061<reg32 offset="0x0930" name="CP_SDS_REM_SIZE"/>1062<!-- MRB == MEM_READ_ADDR/$addr in SQE firmware -->1063<reg32 offset="0x0931" name="CP_MRB_BASE"/>1064<reg32 offset="0x0932" name="CP_MRB_BASE_HI"/>1065<reg32 offset="0x0933" name="CP_MRB_REM_SIZE"/>1066<!--1067VSD == Visibility Stream Decode1068This is used by CP to read the draw stream and skip empty draws1069-->1070<reg32 offset="0x0934" name="CP_VSD_BASE"/>1071<reg32 offset="0x0935" name="CP_VSD_BASE_HI"/>1072<reg32 offset="0x0946" name="CP_MRB_DWORDS"/>1073<reg32 offset="0x0947" name="CP_VSD_DWORDS"/>1074<!--1075There are probably similar registers for RB and SDS, teasing out SDS will1076take a slightly better test case..1077-->1078<reg32 offset="0x0949" name="CP_CSQ_IB1_STAT">1079<doc>number of remaining dwords incl current dword being consumed?</doc>1080<bitfield name="REM" low="16" high="31"/>1081</reg32>1082<reg32 offset="0x094a" name="CP_CSQ_IB2_STAT">1083<doc>number of remaining dwords incl current dword being consumed?</doc>1084<bitfield name="REM" low="16" high="31"/>1085</reg32>1086<reg32 offset="0x094c" name="CP_MRQ_MRB_STAT">1087<doc>number of dwords that have already been read but haven't been consumed by $addr</doc>1088<bitfield name="REM" low="16" high="31"/>1089</reg32>1090<reg32 offset="0x0980" name="CP_ALWAYS_ON_COUNTER_LO"/>1091<reg32 offset="0x0981" name="CP_ALWAYS_ON_COUNTER_HI"/>1092<reg32 offset="0x098D" name="CP_AHB_CNTL"/>1093<reg32 offset="0x0A00" name="CP_APERTURE_CNTL_HOST"/>1094<reg32 offset="0x0A03" name="CP_APERTURE_CNTL_CD"/>1095<reg32 offset="0x0B34" name="CP_LPAC_PROG_FIFO_SIZE"/>1096<reg64 offset="0x0b82" name="CP_LPAC_SQE_INSTR_BASE"/>1097<reg32 offset="0x0C01" name="VSC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>1098<reg32 offset="0x0201" name="RBBM_INT_0_STATUS" type="A6XX_RBBM_INT_0_MASK"/>1099<reg32 offset="0x0210" name="RBBM_STATUS">1100<bitfield pos="23" name="GPU_BUSY_IGN_AHB" type="boolean"/>1101<bitfield pos="22" name="GPU_BUSY_IGN_AHB_CP" type="boolean"/>1102<bitfield pos="21" name="HLSQ_BUSY" type="boolean"/>1103<bitfield pos="20" name="VSC_BUSY" type="boolean"/>1104<bitfield pos="19" name="TPL1_BUSY" type="boolean"/>1105<bitfield pos="18" name="SP_BUSY" type="boolean"/>1106<bitfield pos="17" name="UCHE_BUSY" type="boolean"/>1107<bitfield pos="16" name="VPC_BUSY" type="boolean"/>1108<bitfield pos="15" name="VFD_BUSY" type="boolean"/>1109<bitfield pos="14" name="TESS_BUSY" type="boolean"/>1110<bitfield pos="13" name="PC_VSD_BUSY" type="boolean"/>1111<bitfield pos="12" name="PC_DCALL_BUSY" type="boolean"/>1112<bitfield pos="11" name="COM_DCOM_BUSY" type="boolean"/>1113<bitfield pos="10" name="LRZ_BUSY" type="boolean"/>1114<bitfield pos="9" name="A2D_BUSY" type="boolean"/>1115<bitfield pos="8" name="CCU_BUSY" type="boolean"/>1116<bitfield pos="7" name="RB_BUSY" type="boolean"/>1117<bitfield pos="6" name="RAS_BUSY" type="boolean"/>1118<bitfield pos="5" name="TSE_BUSY" type="boolean"/>1119<bitfield pos="4" name="VBIF_BUSY" type="boolean"/>1120<bitfield pos="3" name="GFX_DBGC_BUSY" type="boolean"/>1121<bitfield pos="2" name="CP_BUSY" type="boolean"/>1122<bitfield pos="1" name="CP_AHB_BUSY_CP_MASTER" type="boolean"/>1123<bitfield pos="0" name="CP_AHB_BUSY_CX_MASTER" type="boolean"/>1124</reg32>1125<reg32 offset="0x0213" name="RBBM_STATUS3">1126<bitfield pos="24" name="SMMU_STALLED_ON_FAULT" type="boolean"/>1127</reg32>1128<reg32 offset="0x0215" name="RBBM_VBIF_GX_RESET_STATUS"/>1129<array offset="0x0400" name="RBBM_PERFCTR_CP" stride="2" length="14"/>1130<array offset="0x041c" name="RBBM_PERFCTR_RBBM" stride="2" length="4"/>1131<array offset="0x0424" name="RBBM_PERFCTR_PC" stride="2" length="8"/>1132<array offset="0x0434" name="RBBM_PERFCTR_VFD" stride="2" length="8"/>1133<array offset="0x0444" name="RBBM_PERFCTR_HLSQ" stride="2" length="6"/>1134<array offset="0x0450" name="RBBM_PERFCTR_VPC" stride="2" length="6"/>1135<array offset="0x045c" name="RBBM_PERFCTR_CCU" stride="2" length="5"/>1136<array offset="0x0466" name="RBBM_PERFCTR_TSE" stride="2" length="4"/>1137<array offset="0x046e" name="RBBM_PERFCTR_RAS" stride="2" length="4"/>1138<array offset="0x0476" name="RBBM_PERFCTR_UCHE" stride="2" length="12"/>1139<array offset="0x048e" name="RBBM_PERFCTR_TP" stride="2" length="12"/>1140<array offset="0x04a6" name="RBBM_PERFCTR_SP" stride="2" length="24"/>1141<array offset="0x04d6" name="RBBM_PERFCTR_RB" stride="2" length="8"/>1142<array offset="0x04e6" name="RBBM_PERFCTR_VSC" stride="2" length="2"/>1143<array offset="0x04ea" name="RBBM_PERFCTR_LRZ" stride="2" length="4"/>1144<array offset="0x04f2" name="RBBM_PERFCTR_CMP" stride="2" length="4"/>1145<reg32 offset="0x0500" name="RBBM_PERFCTR_CNTL"/>1146<reg32 offset="0x0501" name="RBBM_PERFCTR_LOAD_CMD0"/>1147<reg32 offset="0x0502" name="RBBM_PERFCTR_LOAD_CMD1"/>1148<reg32 offset="0x0503" name="RBBM_PERFCTR_LOAD_CMD2"/>1149<reg32 offset="0x0504" name="RBBM_PERFCTR_LOAD_CMD3"/>1150<reg32 offset="0x0505" name="RBBM_PERFCTR_LOAD_VALUE_LO"/>1151<reg32 offset="0x0506" name="RBBM_PERFCTR_LOAD_VALUE_HI"/>1152<array offset="0x0507" name="RBBM_PERFCTR_RBBM_SEL" stride="1" length="4"/>1153<reg32 offset="0x050B" name="RBBM_PERFCTR_GPU_BUSY_MASKED"/>1154<reg32 offset="0x0533" name="RBBM_ISDB_CNT"/>11551156<!---1157This block of registers aren't tied to perf counters. They1158count various geometry stats, for example number of1159vertices in, number of primnitives assembled etc.1160-->11611162<reg32 offset="0x0540" name="RBBM_PRIMCTR_0_LO"/> <!-- vs vertices in -->1163<reg32 offset="0x0541" name="RBBM_PRIMCTR_0_HI"/>1164<reg32 offset="0x0542" name="RBBM_PRIMCTR_1_LO"/> <!-- vs primitives out -->1165<reg32 offset="0x0543" name="RBBM_PRIMCTR_1_HI"/>1166<reg32 offset="0x0544" name="RBBM_PRIMCTR_2_LO"/> <!-- hs vertices in -->1167<reg32 offset="0x0545" name="RBBM_PRIMCTR_2_HI"/>1168<reg32 offset="0x0546" name="RBBM_PRIMCTR_3_LO"/> <!-- hs patches out -->1169<reg32 offset="0x0547" name="RBBM_PRIMCTR_3_HI"/>1170<reg32 offset="0x0548" name="RBBM_PRIMCTR_4_LO"/> <!-- dss vertices in -->1171<reg32 offset="0x0549" name="RBBM_PRIMCTR_4_HI"/>1172<reg32 offset="0x054a" name="RBBM_PRIMCTR_5_LO"/> <!-- ds primitives out -->1173<reg32 offset="0x054b" name="RBBM_PRIMCTR_5_HI"/>1174<reg32 offset="0x054c" name="RBBM_PRIMCTR_6_LO"/> <!-- gs primitives in -->1175<reg32 offset="0x054d" name="RBBM_PRIMCTR_6_HI"/>1176<reg32 offset="0x054e" name="RBBM_PRIMCTR_7_LO"/> <!-- gs primitives out -->1177<reg32 offset="0x054f" name="RBBM_PRIMCTR_7_HI"/>1178<reg32 offset="0x0550" name="RBBM_PRIMCTR_8_LO"/> <!-- gs primitives out -->1179<reg32 offset="0x0551" name="RBBM_PRIMCTR_8_HI"/>1180<reg32 offset="0x0552" name="RBBM_PRIMCTR_9_LO"/> <!-- raster primitives in -->1181<reg32 offset="0x0553" name="RBBM_PRIMCTR_9_HI"/>1182<reg32 offset="0x0554" name="RBBM_PRIMCTR_10_LO"/>1183<reg32 offset="0x0555" name="RBBM_PRIMCTR_10_HI"/>11841185<reg32 offset="0xF400" name="RBBM_SECVID_TRUST_CNTL"/>1186<reg32 offset="0xF800" name="RBBM_SECVID_TSB_TRUSTED_BASE_LO"/>1187<reg32 offset="0xF801" name="RBBM_SECVID_TSB_TRUSTED_BASE_HI"/>1188<reg32 offset="0xF802" name="RBBM_SECVID_TSB_TRUSTED_SIZE"/>1189<reg32 offset="0xF803" name="RBBM_SECVID_TSB_CNTL"/>1190<reg32 offset="0xF810" name="RBBM_SECVID_TSB_ADDR_MODE_CNTL" type="a5xx_address_mode"/>1191<reg32 offset="0x00010" name="RBBM_VBIF_CLIENT_QOS_CNTL"/>1192<reg32 offset="0x00011" name="RBBM_GBIF_CLIENT_QOS_CNTL"/>1193<reg32 offset="0x0001c" name="RBBM_WAIT_FOR_GPU_IDLE_CMD">1194<bitfield pos="0" name="WAIT_GPU_IDLE" type="boolean"/>1195</reg32>1196<reg32 offset="0x0001f" name="RBBM_INTERFACE_HANG_INT_CNTL"/>1197<reg32 offset="0x00037" name="RBBM_INT_CLEAR_CMD" type="A6XX_RBBM_INT_0_MASK"/>1198<reg32 offset="0x00038" name="RBBM_INT_0_MASK"/>1199<reg32 offset="0x00042" name="RBBM_SP_HYST_CNT"/>1200<reg32 offset="0x00043" name="RBBM_SW_RESET_CMD"/>1201<reg32 offset="0x00044" name="RBBM_RAC_THRESHOLD_CNT"/>1202<reg32 offset="0x00045" name="RBBM_BLOCK_SW_RESET_CMD"/>1203<reg32 offset="0x00046" name="RBBM_BLOCK_SW_RESET_CMD2"/>1204<reg32 offset="0x000ae" name="RBBM_CLOCK_CNTL"/>1205<reg32 offset="0x000b0" name="RBBM_CLOCK_CNTL_SP0"/>1206<reg32 offset="0x000b1" name="RBBM_CLOCK_CNTL_SP1"/>1207<reg32 offset="0x000b2" name="RBBM_CLOCK_CNTL_SP2"/>1208<reg32 offset="0x000b3" name="RBBM_CLOCK_CNTL_SP3"/>1209<reg32 offset="0x000b4" name="RBBM_CLOCK_CNTL2_SP0"/>1210<reg32 offset="0x000b5" name="RBBM_CLOCK_CNTL2_SP1"/>1211<reg32 offset="0x000b6" name="RBBM_CLOCK_CNTL2_SP2"/>1212<reg32 offset="0x000b7" name="RBBM_CLOCK_CNTL2_SP3"/>1213<reg32 offset="0x000b8" name="RBBM_CLOCK_DELAY_SP0"/>1214<reg32 offset="0x000b9" name="RBBM_CLOCK_DELAY_SP1"/>1215<reg32 offset="0x000ba" name="RBBM_CLOCK_DELAY_SP2"/>1216<reg32 offset="0x000bb" name="RBBM_CLOCK_DELAY_SP3"/>1217<reg32 offset="0x000bc" name="RBBM_CLOCK_HYST_SP0"/>1218<reg32 offset="0x000bd" name="RBBM_CLOCK_HYST_SP1"/>1219<reg32 offset="0x000be" name="RBBM_CLOCK_HYST_SP2"/>1220<reg32 offset="0x000bf" name="RBBM_CLOCK_HYST_SP3"/>1221<reg32 offset="0x000c0" name="RBBM_CLOCK_CNTL_TP0"/>1222<reg32 offset="0x000c1" name="RBBM_CLOCK_CNTL_TP1"/>1223<reg32 offset="0x000c2" name="RBBM_CLOCK_CNTL_TP2"/>1224<reg32 offset="0x000c3" name="RBBM_CLOCK_CNTL_TP3"/>1225<reg32 offset="0x000c4" name="RBBM_CLOCK_CNTL2_TP0"/>1226<reg32 offset="0x000c5" name="RBBM_CLOCK_CNTL2_TP1"/>1227<reg32 offset="0x000c6" name="RBBM_CLOCK_CNTL2_TP2"/>1228<reg32 offset="0x000c7" name="RBBM_CLOCK_CNTL2_TP3"/>1229<reg32 offset="0x000c8" name="RBBM_CLOCK_CNTL3_TP0"/>1230<reg32 offset="0x000c9" name="RBBM_CLOCK_CNTL3_TP1"/>1231<reg32 offset="0x000ca" name="RBBM_CLOCK_CNTL3_TP2"/>1232<reg32 offset="0x000cb" name="RBBM_CLOCK_CNTL3_TP3"/>1233<reg32 offset="0x000cc" name="RBBM_CLOCK_CNTL4_TP0"/>1234<reg32 offset="0x000cd" name="RBBM_CLOCK_CNTL4_TP1"/>1235<reg32 offset="0x000ce" name="RBBM_CLOCK_CNTL4_TP2"/>1236<reg32 offset="0x000cf" name="RBBM_CLOCK_CNTL4_TP3"/>1237<reg32 offset="0x000d0" name="RBBM_CLOCK_DELAY_TP0"/>1238<reg32 offset="0x000d1" name="RBBM_CLOCK_DELAY_TP1"/>1239<reg32 offset="0x000d2" name="RBBM_CLOCK_DELAY_TP2"/>1240<reg32 offset="0x000d3" name="RBBM_CLOCK_DELAY_TP3"/>1241<reg32 offset="0x000d4" name="RBBM_CLOCK_DELAY2_TP0"/>1242<reg32 offset="0x000d5" name="RBBM_CLOCK_DELAY2_TP1"/>1243<reg32 offset="0x000d6" name="RBBM_CLOCK_DELAY2_TP2"/>1244<reg32 offset="0x000d7" name="RBBM_CLOCK_DELAY2_TP3"/>1245<reg32 offset="0x000d8" name="RBBM_CLOCK_DELAY3_TP0"/>1246<reg32 offset="0x000d9" name="RBBM_CLOCK_DELAY3_TP1"/>1247<reg32 offset="0x000da" name="RBBM_CLOCK_DELAY3_TP2"/>1248<reg32 offset="0x000db" name="RBBM_CLOCK_DELAY3_TP3"/>1249<reg32 offset="0x000dc" name="RBBM_CLOCK_DELAY4_TP0"/>1250<reg32 offset="0x000dd" name="RBBM_CLOCK_DELAY4_TP1"/>1251<reg32 offset="0x000de" name="RBBM_CLOCK_DELAY4_TP2"/>1252<reg32 offset="0x000df" name="RBBM_CLOCK_DELAY4_TP3"/>1253<reg32 offset="0x000e0" name="RBBM_CLOCK_HYST_TP0"/>1254<reg32 offset="0x000e1" name="RBBM_CLOCK_HYST_TP1"/>1255<reg32 offset="0x000e2" name="RBBM_CLOCK_HYST_TP2"/>1256<reg32 offset="0x000e3" name="RBBM_CLOCK_HYST_TP3"/>1257<reg32 offset="0x000e4" name="RBBM_CLOCK_HYST2_TP0"/>1258<reg32 offset="0x000e5" name="RBBM_CLOCK_HYST2_TP1"/>1259<reg32 offset="0x000e6" name="RBBM_CLOCK_HYST2_TP2"/>1260<reg32 offset="0x000e7" name="RBBM_CLOCK_HYST2_TP3"/>1261<reg32 offset="0x000e8" name="RBBM_CLOCK_HYST3_TP0"/>1262<reg32 offset="0x000e9" name="RBBM_CLOCK_HYST3_TP1"/>1263<reg32 offset="0x000ea" name="RBBM_CLOCK_HYST3_TP2"/>1264<reg32 offset="0x000eb" name="RBBM_CLOCK_HYST3_TP3"/>1265<reg32 offset="0x000ec" name="RBBM_CLOCK_HYST4_TP0"/>1266<reg32 offset="0x000ed" name="RBBM_CLOCK_HYST4_TP1"/>1267<reg32 offset="0x000ee" name="RBBM_CLOCK_HYST4_TP2"/>1268<reg32 offset="0x000ef" name="RBBM_CLOCK_HYST4_TP3"/>1269<reg32 offset="0x000f0" name="RBBM_CLOCK_CNTL_RB0"/>1270<reg32 offset="0x000f1" name="RBBM_CLOCK_CNTL_RB1"/>1271<reg32 offset="0x000f2" name="RBBM_CLOCK_CNTL_RB2"/>1272<reg32 offset="0x000f3" name="RBBM_CLOCK_CNTL_RB3"/>1273<reg32 offset="0x000f4" name="RBBM_CLOCK_CNTL2_RB0"/>1274<reg32 offset="0x000f5" name="RBBM_CLOCK_CNTL2_RB1"/>1275<reg32 offset="0x000f6" name="RBBM_CLOCK_CNTL2_RB2"/>1276<reg32 offset="0x000f7" name="RBBM_CLOCK_CNTL2_RB3"/>1277<reg32 offset="0x000f8" name="RBBM_CLOCK_CNTL_CCU0"/>1278<reg32 offset="0x000f9" name="RBBM_CLOCK_CNTL_CCU1"/>1279<reg32 offset="0x000fa" name="RBBM_CLOCK_CNTL_CCU2"/>1280<reg32 offset="0x000fb" name="RBBM_CLOCK_CNTL_CCU3"/>1281<reg32 offset="0x00100" name="RBBM_CLOCK_HYST_RB_CCU0"/>1282<reg32 offset="0x00101" name="RBBM_CLOCK_HYST_RB_CCU1"/>1283<reg32 offset="0x00102" name="RBBM_CLOCK_HYST_RB_CCU2"/>1284<reg32 offset="0x00103" name="RBBM_CLOCK_HYST_RB_CCU3"/>1285<reg32 offset="0x00104" name="RBBM_CLOCK_CNTL_RAC"/>1286<reg32 offset="0x00105" name="RBBM_CLOCK_CNTL2_RAC"/>1287<reg32 offset="0x00106" name="RBBM_CLOCK_DELAY_RAC"/>1288<reg32 offset="0x00107" name="RBBM_CLOCK_HYST_RAC"/>1289<reg32 offset="0x00108" name="RBBM_CLOCK_CNTL_TSE_RAS_RBBM"/>1290<reg32 offset="0x00109" name="RBBM_CLOCK_DELAY_TSE_RAS_RBBM"/>1291<reg32 offset="0x0010a" name="RBBM_CLOCK_HYST_TSE_RAS_RBBM"/>1292<reg32 offset="0x0010b" name="RBBM_CLOCK_CNTL_UCHE"/>1293<reg32 offset="0x0010c" name="RBBM_CLOCK_CNTL2_UCHE"/>1294<reg32 offset="0x0010d" name="RBBM_CLOCK_CNTL3_UCHE"/>1295<reg32 offset="0x0010e" name="RBBM_CLOCK_CNTL4_UCHE"/>1296<reg32 offset="0x0010f" name="RBBM_CLOCK_DELAY_UCHE"/>1297<reg32 offset="0x00110" name="RBBM_CLOCK_HYST_UCHE"/>1298<reg32 offset="0x00111" name="RBBM_CLOCK_MODE_VFD"/>1299<reg32 offset="0x00112" name="RBBM_CLOCK_DELAY_VFD"/>1300<reg32 offset="0x00113" name="RBBM_CLOCK_HYST_VFD"/>1301<reg32 offset="0x00114" name="RBBM_CLOCK_MODE_GPC"/>1302<reg32 offset="0x00115" name="RBBM_CLOCK_DELAY_GPC"/>1303<reg32 offset="0x00116" name="RBBM_CLOCK_HYST_GPC"/>1304<reg32 offset="0x00117" name="RBBM_CLOCK_DELAY_HLSQ_2"/>1305<reg32 offset="0x00118" name="RBBM_CLOCK_CNTL_GMU_GX"/>1306<reg32 offset="0x00119" name="RBBM_CLOCK_DELAY_GMU_GX"/>1307<reg32 offset="0x0011a" name="RBBM_CLOCK_HYST_GMU_GX"/>1308<reg32 offset="0x0011b" name="RBBM_CLOCK_MODE_HLSQ"/>1309<reg32 offset="0x0011c" name="RBBM_CLOCK_DELAY_HLSQ"/>1310<reg32 offset="0x0011d" name="RBBM_CLOCK_HYST_HLSQ"/>1311<reg32 offset="0x00120" name="RBBM_CLOCK_CNTL_TEX_FCHE"/>1312<reg32 offset="0x00121" name="RBBM_CLOCK_DELAY_TEX_FCHE"/>1313<reg32 offset="0x00122" name="RBBM_CLOCK_HYST_TEX_FCHE"/>13141315<reg32 offset="0x0600" name="DBGC_CFG_DBGBUS_SEL_A"/>1316<reg32 offset="0x0601" name="DBGC_CFG_DBGBUS_SEL_B"/>1317<reg32 offset="0x0602" name="DBGC_CFG_DBGBUS_SEL_C"/>1318<reg32 offset="0x0603" name="DBGC_CFG_DBGBUS_SEL_D">1319<bitfield high="7" low="0" name="PING_INDEX"/>1320<bitfield high="15" low="8" name="PING_BLK_SEL"/>1321</reg32>1322<reg32 offset="0x0604" name="DBGC_CFG_DBGBUS_CNTLT">1323<bitfield high="5" low="0" name="TRACEEN"/>1324<bitfield high="14" low="12" name="GRANU"/>1325<bitfield high="31" low="28" name="SEGT"/>1326</reg32>1327<reg32 offset="0x0605" name="DBGC_CFG_DBGBUS_CNTLM">1328<bitfield high="27" low="24" name="ENABLE"/>1329</reg32>1330<reg32 offset="0x0608" name="DBGC_CFG_DBGBUS_IVTL_0"/>1331<reg32 offset="0x0609" name="DBGC_CFG_DBGBUS_IVTL_1"/>1332<reg32 offset="0x060a" name="DBGC_CFG_DBGBUS_IVTL_2"/>1333<reg32 offset="0x060b" name="DBGC_CFG_DBGBUS_IVTL_3"/>1334<reg32 offset="0x060c" name="DBGC_CFG_DBGBUS_MASKL_0"/>1335<reg32 offset="0x060d" name="DBGC_CFG_DBGBUS_MASKL_1"/>1336<reg32 offset="0x060e" name="DBGC_CFG_DBGBUS_MASKL_2"/>1337<reg32 offset="0x060f" name="DBGC_CFG_DBGBUS_MASKL_3"/>1338<reg32 offset="0x0610" name="DBGC_CFG_DBGBUS_BYTEL_0">1339<bitfield high="3" low="0" name="BYTEL0"/>1340<bitfield high="7" low="4" name="BYTEL1"/>1341<bitfield high="11" low="8" name="BYTEL2"/>1342<bitfield high="15" low="12" name="BYTEL3"/>1343<bitfield high="19" low="16" name="BYTEL4"/>1344<bitfield high="23" low="20" name="BYTEL5"/>1345<bitfield high="27" low="24" name="BYTEL6"/>1346<bitfield high="31" low="28" name="BYTEL7"/>1347</reg32>1348<reg32 offset="0x0611" name="DBGC_CFG_DBGBUS_BYTEL_1">1349<bitfield high="3" low="0" name="BYTEL8"/>1350<bitfield high="7" low="4" name="BYTEL9"/>1351<bitfield high="11" low="8" name="BYTEL10"/>1352<bitfield high="15" low="12" name="BYTEL11"/>1353<bitfield high="19" low="16" name="BYTEL12"/>1354<bitfield high="23" low="20" name="BYTEL13"/>1355<bitfield high="27" low="24" name="BYTEL14"/>1356<bitfield high="31" low="28" name="BYTEL15"/>1357</reg32>1358<reg32 offset="0x062f" name="DBGC_CFG_DBGBUS_TRACE_BUF1"/>1359<reg32 offset="0x0630" name="DBGC_CFG_DBGBUS_TRACE_BUF2"/>1360<array offset="0x0CD8" name="VSC_PERFCTR_VSC_SEL" stride="1" length="2"/>1361<reg32 offset="0xC800" name="HLSQ_DBG_AHB_READ_APERTURE"/>1362<reg32 offset="0xD000" name="HLSQ_DBG_READ_SEL"/>1363<reg32 offset="0x0E00" name="UCHE_ADDR_MODE_CNTL" type="a5xx_address_mode"/>1364<reg32 offset="0x0E01" name="UCHE_MODE_CNTL"/>1365<reg32 offset="0x0E05" name="UCHE_WRITE_RANGE_MAX_LO"/>1366<reg32 offset="0x0E06" name="UCHE_WRITE_RANGE_MAX_HI"/>1367<reg32 offset="0x0E07" name="UCHE_WRITE_THRU_BASE_LO"/>1368<reg32 offset="0x0E08" name="UCHE_WRITE_THRU_BASE_HI"/>1369<reg32 offset="0x0E09" name="UCHE_TRAP_BASE_LO"/>1370<reg32 offset="0x0E0A" name="UCHE_TRAP_BASE_HI"/>1371<reg32 offset="0x0E0B" name="UCHE_GMEM_RANGE_MIN_LO"/>1372<reg32 offset="0x0E0C" name="UCHE_GMEM_RANGE_MIN_HI"/>1373<reg32 offset="0x0E0D" name="UCHE_GMEM_RANGE_MAX_LO"/>1374<reg32 offset="0x0E0E" name="UCHE_GMEM_RANGE_MAX_HI"/>1375<reg32 offset="0x0E17" name="UCHE_CACHE_WAYS"/>1376<reg32 offset="0x0E18" name="UCHE_FILTER_CNTL"/>1377<reg32 offset="0x0E19" name="UCHE_CLIENT_PF">1378<bitfield high="7" low="0" name="PERFSEL"/>1379</reg32>1380<array offset="0x0E1C" name="UCHE_PERFCTR_UCHE_SEL" stride="1" length="12"/>1381<reg32 offset="0x0e3c" name="UCHE_CMDQ_CONFIG"/>13821383<reg32 offset="0x3000" name="VBIF_VERSION"/>1384<reg32 offset="0x3001" name="VBIF_CLKON">1385<bitfield pos="1" name="FORCE_ON_TESTBUS" type="boolean"/>1386</reg32>1387<reg32 offset="0x302A" name="VBIF_GATE_OFF_WRREQ_EN"/>1388<reg32 offset="0x3080" name="VBIF_XIN_HALT_CTRL0"/>1389<reg32 offset="0x3081" name="VBIF_XIN_HALT_CTRL1"/>1390<reg32 offset="0x3084" name="VBIF_TEST_BUS_OUT_CTRL"/>1391<reg32 offset="0x3085" name="VBIF_TEST_BUS1_CTRL0"/>1392<reg32 offset="0x3086" name="VBIF_TEST_BUS1_CTRL1">1393<bitfield low="0" high="3" name="DATA_SEL"/>1394</reg32>1395<reg32 offset="0x3087" name="VBIF_TEST_BUS2_CTRL0"/>1396<reg32 offset="0x3088" name="VBIF_TEST_BUS2_CTRL1">1397<bitfield low="0" high="8" name="DATA_SEL"/>1398</reg32>1399<reg32 offset="0x308c" name="VBIF_TEST_BUS_OUT"/>1400<reg32 offset="0x30d0" name="VBIF_PERF_CNT_SEL0"/>1401<reg32 offset="0x30d1" name="VBIF_PERF_CNT_SEL1"/>1402<reg32 offset="0x30d2" name="VBIF_PERF_CNT_SEL2"/>1403<reg32 offset="0x30d3" name="VBIF_PERF_CNT_SEL3"/>1404<reg32 offset="0x30d8" name="VBIF_PERF_CNT_LOW0"/>1405<reg32 offset="0x30d9" name="VBIF_PERF_CNT_LOW1"/>1406<reg32 offset="0x30da" name="VBIF_PERF_CNT_LOW2"/>1407<reg32 offset="0x30db" name="VBIF_PERF_CNT_LOW3"/>1408<reg32 offset="0x30e0" name="VBIF_PERF_CNT_HIGH0"/>1409<reg32 offset="0x30e1" name="VBIF_PERF_CNT_HIGH1"/>1410<reg32 offset="0x30e2" name="VBIF_PERF_CNT_HIGH2"/>1411<reg32 offset="0x30e3" name="VBIF_PERF_CNT_HIGH3"/>1412<reg32 offset="0x3100" name="VBIF_PERF_PWR_CNT_EN0"/>1413<reg32 offset="0x3101" name="VBIF_PERF_PWR_CNT_EN1"/>1414<reg32 offset="0x3102" name="VBIF_PERF_PWR_CNT_EN2"/>1415<reg32 offset="0x3110" name="VBIF_PERF_PWR_CNT_LOW0"/>1416<reg32 offset="0x3111" name="VBIF_PERF_PWR_CNT_LOW1"/>1417<reg32 offset="0x3112" name="VBIF_PERF_PWR_CNT_LOW2"/>1418<reg32 offset="0x3118" name="VBIF_PERF_PWR_CNT_HIGH0"/>1419<reg32 offset="0x3119" name="VBIF_PERF_PWR_CNT_HIGH1"/>1420<reg32 offset="0x311a" name="VBIF_PERF_PWR_CNT_HIGH2"/>14211422<reg32 offset="0x3c01" name="GBIF_SCACHE_CNTL0"/>1423<reg32 offset="0x3c02" name="GBIF_SCACHE_CNTL1"/>1424<reg32 offset="0x3c03" name="GBIF_QSB_SIDE0"/>1425<reg32 offset="0x3c04" name="GBIF_QSB_SIDE1"/>1426<reg32 offset="0x3c05" name="GBIF_QSB_SIDE2"/>1427<reg32 offset="0x3c06" name="GBIF_QSB_SIDE3"/>1428<reg32 offset="0x3c45" name="GBIF_HALT"/>1429<reg32 offset="0x3c46" name="GBIF_HALT_ACK"/>1430<reg32 offset="0x3cc0" name="GBIF_PERF_PWR_CNT_EN"/>1431<reg32 offset="0x3cc2" name="GBIF_PERF_CNT_SEL"/>1432<reg32 offset="0x3cc3" name="GBIF_PERF_PWR_CNT_SEL"/>1433<reg32 offset="0x3cc4" name="GBIF_PERF_CNT_LOW0"/>1434<reg32 offset="0x3cc5" name="GBIF_PERF_CNT_LOW1"/>1435<reg32 offset="0x3cc6" name="GBIF_PERF_CNT_LOW2"/>1436<reg32 offset="0x3cc7" name="GBIF_PERF_CNT_LOW3"/>1437<reg32 offset="0x3cc8" name="GBIF_PERF_CNT_HIGH0"/>1438<reg32 offset="0x3cc9" name="GBIF_PERF_CNT_HIGH1"/>1439<reg32 offset="0x3cca" name="GBIF_PERF_CNT_HIGH2"/>1440<reg32 offset="0x3ccb" name="GBIF_PERF_CNT_HIGH3"/>1441<reg32 offset="0x3ccc" name="GBIF_PWR_CNT_LOW0"/>1442<reg32 offset="0x3ccd" name="GBIF_PWR_CNT_LOW1"/>1443<reg32 offset="0x3cce" name="GBIF_PWR_CNT_LOW2"/>1444<reg32 offset="0x3ccf" name="GBIF_PWR_CNT_HIGH0"/>1445<reg32 offset="0x3cd0" name="GBIF_PWR_CNT_HIGH1"/>1446<reg32 offset="0x3cd1" name="GBIF_PWR_CNT_HIGH2"/>14471448<reg32 offset="0x0c02" name="VSC_BIN_SIZE">1449<bitfield name="WIDTH" low="0" high="7" shr="5" type="uint"/>1450<bitfield name="HEIGHT" low="8" high="16" shr="4" type="uint"/>1451</reg32>1452<reg64 offset="0x0c03" name="VSC_DRAW_STRM_SIZE_ADDRESS" type="waddress"/>1453<reg32 offset="0x0c06" name="VSC_BIN_COUNT">1454<bitfield name="NX" low="1" high="10" type="uint"/>1455<bitfield name="NY" low="11" high="20" type="uint"/>1456</reg32>1457<array offset="0x0c10" name="VSC_PIPE_CONFIG" stride="1" length="32">1458<reg32 offset="0x0" name="REG">1459<doc>1460Configures the mapping between VSC_PIPE buffer and1461bin, X/Y specify the bin index in the horiz/vert1462direction (0,0 is upper left, 0,1 is leftmost bin1463on second row, and so on). W/H specify the number1464of bins assigned to this VSC_PIPE in the horiz/vert1465dimension.1466</doc>1467<bitfield name="X" low="0" high="9" type="uint"/>1468<bitfield name="Y" low="10" high="19" type="uint"/>1469<bitfield name="W" low="20" high="25" type="uint"/>1470<bitfield name="H" low="26" high="31" type="uint"/>1471</reg32>1472</array>1473<!--1474HW binning primitive & draw streams, which enable draws and primitives1475within a draw to be skipped in the main tile pass. See:1476https://github.com/freedreno/freedreno/wiki/Visibility-Stream-Format14771478Compared to a5xx and earlier, we just program the address of the first1479stream and hw adds (pipe_num * VSC_*_STRM_PITCH)14801481LIMIT is set to PITCH - 64, to make room for a bit of overflow1482-->1483<reg64 offset="0x0c30" name="VSC_PRIM_STRM_ADDRESS" type="waddress"/>1484<reg32 offset="0x0c32" name="VSC_PRIM_STRM_PITCH"/>1485<reg32 offset="0x0c33" name="VSC_PRIM_STRM_LIMIT"/>1486<reg64 offset="0x0c34" name="VSC_DRAW_STRM_ADDRESS" type="waddress"/>1487<reg32 offset="0x0c36" name="VSC_DRAW_STRM_PITCH"/>1488<reg32 offset="0x0c37" name="VSC_DRAW_STRM_LIMIT"/>14891490<array offset="0x0c38" name="VSC_STATE" stride="1" length="32">1491<doc>1492Seems to be a bitmap of which tiles mapped to the VSC1493pipe contain geometry.14941495I suppose we can connect a maximum of 32 tiles to a1496single VSC pipe.1497</doc>1498<reg32 offset="0x0" name="REG"/>1499</array>15001501<array offset="0x0c58" name="VSC_PRIM_STRM_SIZE" stride="1" length="32">1502<doc>1503Has the size of data written to corresponding VSC_PRIM_STRM1504buffer.1505</doc>1506<reg32 offset="0x0" name="REG"/>1507</array>15081509<array offset="0x0c78" name="VSC_DRAW_STRM_SIZE" stride="1" length="32">1510<doc>1511Has the size of data written to corresponding VSC pipe, ie.1512same thing that is written out to VSC_DRAW_STRM_SIZE_ADDRESS_LO/HI1513</doc>1514<reg32 offset="0x0" name="REG"/>1515</array>15161517<!-- always 0x03200000 ? -->1518<reg32 offset="0x0e12" name="UCHE_UNKNOWN_0E12"/>15191520<!-- adreno_reg_xy has 15 bits per coordinate, but a6xx registers only have 14 -->1521<bitset name="a6xx_reg_xy" inline="yes">1522<bitfield name="X" low="0" high="13" type="uint"/>1523<bitfield name="Y" low="16" high="29" type="uint"/>1524</bitset>15251526<reg32 offset="0x8000" name="GRAS_CL_CNTL">1527<bitfield name="CLIP_DISABLE" pos="0" type="boolean"/>1528<bitfield name="ZNEAR_CLIP_DISABLE" pos="1" type="boolean"/>1529<bitfield name="ZFAR_CLIP_DISABLE" pos="2" type="boolean"/>1530<!-- set with depthClampEnable, not clear what it does -->1531<bitfield name="UNK5" pos="5" type="boolean"/>1532<!-- controls near z clip behavior (set for vulkan) -->1533<bitfield name="ZERO_GB_SCALE_Z" pos="6" type="boolean"/>1534<!-- guess based on a3xx and meaning of bits 8 and 91535if the guess is right then this is related to point sprite clipping -->1536<bitfield name="VP_CLIP_CODE_IGNORE" pos="7" type="boolean"/>1537<bitfield name="VP_XFORM_DISABLE" pos="8" type="boolean"/>1538<bitfield name="PERSP_DIVISION_DISABLE" pos="9" type="boolean"/>1539</reg32>15401541<bitset name="a6xx_gras_xs_cl_cntl" inline="yes">1542<bitfield name="CLIP_MASK" low="0" high="7"/>1543<bitfield name="CULL_MASK" low="8" high="15"/>1544</bitset>1545<reg32 offset="0x8001" name="GRAS_VS_CL_CNTL" type="a6xx_gras_xs_cl_cntl"/>1546<reg32 offset="0x8002" name="GRAS_DS_CL_CNTL" type="a6xx_gras_xs_cl_cntl"/>1547<reg32 offset="0x8003" name="GRAS_GS_CL_CNTL" type="a6xx_gras_xs_cl_cntl"/>1548<reg32 offset="0x8004" name="GRAS_MAX_LAYER_INDEX" low="0" high="10" type="uint"/>15491550<reg32 offset="0x8005" name="GRAS_CNTL">1551<!-- see also RB_RENDER_CONTROL0 -->1552<bitfield name="IJ_PERSP_PIXEL" pos="0" type="boolean"/>1553<!-- b1 set for interpolateAtCentroid() -->1554<bitfield name="IJ_PERSP_CENTROID" pos="1" type="boolean"/>1555<!-- b2 set instead of b0 when running in per-sample mode -->1556<bitfield name="IJ_PERSP_SAMPLE" pos="2" type="boolean"/>1557<!--1558b3 set for interpolateAt{Offset,Sample}() if not in per-sample1559mode, and frag_face1560-->1561<bitfield name="SIZE" pos="3" type="boolean"/>1562<bitfield name="UNK4" pos="4" type="boolean"/>1563<!-- b5 set ofr interpolateAt{Offset,Sample}() if in per-sample mode -->1564<bitfield name="SIZE_PERSAMP" pos="5" type="boolean"/>1565<bitfield name="COORD_MASK" low="6" high="9" type="hex"/>1566</reg32>1567<reg32 offset="0x8006" name="GRAS_CL_GUARDBAND_CLIP_ADJ">1568<bitfield name="HORZ" low="0" high="8" type="uint"/>1569<bitfield name="VERT" low="10" high="18" type="uint"/>1570</reg32>1571<!-- 0x8006-0x800f invalid -->1572<array offset="0x8010" name="GRAS_CL_VPORT" stride="6" length="16">1573<reg32 offset="0" name="XOFFSET" type="float"/>1574<reg32 offset="1" name="XSCALE" type="float"/>1575<reg32 offset="2" name="YOFFSET" type="float"/>1576<reg32 offset="3" name="YSCALE" type="float"/>1577<reg32 offset="4" name="ZOFFSET" type="float"/>1578<reg32 offset="5" name="ZSCALE" type="float"/>1579</array>1580<array offset="0x8070" name="GRAS_CL_Z_CLAMP" stride="2" length="16">1581<reg32 offset="0" name="MIN" type="float"/>1582<reg32 offset="1" name="MAX" type="float"/>1583</array>15841585<reg32 offset="0x8090" name="GRAS_SU_CNTL">1586<bitfield name="CULL_FRONT" pos="0" type="boolean"/>1587<bitfield name="CULL_BACK" pos="1" type="boolean"/>1588<bitfield name="FRONT_CW" pos="2" type="boolean"/>1589<bitfield name="LINEHALFWIDTH" low="3" high="10" radix="2" type="fixed"/>1590<bitfield name="POLY_OFFSET" pos="11" type="boolean"/>1591<bitfield name="UNK12" pos="12"/>1592<bitfield name="MSAA_ENABLE" pos="13" type="boolean"/>1593<bitfield name="UNK15" low="15" high="16"/>1594<!--1595This is set by the blob when multiview is enabled, but doesn't seem1596to do anything.1597-->1598<bitfield name="UNK17" pos="17" type="boolean"/>1599<bitfield name="MULTIVIEW_ENABLE" pos="18" type="boolean"/>1600<bitfield name="UNK19" low="19" high="22"/>1601</reg32>1602<reg32 offset="0x8091" name="GRAS_SU_POINT_MINMAX">1603<bitfield name="MIN" low="0" high="15" type="ufixed" radix="4"/>1604<bitfield name="MAX" low="16" high="31" type="ufixed" radix="4"/>1605</reg32>1606<reg32 offset="0x8092" name="GRAS_SU_POINT_SIZE" low="0" high="15" type="fixed" radix="4"/>1607<!-- 0x8093 invalid -->1608<reg32 offset="0x8094" name="GRAS_SU_DEPTH_PLANE_CNTL">1609<bitfield name="Z_MODE" low="0" high="1" type="a6xx_ztest_mode"/>1610</reg32>1611<reg32 offset="0x8095" name="GRAS_SU_POLY_OFFSET_SCALE" type="float"/>1612<reg32 offset="0x8096" name="GRAS_SU_POLY_OFFSET_OFFSET" type="float"/>1613<reg32 offset="0x8097" name="GRAS_SU_POLY_OFFSET_OFFSET_CLAMP" type="float"/>1614<!-- duplicates RB_DEPTH_BUFFER_INFO: -->1615<reg32 offset="0x8098" name="GRAS_SU_DEPTH_BUFFER_INFO">1616<bitfield name="DEPTH_FORMAT" low="0" high="2" type="a6xx_depth_format"/>1617<bitfield name="UNK3" pos="3"/>1618</reg32>16191620<reg32 offset="0x8099" name="GRAS_UNKNOWN_8099" low="0" high="5"/>1621<reg32 offset="0x809a" name="GRAS_UNKNOWN_809A" low="0" high="1"/>16221623<bitset name="a6xx_gras_layer_cntl" inline="yes">1624<bitfield name="WRITES_LAYER" pos="0" type="boolean"/>1625<bitfield name="WRITES_VIEW" pos="1" type="boolean"/>1626</bitset>1627<reg32 offset="0x809b" name="GRAS_VS_LAYER_CNTL" type="a6xx_gras_layer_cntl"/>1628<reg32 offset="0x809c" name="GRAS_GS_LAYER_CNTL" type="a6xx_gras_layer_cntl"/>1629<reg32 offset="0x809d" name="GRAS_DS_LAYER_CNTL" type="a6xx_gras_layer_cntl"/>1630<!-- 0x809e/0x809f invalid -->1631<reg32 offset="0x80a0" name="GRAS_UNKNOWN_80A0" low="0" high="12"/>1632<reg32 offset="0x80a1" name="GRAS_BIN_CONTROL">1633<bitfield name="BINW" low="0" high="5" shr="5" type="uint"/>1634<bitfield name="BINH" low="8" high="14" shr="4" type="uint"/>1635<bitfield name="BINNING_PASS" pos="18" type="boolean"/>1636<bitfield name="UNK19" pos="19"/>1637<bitfield name="UNK20" pos="20"/>1638<bitfield name="USE_VIZ" pos="21" type="boolean"/>1639<bitfield name="UNK22" low="22" high="27"/>1640</reg32>16411642<reg32 offset="0x80a2" name="GRAS_RAS_MSAA_CNTL">1643<bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>1644<bitfield name="UNK2" pos="2"/>1645<bitfield name="UNK3" pos="3"/>1646</reg32>1647<reg32 offset="0x80a3" name="GRAS_DEST_MSAA_CNTL">1648<bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>1649<bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>1650</reg32>16511652<bitset name="a6xx_sample_config" inline="yes">1653<bitfield name="UNK0" pos="0"/>1654<bitfield name="LOCATION_ENABLE" pos="1" type="boolean"/>1655</bitset>16561657<bitset name="a6xx_sample_locations" inline="yes">1658<bitfield name="SAMPLE_0_X" low="0" high="3" radix="4" type="fixed"/>1659<bitfield name="SAMPLE_0_Y" low="4" high="7" radix="4" type="fixed"/>1660<bitfield name="SAMPLE_1_X" low="8" high="11" radix="4" type="fixed"/>1661<bitfield name="SAMPLE_1_Y" low="12" high="15" radix="4" type="fixed"/>1662<bitfield name="SAMPLE_2_X" low="16" high="19" radix="4" type="fixed"/>1663<bitfield name="SAMPLE_2_Y" low="20" high="23" radix="4" type="fixed"/>1664<bitfield name="SAMPLE_3_X" low="24" high="27" radix="4" type="fixed"/>1665<bitfield name="SAMPLE_3_Y" low="28" high="31" radix="4" type="fixed"/>1666</bitset>16671668<reg32 offset="0x80a4" name="GRAS_SAMPLE_CONFIG" type="a6xx_sample_config"/>1669<reg32 offset="0x80a5" name="GRAS_SAMPLE_LOCATION_0" type="a6xx_sample_locations"/>1670<reg32 offset="0x80a6" name="GRAS_SAMPLE_LOCATION_1" type="a6xx_sample_locations"/>1671<!-- 0x80a7-0x80ae invalid -->1672<reg32 offset="0x80af" name="GRAS_UNKNOWN_80AF" pos="0"/>16731674<bitset name="a6xx_scissor_xy" inline="yes">1675<bitfield name="X" low="0" high="15" type="uint"/>1676<bitfield name="Y" low="16" high="31" type="uint"/>1677</bitset>1678<array offset="0x80b0" name="GRAS_SC_SCREEN_SCISSOR" stride="2" length="16">1679<reg32 offset="0" name="TL" type="a6xx_scissor_xy"/>1680<reg32 offset="1" name="BR" type="a6xx_scissor_xy"/>1681</array>1682<array offset="0x80d0" name="GRAS_SC_VIEWPORT_SCISSOR" stride="2" length="16">1683<reg32 offset="0" name="TL" type="a6xx_scissor_xy"/>1684<reg32 offset="1" name="BR" type="a6xx_scissor_xy"/>1685</array>16861687<reg32 offset="0x80f0" name="GRAS_SC_WINDOW_SCISSOR_TL" type="a6xx_reg_xy"/>1688<reg32 offset="0x80f1" name="GRAS_SC_WINDOW_SCISSOR_BR" type="a6xx_reg_xy"/>1689<!-- 0x80f2-0x80ff invalid -->16901691<reg32 offset="0x8100" name="GRAS_LRZ_CNTL">1692<!--1693These bits seems to mostly fit.. but wouldn't hurt to have a 2nd1694look when we get around to enabling lrz1695-->1696<bitfield name="ENABLE" pos="0" type="boolean"/>1697<doc>LRZ write also disabled for blend/etc.</doc>1698<bitfield name="LRZ_WRITE" pos="1" type="boolean"/>1699<doc>update MAX instead of MIN value, ie. GL_GREATER/GL_GEQUAL</doc>1700<bitfield name="GREATER" pos="2" type="boolean"/>1701<bitfield name="FC_ENABLE" pos="3" type="boolean"/>1702<!-- set when depth-test + depth-write enabled -->1703<bitfield name="Z_TEST_ENABLE" pos="4" type="boolean"/>1704<bitfield name="Z_BOUNDS_ENABLE" pos="5" type="boolean"/>1705<bitfield name="UNK6" low="6" high="9"/>1706</reg32>1707<reg32 offset="0x8101" name="GRAS_UNKNOWN_8101" low="0" high="2"/>1708<reg32 offset="0x8102" name="GRAS_2D_BLIT_INFO">1709<bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>1710</reg32>1711<reg64 offset="0x8103" name="GRAS_LRZ_BUFFER_BASE" align="256" type="waddress"/>1712<reg32 offset="0x8105" name="GRAS_LRZ_BUFFER_PITCH">1713<!-- TODO: fix the shr fields -->1714<bitfield name="PITCH" low="0" high="7" shr="5" type="uint"/>1715<bitfield name="ARRAY_PITCH" low="10" high="28" shr="4" type="uint"/>1716</reg32>17171718<!--1719The LRZ "fast clear" buffer is initialized to zero's by blob, and1720read/written when GRAS_LRZ_CNTL.FC_ENABLE (b3) is set. It appears1721to store 1b/block. It appears that '0' means block has original1722depth clear value, and '1' means that the corresponding block in1723LRZ has been modified. Ignoring alignment/padding, the size is1724given by the formula:17251726// calculate LRZ size from depth size:1727if (nr_samples == 4) {1728width *= 2;1729height *= 2;1730} else if (nr_samples == 2) {1731height *= 2;1732}17331734lrz_width = div_round_up(width, 8);1735lrz_heigh = div_round_up(height, 8);17361737// calculate # of blocks:1738nblocksx = div_round_up(lrz_width, 16);1739nblocksy = div_round_up(lrz_height, 4);17401741// fast-clear buffer is 1bit/block:1742fc_sz = div_round_up(nblocksx * nblocksy, 8);17431744In practice the blob seems to switch off FC_ENABLE once the size1745increases beyond 1 page. Not sure if that is an actual limit or1746not.1747-->1748<reg64 offset="0x8106" name="GRAS_LRZ_FAST_CLEAR_BUFFER_BASE" align="64" type="waddress"/>1749<!-- 0x8108 invalid -->1750<reg32 offset="0x8109" name="GRAS_SAMPLE_CNTL">1751<bitfield name="PER_SAMP_MODE" pos="0" type="boolean"/>1752</reg32>1753<reg32 offset="0x810a" name="GRAS_UNKNOWN_810A">1754<bitfield name="UNK0" low="0" high="10" type="uint"/>1755<bitfield name="UNK16" low="16" high="26" type="uint"/>1756<bitfield name="UNK28" low="28" high="31" type="uint"/>1757</reg32>17581759<!-- 0x810b-0x810f invalid -->17601761<reg32 offset="0x8110" name="GRAS_UNKNOWN_8110" low="0" high="1"/>17621763<!-- 0x8111-0x83ff invalid -->17641765<enum name="a6xx_rotation">1766<value value="0x0" name="ROTATE_0"/>1767<value value="0x1" name="ROTATE_90"/>1768<value value="0x2" name="ROTATE_180"/>1769<value value="0x3" name="ROTATE_270"/>1770<value value="0x4" name="ROTATE_HFLIP"/>1771<value value="0x5" name="ROTATE_VFLIP"/>1772</enum>17731774<bitset name="a6xx_2d_blit_cntl" inline="yes">1775<bitfield name="ROTATE" low="0" high="2" type="a6xx_rotation"/>1776<bitfield name="UNK3" low="3" high="6"/>1777<bitfield name="SOLID_COLOR" pos="7" type="boolean"/>1778<bitfield name="COLOR_FORMAT" low="8" high="15" type="a6xx_format"/>1779<bitfield name="SCISSOR" pos="16" type="boolean"/>1780<bitfield name="UNK17" low="17" high="18"/>1781<!-- required when blitting D24S8/D24X8 -->1782<bitfield name="D24S8" pos="19" type="boolean"/>1783<!-- some sort of channel mask, disabled channels are set to zero ? -->1784<bitfield name="MASK" low="20" high="23"/>1785<bitfield name="IFMT" low="24" high="28" type="a6xx_2d_ifmt"/>1786<bitfield name="UNK29" pos="29"/>1787</bitset>17881789<reg32 offset="0x8400" name="GRAS_2D_BLIT_CNTL" type="a6xx_2d_blit_cntl"/>1790<!-- note: the low 8 bits for src coords are valid, probably fixed point1791it would be a bit weird though, since we subtract 1 from BR coords1792apparently signed, gallium driver uses negative coords and it works?1793-->1794<reg32 offset="0x8401" name="GRAS_2D_SRC_TL_X" low="8" high="24" type="int"/>1795<reg32 offset="0x8402" name="GRAS_2D_SRC_BR_X" low="8" high="24" type="int"/>1796<reg32 offset="0x8403" name="GRAS_2D_SRC_TL_Y" low="8" high="24" type="int"/>1797<reg32 offset="0x8404" name="GRAS_2D_SRC_BR_Y" low="8" high="24" type="int"/>1798<reg32 offset="0x8405" name="GRAS_2D_DST_TL" type="a6xx_reg_xy"/>1799<reg32 offset="0x8406" name="GRAS_2D_DST_BR" type="a6xx_reg_xy"/>1800<reg32 offset="0x8407" name="GRAS_2D_UNKNOWN_8407" low="0" high="31"/>1801<reg32 offset="0x8408" name="GRAS_2D_UNKNOWN_8408" low="0" high="31"/>1802<reg32 offset="0x8409" name="GRAS_2D_UNKNOWN_8409" low="0" high="31"/>1803<reg32 offset="0x840a" name="GRAS_2D_RESOLVE_CNTL_1" type="a6xx_reg_xy"/>1804<reg32 offset="0x840b" name="GRAS_2D_RESOLVE_CNTL_2" type="a6xx_reg_xy"/>1805<!-- 0x840c-0x85ff invalid -->18061807<!-- always 0x880 ? (and 0 in a640/a650 traces?) -->1808<reg32 offset="0x8600" name="GRAS_UNKNOWN_8600" low="0" high="12" />1809<reg32 offset="0x8601" name="GRAS_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>1810<array offset="0x8610" name="GRAS_PERFCTR_TSE_SEL" stride="1" length="4"/>1811<array offset="0x8614" name="GRAS_PERFCTR_RAS_SEL" stride="1" length="4"/>1812<array offset="0x8618" name="GRAS_PERFCTR_LRZ_SEL" stride="1" length="4"/>18131814<!-- note 0x8620-0x87ff are not all invalid1815(in particular, 0x8631/0x8632 have 0x3fff3fff mask and would be xy coords)1816-->18171818<!-- same as GRAS_BIN_CONTROL, but without bit 27: -->1819<reg32 offset="0x8800" name="RB_BIN_CONTROL">1820<bitfield name="BINW" low="0" high="5" shr="5" type="uint"/>1821<bitfield name="BINH" low="8" high="14" shr="4" type="uint"/>1822<bitfield name="BINNING_PASS" pos="18" type="boolean"/>1823<bitfield name="UNK19" pos="19"/>1824<bitfield name="UNK20" pos="20"/>1825<bitfield name="USE_VIZ" pos="21" type="boolean"/>1826<bitfield name="UNK22" low="22" high="26"/>1827</reg32>1828<reg32 offset="0x8801" name="RB_RENDER_CNTL">1829<bitfield name="UNK3" pos="3" type="boolean"/>1830<!-- always set: ?? -->1831<bitfield name="UNK4" pos="4" type="boolean"/>1832<bitfield name="UNK5" low="5" high="6"/>1833<!-- set during binning pass: -->1834<bitfield name="BINNING" pos="7" type="boolean"/>1835<bitfield name="UNK8" low="8" high="12"/>1836<!-- bit seems to be set whenever depth buffer enabled: -->1837<bitfield name="FLAG_DEPTH" pos="14" type="boolean"/>1838<!-- bitmask of MRTs using UBWC flag buffer: -->1839<bitfield name="FLAG_MRTS" low="16" high="23"/>1840</reg32>1841<reg32 offset="0x8802" name="RB_RAS_MSAA_CNTL">1842<bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>1843<bitfield name="UNK2" pos="2"/>1844<bitfield name="UNK3" pos="3"/>1845</reg32>1846<reg32 offset="0x8803" name="RB_DEST_MSAA_CNTL">1847<bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>1848<bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>1849</reg32>18501851<reg32 offset="0x8804" name="RB_SAMPLE_CONFIG" type="a6xx_sample_config"/>1852<reg32 offset="0x8805" name="RB_SAMPLE_LOCATION_0" type="a6xx_sample_locations"/>1853<reg32 offset="0x8806" name="RB_SAMPLE_LOCATION_1" type="a6xx_sample_locations"/>1854<!-- 0x8807-0x8808 invalid -->1855<!--1856note: maybe not actually called RB_RENDER_CONTROLn (since RB_RENDER_CNTL1857name comes from kernel and is probably right)1858-->1859<reg32 offset="0x8809" name="RB_RENDER_CONTROL0">1860<!-- see also GRAS_CNTL -->1861<bitfield name="IJ_PERSP_PIXEL" pos="0" type="boolean"/>1862<!-- b1 set for interpolateAtCentroid() -->1863<bitfield name="IJ_PERSP_CENTROID" pos="1" type="boolean"/>1864<!-- b2 set instead of b0 when running in per-sample mode -->1865<bitfield name="IJ_PERSP_SAMPLE" pos="2" type="boolean"/>1866<!--1867b3 set for interpolateAt{Offset,Sample}() if not in per-sample1868mode, and frag_face1869-->1870<bitfield name="SIZE" pos="3" type="boolean"/>1871<bitfield name="UNK4" pos="4" type="boolean"/>1872<!-- b5 set ofr interpolateAt{Offset,Sample}() if in per-sample mode -->1873<bitfield name="SIZE_PERSAMP" pos="5" type="boolean"/>1874<bitfield name="COORD_MASK" low="6" high="9" type="hex"/>1875<bitfield name="UNK10" pos="10" type="boolean"/>1876</reg32>1877<reg32 offset="0x880a" name="RB_RENDER_CONTROL1">1878<!-- enable bits for various FS sysvalue regs: -->1879<bitfield name="SAMPLEMASK" pos="0" type="boolean"/>1880<bitfield name="UNK1" pos="1" type="boolean"/>1881<bitfield name="FACENESS" pos="2" type="boolean"/>1882<bitfield name="SAMPLEID" pos="3" type="boolean"/>1883<!-- b4 and b5 set in per-sample mode: -->1884<bitfield name="UNK4" pos="4" type="boolean"/>1885<bitfield name="UNK5" pos="5" type="boolean"/>1886<bitfield name="SIZE" pos="6" type="boolean"/>1887<bitfield name="UNK7" pos="7" type="boolean"/>1888<bitfield name="UNK8" pos="8" type="boolean"/>1889</reg32>18901891<reg32 offset="0x880b" name="RB_FS_OUTPUT_CNTL0">1892<bitfield name="DUAL_COLOR_IN_ENABLE" pos="0" type="boolean"/>1893<bitfield name="FRAG_WRITES_Z" pos="1" type="boolean"/>1894<bitfield name="FRAG_WRITES_SAMPMASK" pos="2" type="boolean"/>1895<bitfield name="FRAG_WRITES_STENCILREF" pos="3" type="boolean"/>1896</reg32>1897<reg32 offset="0x880c" name="RB_FS_OUTPUT_CNTL1">1898<bitfield name="MRT" low="0" high="3" type="uint"/>1899</reg32>1900<reg32 offset="0x880d" name="RB_RENDER_COMPONENTS">1901<bitfield name="RT0" low="0" high="3"/>1902<bitfield name="RT1" low="4" high="7"/>1903<bitfield name="RT2" low="8" high="11"/>1904<bitfield name="RT3" low="12" high="15"/>1905<bitfield name="RT4" low="16" high="19"/>1906<bitfield name="RT5" low="20" high="23"/>1907<bitfield name="RT6" low="24" high="27"/>1908<bitfield name="RT7" low="28" high="31"/>1909</reg32>1910<reg32 offset="0x880e" name="RB_DITHER_CNTL">1911<bitfield name="DITHER_MODE_MRT0" low="0" high="1" type="adreno_rb_dither_mode"/>1912<bitfield name="DITHER_MODE_MRT1" low="2" high="3" type="adreno_rb_dither_mode"/>1913<bitfield name="DITHER_MODE_MRT2" low="4" high="5" type="adreno_rb_dither_mode"/>1914<bitfield name="DITHER_MODE_MRT3" low="6" high="7" type="adreno_rb_dither_mode"/>1915<bitfield name="DITHER_MODE_MRT4" low="8" high="9" type="adreno_rb_dither_mode"/>1916<bitfield name="DITHER_MODE_MRT5" low="10" high="11" type="adreno_rb_dither_mode"/>1917<bitfield name="DITHER_MODE_MRT6" low="12" high="12" type="adreno_rb_dither_mode"/>1918<bitfield name="DITHER_MODE_MRT7" low="14" high="15" type="adreno_rb_dither_mode"/>1919</reg32>1920<reg32 offset="0x880f" name="RB_SRGB_CNTL">1921<!-- Same as SP_SRGB_CNTL -->1922<bitfield name="SRGB_MRT0" pos="0" type="boolean"/>1923<bitfield name="SRGB_MRT1" pos="1" type="boolean"/>1924<bitfield name="SRGB_MRT2" pos="2" type="boolean"/>1925<bitfield name="SRGB_MRT3" pos="3" type="boolean"/>1926<bitfield name="SRGB_MRT4" pos="4" type="boolean"/>1927<bitfield name="SRGB_MRT5" pos="5" type="boolean"/>1928<bitfield name="SRGB_MRT6" pos="6" type="boolean"/>1929<bitfield name="SRGB_MRT7" pos="7" type="boolean"/>1930</reg32>19311932<reg32 offset="0x8810" name="RB_SAMPLE_CNTL">1933<bitfield name="PER_SAMP_MODE" pos="0" type="boolean"/>1934</reg32>1935<reg32 offset="0x8811" name="RB_UNKNOWN_8811" low="4" high="6"/>1936<!-- 0x8812-0x8817 invalid -->1937<!-- always 0x0 ? -->1938<reg32 offset="0x8818" name="RB_UNKNOWN_8818" low="0" high="6"/>1939<!-- 0x8819-0x881e all 32 bits -->1940<reg32 offset="0x8819" name="RB_UNKNOWN_8819"/>1941<reg32 offset="0x881a" name="RB_UNKNOWN_881A"/>1942<reg32 offset="0x881b" name="RB_UNKNOWN_881B"/>1943<reg32 offset="0x881c" name="RB_UNKNOWN_881C"/>1944<reg32 offset="0x881d" name="RB_UNKNOWN_881D"/>1945<reg32 offset="0x881e" name="RB_UNKNOWN_881E"/>1946<!-- 0x881f invalid -->1947<array offset="0x8820" name="RB_MRT" stride="8" length="8">1948<reg32 offset="0x0" name="CONTROL">1949<bitfield name="BLEND" pos="0" type="boolean"/>1950<bitfield name="BLEND2" pos="1" type="boolean"/>1951<bitfield name="ROP_ENABLE" pos="2" type="boolean"/>1952<bitfield name="ROP_CODE" low="3" high="6" type="a3xx_rop_code"/>1953<bitfield name="COMPONENT_ENABLE" low="7" high="10" type="hex"/>1954</reg32>1955<reg32 offset="0x1" name="BLEND_CONTROL">1956<bitfield name="RGB_SRC_FACTOR" low="0" high="4" type="adreno_rb_blend_factor"/>1957<bitfield name="RGB_BLEND_OPCODE" low="5" high="7" type="a3xx_rb_blend_opcode"/>1958<bitfield name="RGB_DEST_FACTOR" low="8" high="12" type="adreno_rb_blend_factor"/>1959<bitfield name="ALPHA_SRC_FACTOR" low="16" high="20" type="adreno_rb_blend_factor"/>1960<bitfield name="ALPHA_BLEND_OPCODE" low="21" high="23" type="a3xx_rb_blend_opcode"/>1961<bitfield name="ALPHA_DEST_FACTOR" low="24" high="28" type="adreno_rb_blend_factor"/>1962</reg32>1963<reg32 offset="0x2" name="BUF_INFO">1964<bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>1965<bitfield name="COLOR_TILE_MODE" low="8" high="9" type="a6xx_tile_mode"/>1966<bitfield name="UNK10" pos="10"/>1967<bitfield name="COLOR_SWAP" low="13" high="14" type="a3xx_color_swap"/>1968</reg32>1969<!--1970at least in gmem, things seem to be aligned to pitch of 64..1971maybe an artifact of tiled format used in gmem?1972-->1973<reg32 offset="0x3" name="PITCH" shr="6" high="15" type="uint"/>1974<reg32 offset="0x4" name="ARRAY_PITCH" shr="6" high="28" type="uint"/>1975<!--1976Compared to a5xx and before, we configure both a GMEM base and1977external base. Not sure if this is to facilitate GMEM save/1978restore for context switch, or just to simplify state setup to1979not have to care about GMEM vs BYPASS mode.1980-->1981<!-- maybe something in low bits since alignment of 1 doesn't make sense? -->1982<reg64 offset="0x5" name="BASE" type="waddress" align="1"/>19831984<reg32 offset="0x7" name="BASE_GMEM" low="12" high="31" shr="12"/>1985</array>19861987<reg32 offset="0x8860" name="RB_BLEND_RED_F32" type="float"/>1988<reg32 offset="0x8861" name="RB_BLEND_GREEN_F32" type="float"/>1989<reg32 offset="0x8862" name="RB_BLEND_BLUE_F32" type="float"/>1990<reg32 offset="0x8863" name="RB_BLEND_ALPHA_F32" type="float"/>1991<reg32 offset="0x8864" name="RB_ALPHA_CONTROL">1992<bitfield name="ALPHA_REF" low="0" high="7" type="hex"/>1993<bitfield name="ALPHA_TEST" pos="8" type="boolean"/>1994<bitfield name="ALPHA_TEST_FUNC" low="9" high="11" type="adreno_compare_func"/>1995</reg32>1996<reg32 offset="0x8865" name="RB_BLEND_CNTL">1997<!-- per-mrt enable bit -->1998<bitfield name="ENABLE_BLEND" low="0" high="7"/>1999<bitfield name="INDEPENDENT_BLEND" pos="8" type="boolean"/>2000<bitfield name="DUAL_COLOR_IN_ENABLE" pos="9" type="boolean"/>2001<bitfield name="ALPHA_TO_COVERAGE" pos="10" type="boolean"/>2002<bitfield name="ALPHA_TO_ONE" pos="11" type="boolean"/>2003<bitfield name="SAMPLE_MASK" low="16" high="31"/>2004</reg32>2005<!-- 0x8866-0x886f invalid -->2006<reg32 offset="0x8870" name="RB_DEPTH_PLANE_CNTL">2007<bitfield name="Z_MODE" low="0" high="1" type="a6xx_ztest_mode"/>2008</reg32>20092010<reg32 offset="0x8871" name="RB_DEPTH_CNTL">2011<bitfield name="Z_ENABLE" pos="0" type="boolean"/>2012<bitfield name="Z_WRITE_ENABLE" pos="1" type="boolean"/>2013<bitfield name="ZFUNC" low="2" high="4" type="adreno_compare_func"/>2014<bitfield name="Z_CLAMP_ENABLE" pos="5" type="boolean"/>2015<doc>2016Z_TEST_ENABLE bit is set for zfunc other than GL_ALWAYS or GL_NEVER2017also set when Z_BOUNDS_ENABLE is set2018</doc>2019<bitfield name="Z_TEST_ENABLE" pos="6" type="boolean"/>2020<bitfield name="Z_BOUNDS_ENABLE" pos="7" type="boolean"/>2021</reg32>2022<!-- duplicates GRAS_SU_DEPTH_BUFFER_INFO: -->2023<reg32 offset="0x8872" name="RB_DEPTH_BUFFER_INFO">2024<bitfield name="DEPTH_FORMAT" low="0" high="2" type="a6xx_depth_format"/>2025<bitfield name="UNK3" low="3" high="4"/>2026</reg32>2027<reg32 offset="0x8873" name="RB_DEPTH_BUFFER_PITCH" low="0" high="13" shr="6" type="uint"/>2028<reg32 offset="0x8874" name="RB_DEPTH_BUFFER_ARRAY_PITCH" low="0" high="27" shr="6" type="uint"/>2029<reg64 offset="0x8875" name="RB_DEPTH_BUFFER_BASE" type="waddress" align="64"/>2030<reg32 offset="0x8877" name="RB_DEPTH_BUFFER_BASE_GMEM" low="12" high="31" shr="12"/>20312032<reg32 offset="0x8878" name="RB_Z_BOUNDS_MIN" type="float"/>2033<reg32 offset="0x8879" name="RB_Z_BOUNDS_MAX" type="float"/>2034<!-- 0x887a-0x887f invalid -->2035<reg32 offset="0x8880" name="RB_STENCIL_CONTROL">2036<bitfield name="STENCIL_ENABLE" pos="0" type="boolean"/>2037<bitfield name="STENCIL_ENABLE_BF" pos="1" type="boolean"/>2038<!--2039set for stencil operations that require read from stencil2040buffer, but not for example for stencil clear (which does2041not require read).. so guessing this is analogous to2042READ_DEST_ENABLE for color buffer..2043-->2044<bitfield name="STENCIL_READ" pos="2" type="boolean"/>2045<bitfield name="FUNC" low="8" high="10" type="adreno_compare_func"/>2046<bitfield name="FAIL" low="11" high="13" type="adreno_stencil_op"/>2047<bitfield name="ZPASS" low="14" high="16" type="adreno_stencil_op"/>2048<bitfield name="ZFAIL" low="17" high="19" type="adreno_stencil_op"/>2049<bitfield name="FUNC_BF" low="20" high="22" type="adreno_compare_func"/>2050<bitfield name="FAIL_BF" low="23" high="25" type="adreno_stencil_op"/>2051<bitfield name="ZPASS_BF" low="26" high="28" type="adreno_stencil_op"/>2052<bitfield name="ZFAIL_BF" low="29" high="31" type="adreno_stencil_op"/>2053</reg32>2054<reg32 offset="0x8881" name="RB_STENCIL_INFO">2055<bitfield name="SEPARATE_STENCIL" pos="0" type="boolean"/>2056<bitfield name="UNK1" pos="1" type="boolean"/>2057</reg32>2058<reg32 offset="0x8882" name="RB_STENCIL_BUFFER_PITCH" low="0" high="11" shr="6" type="uint"/>2059<reg32 offset="0x8883" name="RB_STENCIL_BUFFER_ARRAY_PITCH" low="0" high="23" shr="6" type="uint"/>2060<reg64 offset="0x8884" name="RB_STENCIL_BUFFER_BASE" type="waddress" align="64"/>2061<reg32 offset="0x8886" name="RB_STENCIL_BUFFER_BASE_GMEM" low="12" high="31" shr="12"/>2062<reg32 offset="0x8887" name="RB_STENCILREF">2063<bitfield name="REF" low="0" high="7"/>2064<bitfield name="BFREF" low="8" high="15"/>2065</reg32>2066<reg32 offset="0x8888" name="RB_STENCILMASK">2067<bitfield name="MASK" low="0" high="7"/>2068<bitfield name="BFMASK" low="8" high="15"/>2069</reg32>2070<reg32 offset="0x8889" name="RB_STENCILWRMASK">2071<bitfield name="WRMASK" low="0" high="7"/>2072<bitfield name="BFWRMASK" low="8" high="15"/>2073</reg32>2074<!-- 0x888a-0x888f invalid -->2075<reg32 offset="0x8890" name="RB_WINDOW_OFFSET" type="a6xx_reg_xy"/>2076<reg32 offset="0x8891" name="RB_SAMPLE_COUNT_CONTROL">2077<bitfield name="UNK0" pos="0" type="boolean"/>2078<bitfield name="COPY" pos="1" type="boolean"/>2079</reg32>2080<!-- 0x8892-0x8897 invalid -->2081<reg32 offset="0x8898" name="RB_LRZ_CNTL">2082<bitfield name="ENABLE" pos="0" type="boolean"/>2083</reg32>2084<!-- 0x8899-0x88bf invalid -->2085<!-- clamps depth value for depth test/write -->2086<reg32 offset="0x88c0" name="RB_Z_CLAMP_MIN" type="float"/>2087<reg32 offset="0x88c1" name="RB_Z_CLAMP_MAX" type="float"/>2088<!-- 0x88c2-0x88cf invalid-->2089<reg32 offset="0x88d0" name="RB_UNKNOWN_88D0">2090<bitfield name="UNK0" low="0" high="12"/>2091<bitfield name="UNK16" low="16" high="26"/>2092</reg32>2093<reg32 offset="0x88d1" name="RB_BLIT_SCISSOR_TL" type="a6xx_reg_xy"/>2094<reg32 offset="0x88d2" name="RB_BLIT_SCISSOR_BR" type="a6xx_reg_xy"/>2095<!-- weird to duplicate other regs from same block?? -->2096<reg32 offset="0x88d3" name="RB_BIN_CONTROL2">2097<bitfield name="BINW" low="0" high="5" shr="5" type="uint"/>2098<bitfield name="BINH" low="8" high="14" shr="4" type="uint"/>2099</reg32>2100<reg32 offset="0x88d4" name="RB_WINDOW_OFFSET2" type="a6xx_reg_xy"/>2101<reg32 offset="0x88d5" name="RB_MSAA_CNTL">2102<bitfield name="SAMPLES" low="3" high="4" type="a3xx_msaa_samples"/>2103</reg32>2104<reg32 offset="0x88d6" name="RB_BLIT_BASE_GMEM" low="12" high="31" shr="12"/>2105<!-- s/DST_FORMAT/DST_INFO/ probably: -->2106<reg32 offset="0x88d7" name="RB_BLIT_DST_INFO">2107<bitfield name="TILE_MODE" low="0" high="1" type="a6xx_tile_mode"/>2108<bitfield name="FLAGS" pos="2" type="boolean"/>2109<bitfield name="SAMPLES" low="3" high="4" type="a3xx_msaa_samples"/>2110<bitfield name="COLOR_SWAP" low="5" high="6" type="a3xx_color_swap"/>2111<bitfield name="COLOR_FORMAT" low="7" high="14" type="a6xx_format"/>2112<bitfield name="UNK15" pos="15" type="boolean"/>2113</reg32>2114<reg64 offset="0x88d8" name="RB_BLIT_DST" type="waddress" align="64"/>2115<reg32 offset="0x88da" name="RB_BLIT_DST_PITCH" low="0" high="15" shr="6" type="uint"/>2116<!-- array-pitch is size of layer -->2117<reg32 offset="0x88db" name="RB_BLIT_DST_ARRAY_PITCH" low="0" high="28" shr="6" type="uint"/>2118<reg64 offset="0x88dc" name="RB_BLIT_FLAG_DST" type="waddress" align="64"/>2119<reg32 offset="0x88de" name="RB_BLIT_FLAG_DST_PITCH">2120<bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>2121<bitfield name="ARRAY_PITCH" low="11" high="27" shr="7" type="uint"/>2122</reg32>21232124<reg32 offset="0x88df" name="RB_BLIT_CLEAR_COLOR_DW0"/>2125<reg32 offset="0x88e0" name="RB_BLIT_CLEAR_COLOR_DW1"/>2126<reg32 offset="0x88e1" name="RB_BLIT_CLEAR_COLOR_DW2"/>2127<reg32 offset="0x88e2" name="RB_BLIT_CLEAR_COLOR_DW3"/>21282129<!-- seems somewhat similar to what we called RB_CLEAR_CNTL on a5xx: -->2130<reg32 offset="0x88e3" name="RB_BLIT_INFO">2131<bitfield name="UNK0" pos="0" type="boolean"/> <!-- s8 stencil restore/clear? But also color restore? -->2132<bitfield name="GMEM" pos="1" type="boolean"/> <!-- set for restore and clear to gmem? -->2133<bitfield name="SAMPLE_0" pos="2" type="boolean"/> <!-- takes sample 0 instead of averaging -->2134<bitfield name="DEPTH" pos="3" type="boolean"/> <!-- z16/z32/z24s8/x24x8 clear or resolve? -->2135<doc>2136For clearing depth/stencil21371 - depth21382 - stencil21393 - depth+stencil2140For clearing color buffer:2141then probably a component mask, I always see 0xf2142</doc>2143<bitfield name="CLEAR_MASK" low="4" high="7"/>2144<bitfield name="UNK8" low="8" high="9"/>2145<bitfield name="UNK12" low="12" high="15"/>2146</reg32>2147<!-- 0x88e4-0x88ef invalid -->2148<!-- always 0x0 ? -->2149<reg32 offset="0x88f0" name="RB_UNKNOWN_88F0" low="0" high="11"/>2150<!-- could be for separate stencil? (or may not be a flag buffer at all) -->2151<reg64 offset="0x88f1" name="RB_UNK_FLAG_BUFFER_BASE" type="waddress" align="64"/>2152<reg32 offset="0x88f3" name="RB_UNK_FLAG_BUFFER_PITCH">2153<bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>2154<bitfield name="ARRAY_PITCH" low="11" high="23" shr="7" type="uint"/>2155</reg32>2156<reg32 offset="0x88f4" name="RB_UNKNOWN_88F4" low="0" high="2"/>2157<!-- 0x88f5-0x88ff invalid -->2158<reg64 offset="0x8900" name="RB_DEPTH_FLAG_BUFFER_BASE" type="waddress" align="64"/>2159<reg32 offset="0x8902" name="RB_DEPTH_FLAG_BUFFER_PITCH">2160<bitfield name="PITCH" low="0" high="6" shr="6" type="uint"/>2161<!-- TODO: actually part of array pitch -->2162<bitfield name="UNK8" low="8" high="10"/>2163<bitfield name="ARRAY_PITCH" low="11" high="27" shr="7" type="uint"/>2164</reg32>2165<array offset="0x8903" name="RB_MRT_FLAG_BUFFER" stride="3" length="8">2166<reg64 offset="0" name="ADDR" type="waddress" align="64"/>2167<reg32 offset="2" name="PITCH">2168<bitfield name="PITCH" low="0" high="10" shr="6" type="uint"/>2169<bitfield name="ARRAY_PITCH" low="11" high="28" shr="7" type="uint"/>2170</reg32>2171</array>2172<!-- 0x891b-0x8926 invalid -->2173<reg64 offset="0x8927" name="RB_SAMPLE_COUNT_ADDR" type="waddress" align="16"/>2174<!-- 0x8929-0x89ff invalid -->21752176<!-- TODO: there are some registers in the 0x8a00-0x8bff range -->21772178<reg32 offset="0x8c00" name="RB_2D_BLIT_CNTL" type="a6xx_2d_blit_cntl"/>2179<reg32 offset="0x8c01" name="RB_2D_UNKNOWN_8C01" low="0" high="31"/>21802181<bitset name="a6xx_2d_surf_info" inline="yes">2182<bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>2183<bitfield name="TILE_MODE" low="8" high="9" type="a6xx_tile_mode"/>2184<bitfield name="COLOR_SWAP" low="10" high="11" type="a3xx_color_swap"/>2185<bitfield name="FLAGS" pos="12" type="boolean"/>2186<bitfield name="SRGB" pos="13" type="boolean"/>2187<!-- the rest is only for src -->2188<bitfield name="SAMPLES" low="14" high="15" type="a3xx_msaa_samples"/>2189<bitfield name="FILTER" pos="16" type="boolean"/>2190<bitfield name="UNK17" pos="17" type="boolean"/>2191<bitfield name="SAMPLES_AVERAGE" pos="18" type="boolean"/>2192<bitfield name="UNK19" pos="19" type="boolean"/>2193<bitfield name="UNK20" pos="20" type="boolean"/>2194<bitfield name="UNK21" pos="21" type="boolean"/>2195<bitfield name="UNK22" pos="22" type="boolean"/>2196<bitfield name="UNK23" low="23" high="26"/>2197<bitfield name="UNK28" pos="28" type="boolean"/>2198</bitset>21992200<!-- 0x8c02-0x8c16 invalid -->2201<!-- TODO: RB_2D_DST_INFO has 17 valid bits (doesn't match a6xx_2d_surf_info) -->2202<reg32 offset="0x8c17" name="RB_2D_DST_INFO" type="a6xx_2d_surf_info"/>2203<reg64 offset="0x8c18" name="RB_2D_DST" type="waddress" align="64"/>2204<reg32 offset="0x8c1a" name="RB_2D_DST_PITCH" low="0" high="15" shr="6" type="uint"/>2205<!-- this is a guess but seems likely (for NV12/IYUV): -->2206<reg64 offset="0x8c1b" name="RB_2D_DST_PLANE1" type="waddress" align="64"/>2207<reg32 offset="0x8c1d" name="RB_2D_DST_PLANE_PITCH" low="0" high="15" shr="6" type="uint"/>2208<reg64 offset="0x8c1e" name="RB_2D_DST_PLANE2" type="waddress" align="64"/>22092210<reg64 offset="0x8c20" name="RB_2D_DST_FLAGS" type="waddress" align="64"/>2211<reg32 offset="0x8c22" name="RB_2D_DST_FLAGS_PITCH" low="0" high="7" shr="6" type="uint"/>2212<!-- this is a guess but seems likely (for NV12 with UBWC): -->2213<reg64 offset="0x8c23" name="RB_2D_DST_FLAGS_PLANE" type="waddress" align="64"/>2214<reg32 offset="0x8c25" name="RB_2D_DST_FLAGS_PLANE_PITCH" low="0" high="7" shr="6" type="uint"/>22152216<!-- TODO: 0x8c26-0x8c33 are all full 32-bit registers -->2217<!-- unlike a5xx, these are per channel values rather than packed -->2218<reg32 offset="0x8c2c" name="RB_2D_SRC_SOLID_C0"/>2219<reg32 offset="0x8c2d" name="RB_2D_SRC_SOLID_C1"/>2220<reg32 offset="0x8c2e" name="RB_2D_SRC_SOLID_C2"/>2221<reg32 offset="0x8c2f" name="RB_2D_SRC_SOLID_C3"/>2222<!-- 0x8c34-0x8dff invalid -->22232224<!-- always 0x1 ? either doesn't exist for a650 or write-only: -->2225<reg32 offset="0x8e01" name="RB_UNKNOWN_8E01"/>2226<!-- 0x8e00-0x8e03 invalid -->2227<reg32 offset="0x8e04" name="RB_UNKNOWN_8E04"/> <!-- TODO: valid mask 0xfffffeff -->2228<reg32 offset="0x8e05" name="RB_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>2229<!-- 0x8e06 invalid -->2230<reg32 offset="0x8e07" name="RB_CCU_CNTL">2231<!-- GMEM offset of CCU color cache2232CCU depth cache starts at zero, so this should be the size2233of the depth cache for direct rendering2234for GMEM rendering, we set it to GMEM size minus the minimum2235CCU color cache size. CCU color cache will be needed in some2236resolve cases, and in those cases we need to reserve the end2237of GMEM for color cache.2238-->2239<bitfield name="COLOR_OFFSET" low="23" high="31" shr="12" type="hex"/>2240<bitfield name="GMEM" pos="22" type="boolean"/> <!-- set for GMEM path -->2241<bitfield name="UNK2" pos="2" type="boolean"/> <!-- sometimes set with GMEM? -->2242<!--TODO: valid mask 0xfffffc1f -->2243</reg32>2244<reg32 offset="0x8e08" name="RB_NC_MODE_CNTL">2245<bitfield name="MODE" pos="0" type="boolean"/>2246<bitfield name="LOWER_BIT" low="1" high="2" type="uint"/>2247<bitfield name="MIN_ACCESS_LENGTH" pos="3" type="boolean"/> <!-- true=64b false=32b -->2248<bitfield name="AMSBC" pos="4" type="boolean"/>2249<bitfield name="UPPER_BIT" pos="10" type="uint"/>2250<bitfield name="RGB565_PREDICATOR" pos="11" type="boolean"/>2251<bitfield name="UNK12" low="12" high="13"/>2252</reg32>2253<!-- 0x8e09-0x8e0f invalid -->2254<array offset="0x8e10" name="RB_PERFCTR_RB_SEL" stride="1" length="8"/>2255<array offset="0x8e18" name="RB_PERFCTR_CCU_SEL" stride="1" length="5"/>2256<!-- 0x8e1d-0x8e1f invalid -->2257<!-- 0x8e20-0x8e25 more perfcntr sel? -->2258<!-- 0x8e26-0x8e27 invalid -->2259<reg32 offset="0x8e28" name="RB_UNKNOWN_8E28" low="0" high="10"/>2260<!-- 0x8e29-0x8e2b invalid -->2261<array offset="0x8e2c" name="RB_PERFCTR_CMP_SEL" stride="1" length="4"/>2262<reg32 offset="0x8e3b" name="RB_RB_SUB_BLOCK_SEL_CNTL_HOST"/>2263<reg32 offset="0x8e3d" name="RB_RB_SUB_BLOCK_SEL_CNTL_CD"/>2264<!-- 0x8e3e-0x8e4f invalid -->2265<!-- GMEM save/restore for preemption: -->2266<reg32 offset="0x8e50" name="RB_CONTEXT_SWITCH_GMEM_SAVE_RESTORE" pos="0" type="boolean"/>2267<!-- address for GMEM save/restore? -->2268<reg32 offset="0x8e51" name="RB_UNKNOWN_8E51" type="waddress" align="1"/>2269<!-- 0x8e53-0x8e7f invalid -->2270<!-- 0x8e80-0x8e83 are valid -->2271<!-- 0x8e84-0x90ff invalid -->22722273<!-- 0x9000-0x90ff invalid -->22742275<!-- something to do with geometry shader: -->2276<reg32 offset="0x9100" name="VPC_UNKNOWN_9100" low="0" high="7"/>22772278<bitset name="a6xx_vpc_xs_clip_cntl" inline="yes">2279<bitfield name="CLIP_MASK" low="0" high="7" type="uint"/>2280<!-- there can be up to 8 total clip/cull distance outputs,2281but apparenly VPC can only deal with vec4, so when there are2282more than 4 outputs a second location needs to be programmed2283-->2284<bitfield name="CLIP_DIST_03_LOC" low="8" high="15" type="uint"/>2285<bitfield name="CLIP_DIST_47_LOC" low="16" high="23" type="uint"/>2286</bitset>2287<reg32 offset="0x9101" name="VPC_VS_CLIP_CNTL" type="a6xx_vpc_xs_clip_cntl"/>2288<reg32 offset="0x9102" name="VPC_GS_CLIP_CNTL" type="a6xx_vpc_xs_clip_cntl"/>2289<reg32 offset="0x9103" name="VPC_DS_CLIP_CNTL" type="a6xx_vpc_xs_clip_cntl"/>22902291<bitset name="a6xx_vpc_xs_layer_cntl" inline="yes">2292<bitfield name="LAYERLOC" low="0" high="7" type="uint"/>2293<bitfield name="VIEWLOC" low="8" high="15" type="uint"/>2294</bitset>22952296<reg32 offset="0x9104" name="VPC_VS_LAYER_CNTL" type="a6xx_vpc_xs_layer_cntl"/>2297<reg32 offset="0x9105" name="VPC_GS_LAYER_CNTL" type="a6xx_vpc_xs_layer_cntl"/>2298<reg32 offset="0x9106" name="VPC_DS_LAYER_CNTL" type="a6xx_vpc_xs_layer_cntl"/>22992300<reg32 offset="0x9107" name="VPC_UNKNOWN_9107">2301<!-- this mirrors PC_RASTER_CNTL::DISCARD, although it seems it's unused -->2302<bitfield name="RASTER_DISCARD" pos="0" type="boolean"/>2303<bitfield name="UNK2" pos="2" type="boolean"/>2304</reg32>2305<reg32 offset="0x9108" name="VPC_POLYGON_MODE">2306<bitfield name="MODE" low="0" high="1" type="a6xx_polygon_mode"/>2307</reg32>2308<!-- 0x9109-0x91ff invalid -->2309<array offset="0x9200" name="VPC_VARYING_INTERP" stride="1" length="8">2310<reg32 offset="0x0" name="MODE"/>2311</array>2312<array offset="0x9208" name="VPC_VARYING_PS_REPL" stride="1" length="8">2313<reg32 offset="0x0" name="MODE"/>2314</array>23152316<!-- always 0x0 -->2317<reg32 offset="0x9210" name="VPC_UNKNOWN_9210" low="0" high="31"/>2318<reg32 offset="0x9211" name="VPC_UNKNOWN_9211" low="0" high="31"/>23192320<array offset="0x9212" name="VPC_VAR" stride="1" length="4">2321<!-- one bit per varying component: -->2322<reg32 offset="0" name="DISABLE"/>2323</array>23242325<reg32 offset="0x9216" name="VPC_SO_CNTL">2326<!--2327Choose which DWORD to write to. There is an array of2328(4 * 64) DWORD's, dumped in the devcoredump at2329HLSQ_INST_RAM dword 0x400. Each DWORD corresponds to a2330(VPC location, stream) pair like so:23312332location 0, stream 02333location 2, stream 02334...2335location 126, stream 02336location 0, stream 12337location 2, stream 12338...2339location 126, stream 12340location 0, stream 22341...23422343When EmitStreamVertex(N) happens, the HW goes to DWORD234464 * N and then "executes" the next 64 DWORD's.23452346This field is auto-incremented when VPC_SO_PROG is2347written to.2348-->2349<bitfield name="ADDR" low="0" high="7" type="hex"/>2350<!-- clear all A_EN and B_EN bits for all DWORD's -->2351<bitfield name="RESET" pos="16" type="boolean"/>2352</reg32>2353<!-- special register, write multiple times to load SO program (not readable) -->2354<reg32 offset="0x9217" name="VPC_SO_PROG">2355<bitfield name="A_BUF" low="0" high="1" type="uint"/>2356<bitfield name="A_OFF" low="2" high="10" shr="2" type="uint"/>2357<bitfield name="A_EN" pos="11" type="boolean"/>2358<bitfield name="B_BUF" low="12" high="13" type="uint"/>2359<bitfield name="B_OFF" low="14" high="22" shr="2" type="uint"/>2360<bitfield name="B_EN" pos="23" type="boolean"/>2361</reg32>23622363<reg64 offset="0x9218" name="VPC_SO_STREAM_COUNTS" type="waddress" align="32"/>23642365<array offset="0x921a" name="VPC_SO" stride="7" length="4">2366<reg64 offset="0" name="BUFFER_BASE" type="waddress" align="32"/>2367<reg32 offset="2" name="BUFFER_SIZE" low="2" high="31" shr="2"/>2368<reg32 offset="3" name="NCOMP" low="0" high="9"/> <!-- component count -->2369<reg32 offset="4" name="BUFFER_OFFSET" low="2" high="31" shr="2"/>2370<reg64 offset="5" name="FLUSH_BASE" type="waddress" align="32"/>2371</array>23722373<reg32 offset="0x9236" name="VPC_POINT_COORD_INVERT">2374<bitfield name="INVERT" pos="0" type="boolean"/>2375</reg32>2376<!-- 0x9237-0x92ff invalid -->2377<!-- always 0x0 ? -->2378<reg32 offset="0x9300" name="VPC_UNKNOWN_9300" low="0" high="2"/>23792380<bitset name="a6xx_vpc_xs_pack" inline="yes">2381<doc>2382num of varyings plus four for gl_Position (plus one if gl_PointSize)2383plus # of transform-feedback (streamout) varyings if using the2384hw streamout (rather than stg instructions in shader)2385</doc>2386<bitfield name="STRIDE_IN_VPC" low="0" high="7" type="uint"/>2387<bitfield name="POSITIONLOC" low="8" high="15" type="uint"/>2388<bitfield name="PSIZELOC" low="16" high="23" type="uint"/>2389<bitfield name="EXTRAPOS" low="24" high="27" type="uint">2390<doc>2391The number of extra copies of POSITION, i.e.2392number of views minus one when multi-position2393output is enabled, otherwise 0.2394</doc>2395</bitfield>2396</bitset>2397<reg32 offset="0x9301" name="VPC_VS_PACK" type="a6xx_vpc_xs_pack"/>2398<reg32 offset="0x9302" name="VPC_GS_PACK" type="a6xx_vpc_xs_pack"/>2399<reg32 offset="0x9303" name="VPC_DS_PACK" type="a6xx_vpc_xs_pack"/>24002401<reg32 offset="0x9304" name="VPC_CNTL_0">2402<bitfield name="NUMNONPOSVAR" low="0" high="7" type="uint"/>2403<!-- for fixed-function (i.e. no GS) gl_PrimitiveID in FS -->2404<bitfield name="PRIMIDLOC" low="8" high="15" type="uint"/>2405<bitfield name="VARYING" pos="16" type="boolean"/>2406<bitfield name="VIEWIDLOC" low="24" high="31" type="uint">2407<doc>2408This VPC location will be overwritten with2409ViewID when multiview is enabled. It's used when2410fragment shaders read ViewID. It's only2411strictly required for multi-position output,2412where the same VS invocation is used for all the2413views at once, but it can be used when multi-pos2414output is disabled too, to avoid having to pass2415ViewID through the VS.2416</doc>2417</bitfield>2418</reg32>24192420<reg32 offset="0x9305" name="VPC_SO_STREAM_CNTL">2421<!--2422It's offset by 1, and 0 means "disabled"2423-->2424<bitfield name="BUF0_STREAM" low="0" high="2" type="uint"/>2425<bitfield name="BUF1_STREAM" low="3" high="5" type="uint"/>2426<bitfield name="BUF2_STREAM" low="6" high="8" type="uint"/>2427<bitfield name="BUF3_STREAM" low="9" high="11" type="uint"/>2428<bitfield name="STREAM_ENABLE" low="15" high="18" type="hex"/>2429</reg32>2430<reg32 offset="0x9306" name="VPC_SO_DISABLE">2431<bitfield name="DISABLE" pos="0" type="boolean"/>2432</reg32>2433<!-- 0x9307-0x95ff invalid -->24342435<!-- TODO: 0x9600-0x97ff range -->2436<reg32 offset="0x9600" name="VPC_UNKNOWN_9600"/> <!-- always 0x0 ? TODO: 0x1fbf37ff valid mask -->2437<reg32 offset="0x9601" name="VPC_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>2438<reg32 offset="0x9602" name="VPC_UNKNOWN_9602" pos="0"/> <!-- always 0x0 ? -->2439<reg32 offset="0x9603" name="VPC_UNKNOWN_9603" low="0" high="26"/>2440<array offset="0x9604" name="VPC_PERFCTR_VPC_SEL" stride="1" length="6"/>2441<!-- 0x960a-0x9623 invalid -->2442<!-- TODO: regs from 0x9624-0x963a -->2443<!-- 0x963b-0x97ff invalid -->24442445<reg32 offset="0x9800" name="PC_TESS_NUM_VERTEX" low="0" high="5" type="uint"/>24462447<!-- always 0x0 ? -->2448<reg32 offset="0x9801" name="PC_HS_INPUT_SIZE">2449<bitfield name="SIZE" low="0" high="10"/>2450<bitfield name="UNK13" pos="13"/>2451</reg32>24522453<enum name="a6xx_tess_spacing">2454<value value="0x0" name="TESS_EQUAL"/>2455<value value="0x2" name="TESS_FRACTIONAL_ODD"/>2456<value value="0x3" name="TESS_FRACTIONAL_EVEN"/>2457</enum>2458<enum name="a6xx_tess_output">2459<value value="0x0" name="TESS_POINTS"/>2460<value value="0x1" name="TESS_LINES"/>2461<value value="0x2" name="TESS_CW_TRIS"/>2462<value value="0x3" name="TESS_CCW_TRIS"/>2463</enum>2464<reg32 offset="0x9802" name="PC_TESS_CNTL">2465<bitfield name="SPACING" low="0" high="1" type="a6xx_tess_spacing"/>2466<bitfield name="OUTPUT" low="2" high="3" type="a6xx_tess_output"/>2467</reg32>24682469<reg32 offset="0x9803" name="PC_RESTART_INDEX" low="0" high="31" type="uint"/>2470<reg32 offset="0x9804" name="PC_MODE_CNTL" low="0" high="7"/>24712472<!-- always 0x1 ? -->2473<reg32 offset="0x9805" name="PC_UNKNOWN_9805" low="0" high="2"/>24742475<!-- probably a mirror of VFD_CONTROL_6 -->2476<reg32 offset="0x9806" name="PC_PRIMID_PASSTHRU" pos="0" type="boolean"/>2477<!-- 0x980b-0x983f invalid -->24782479<!-- 0x9840 - 0x9842 are not readable -->2480<reg32 offset="0x9840" name="PC_DRAW_CMD">2481<bitfield name="STATE_ID" low="0" high="7"/>2482</reg32>24832484<reg32 offset="0x9841" name="PC_DISPATCH_CMD">2485<bitfield name="STATE_ID" low="0" high="7"/>2486</reg32>24872488<reg32 offset="0x9842" name="PC_EVENT_CMD">2489<!-- I think only the low bit is actually used? -->2490<bitfield name="STATE_ID" low="16" high="23"/>2491<bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>2492</reg32>24932494<!--24950x9880 written in a lot of places by SQE, same value gets written2496to control reg 0x12a. Set by CP_SET_MARKER, so lets name it after2497that2498-->2499<reg32 offset="0x9880" name="PC_MARKER"/>25002501<!-- 0x9843-0x997f invalid -->25022503<reg32 offset="0x9981" name="PC_POLYGON_MODE">2504<bitfield name="MODE" low="0" high="1" type="a6xx_polygon_mode"/>2505</reg32>25062507<reg32 offset="0x9980" name="PC_RASTER_CNTL">2508<!-- which stream to send to GRAS -->2509<bitfield name="STREAM" low="0" high="1" type="uint"/>2510<!-- discard primitives before rasterization -->2511<bitfield name="DISCARD" pos="2" type="boolean"/>2512</reg32>25132514<!-- 0x9982-0x9aff invalid -->25152516<reg32 offset="0x9b00" name="PC_PRIMITIVE_CNTL_0">2517<bitfield name="PRIMITIVE_RESTART" pos="0" type="boolean"/>2518<!-- maybe? b1 seems always set, so just assume it is for now: -->2519<bitfield name="PROVOKING_VTX_LAST" pos="1" type="boolean"/>2520<bitfield name="TESS_UPPER_LEFT_DOMAIN_ORIGIN" pos="2" type="boolean"/>2521<bitfield name="UNK3" pos="3" type="boolean"/>2522</reg32>25232524<bitset name="a6xx_xs_out_cntl" inline="yes">2525<doc>2526num of varyings plus four for gl_Position (plus one if gl_PointSize)2527plus # of transform-feedback (streamout) varyings if using the2528hw streamout (rather than stg instructions in shader)2529</doc>2530<bitfield name="STRIDE_IN_VPC" low="0" high="7" type="uint"/>2531<bitfield name="PSIZE" pos="8" type="boolean"/>2532<bitfield name="LAYER" pos="9" type="boolean"/>2533<bitfield name="VIEW" pos="10" type="boolean"/>2534<!-- note: PC_VS_OUT_CNTL doesn't have the PRIMITIVE_ID bit -->2535<bitfield name="PRIMITIVE_ID" pos="11" type="boolean"/>2536<bitfield name="CLIP_MASK" low="16" high="23" type="uint"/>2537</bitset>25382539<reg32 offset="0x9b01" name="PC_VS_OUT_CNTL" type="a6xx_xs_out_cntl"/>2540<reg32 offset="0x9b02" name="PC_GS_OUT_CNTL" type="a6xx_xs_out_cntl"/>2541<reg32 offset="0x9b03" name="PC_PRIMITIVE_CNTL_3" pos="11"/>2542<reg32 offset="0x9b04" name="PC_DS_OUT_CNTL" type="a6xx_xs_out_cntl"/>25432544<reg32 offset="0x9b05" name="PC_PRIMITIVE_CNTL_5">2545<doc>2546geometry shader2547</doc>2548<!-- TODO: first 16 bits are valid so something is wrong or missing here -->2549<bitfield name="GS_VERTICES_OUT" low="0" high="7" type="uint"/>2550<bitfield name="GS_INVOCATIONS" low="10" high="14" type="uint"/>2551<bitfield name="GS_OUTPUT" low="16" high="17" type="a6xx_tess_output"/>2552<bitfield name="UNK18" pos="18"/>2553</reg32>25542555<reg32 offset="0x9b06" name="PC_PRIMITIVE_CNTL_6">2556<doc>2557size in vec4s of per-primitive storage for gs. TODO: not actually in VPC2558</doc>2559<bitfield name="STRIDE_IN_VPC" low="0" high="10" type="uint"/>2560</reg32>25612562<bitset name="a6xx_multiview_cntl" inline="yes">2563<bitfield name="ENABLE" pos="0" type="boolean"/>2564<bitfield name="DISABLEMULTIPOS" pos="1" type="boolean">2565<doc>2566Multi-position output lets the last geometry2567stage shader write multiple copies of2568gl_Position. If disabled then the VS is run once2569for each view, and ViewID is passed as a2570register to the VS.2571</doc>2572</bitfield>2573<bitfield name="VIEWS" low="2" high="6" type="uint"/>2574</bitset>25752576<reg32 offset="0x9b07" name="PC_MULTIVIEW_CNTL" type="a6xx_multiview_cntl"/>2577<!-- mask of enabled views, doesn't exist on A630 -->2578<reg32 offset="0x9b08" name="PC_MULTIVIEW_MASK" type="hex" low="0" high="15"/>2579<!-- 0x9b09-0x9bff invalid -->2580<reg32 offset="0x9c00" name="PC_2D_EVENT_CMD">2581<!-- special register (but note first 8 bits can be written/read) -->2582<bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>2583<bitfield name="STATE_ID" low="8" high="15"/>2584</reg32>2585<!-- 0x9c01-0x9dff invalid -->2586<!-- TODO: 0x9e00-0xa000 range incomplete -->2587<reg32 offset="0x9e00" name="PC_DBG_ECO_CNTL"/>2588<reg32 offset="0x9e01" name="PC_ADDR_MODE_CNTL" type="a5xx_address_mode"/>2589<reg64 offset="0x9e04" name="PC_DRAW_INDX_BASE"/>2590<reg32 offset="0x9e06" name="PC_DRAW_FIRST_INDX" type="uint"/>2591<reg32 offset="0x9e07" name="PC_DRAW_MAX_INDICES" type="uint"/>2592<reg64 offset="0x9e08" name="PC_TESSFACTOR_ADDR" type="waddress" align="32"/>25932594<reg32 offset="0x9e0b" name="PC_DRAW_INITIATOR" type="vgt_draw_initiator_a4xx">2595<doc>2596Possibly not really "initiating" the draw but the layout is similar2597to VGT_DRAW_INITIATOR on older gens2598</doc>2599</reg32>2600<reg32 offset="0x9e0c" name="PC_DRAW_NUM_INSTANCES" type="uint"/>2601<reg32 offset="0x9e0d" name="PC_DRAW_NUM_INDICES" type="uint"/>26022603<!-- These match the contents of CP_SET_BIN_DATA (not written directly) -->2604<reg32 offset="0x9e11" name="PC_VSTREAM_CONTROL">2605<bitfield name="UNK0" low="0" high="15"/>2606<bitfield name="VSC_SIZE" low="16" high="21" type="uint"/>2607<bitfield name="VSC_N" low="22" high="26" type="uint"/>2608</reg32>2609<reg64 offset="0x9e12" name="PC_BIN_PRIM_STRM" type="waddress" align="32"/>2610<reg64 offset="0x9e14" name="PC_BIN_DRAW_STRM" type="waddress" align="32"/>26112612<reg32 offset="0x9e1c" name="PC_VISIBILITY_OVERRIDE">2613<doc>Written by CP_SET_VISIBILITY_OVERRIDE handler</doc>2614<bitfield name="OVERRIDE" pos="0" type="boolean"/>2615</reg32>26162617<array offset="0x9e34" name="PC_PERFCTR_PC_SEL" stride="1" length="8"/>26182619<!-- always 0x0 -->2620<reg32 offset="0x9e72" name="PC_UNKNOWN_9E72"/>26212622<reg32 offset="0xa000" name="VFD_CONTROL_0">2623<bitfield name="FETCH_CNT" low="0" high="5" type="uint"/>2624<bitfield name="DECODE_CNT" low="8" high="13" type="uint"/>2625</reg32>2626<reg32 offset="0xa001" name="VFD_CONTROL_1">2627<bitfield name="REGID4VTX" low="0" high="7" type="a3xx_regid"/>2628<bitfield name="REGID4INST" low="8" high="15" type="a3xx_regid"/>2629<bitfield name="REGID4PRIMID" low="16" high="23" type="a3xx_regid"/>2630<!-- only used for VS in non-multi-position-output case -->2631<bitfield name="REGID4VIEWID" low="24" high="31" type="a3xx_regid"/>2632</reg32>2633<reg32 offset="0xa002" name="VFD_CONTROL_2">2634<bitfield name="REGID_HSPATCHID" low="0" high="7" type="a3xx_regid"/>2635<bitfield name="REGID_INVOCATIONID" low="8" high="15" type="a3xx_regid"/>2636</reg32>2637<reg32 offset="0xa003" name="VFD_CONTROL_3">2638<bitfield name="UNK0" low="0" high="7" type="a3xx_regid"/>2639<bitfield name="REGID_DSPATCHID" low="8" high="15" type="a3xx_regid"/>2640<bitfield name="REGID_TESSX" low="16" high="23" type="a3xx_regid"/>2641<bitfield name="REGID_TESSY" low="24" high="31" type="a3xx_regid"/>2642</reg32>2643<reg32 offset="0xa004" name="VFD_CONTROL_4">2644<bitfield name="UNK0" low="0" high="7" type="a3xx_regid"/>2645</reg32>2646<reg32 offset="0xa005" name="VFD_CONTROL_5">2647<bitfield name="REGID_GSHEADER" low="0" high="7" type="a3xx_regid"/>2648<bitfield name="UNK8" low="8" high="15" type="a3xx_regid"/>2649</reg32>2650<reg32 offset="0xa006" name="VFD_CONTROL_6">2651<!--2652True if gl_PrimitiveID is read via the FS and there is2653no matching write from the GS, and therefore it needs to2654be passed through via fixed-function logic.2655-->2656<bitfield name="PRIMID_PASSTHRU" pos="0" type="boolean"/>2657</reg32>26582659<reg32 offset="0xa007" name="VFD_MODE_CNTL">2660<bitfield name="BINNING_PASS" pos="0" type="boolean"/>2661<bitfield name="UNK1" pos="1" type="boolean"/>2662<bitfield name="UNK2" pos="2" type="boolean"/>2663</reg32>26642665<reg32 offset="0xa008" name="VFD_MULTIVIEW_CNTL" type="a6xx_multiview_cntl"/>2666<reg32 offset="0xa009" name="VFD_ADD_OFFSET">2667<!-- add VFD_INDEX_OFFSET to REGID4VTX -->2668<bitfield name="VERTEX" pos="0" type="boolean"/>2669<!-- add VFD_INSTANCE_START_OFFSET to REGID4INST -->2670<bitfield name="INSTANCE" pos="1" type="boolean"/>2671</reg32>26722673<reg32 offset="0xa00e" name="VFD_INDEX_OFFSET"/>2674<reg32 offset="0xa00f" name="VFD_INSTANCE_START_OFFSET"/>2675<array offset="0xa010" name="VFD_FETCH" stride="4" length="32">2676<reg64 offset="0x0" name="BASE" type="address" align="1"/>2677<reg32 offset="0x2" name="SIZE" type="uint"/>2678<reg32 offset="0x3" name="STRIDE" low="0" high="11" type="uint"/>2679</array>2680<array offset="0xa090" name="VFD_DECODE" stride="2" length="32">2681<reg32 offset="0x0" name="INSTR">2682<!-- IDX and byte OFFSET into VFD_FETCH -->2683<bitfield name="IDX" low="0" high="4" type="uint"/>2684<bitfield name="OFFSET" low="5" high="16"/>2685<bitfield name="INSTANCED" pos="17" type="boolean"/>2686<bitfield name="FORMAT" low="20" high="27" type="a6xx_format"/>2687<bitfield name="SWAP" low="28" high="29" type="a3xx_color_swap"/>2688<bitfield name="UNK30" pos="30" type="boolean"/>2689<bitfield name="FLOAT" pos="31" type="boolean"/>2690</reg32>2691<reg32 offset="0x1" name="STEP_RATE" type="uint"/>2692</array>2693<array offset="0xa0d0" name="VFD_DEST_CNTL" stride="1" length="32">2694<reg32 offset="0x0" name="INSTR">2695<bitfield name="WRITEMASK" low="0" high="3" type="hex"/>2696<bitfield name="REGID" low="4" high="11" type="a3xx_regid"/>2697</reg32>2698</array>26992700<!-- 0 on 618, 1 on 630/640, 2 on a650? (SP count - 1) ? -->2701<reg32 offset="0xa0f8" name="SP_UNKNOWN_A0F8" low="0" high="2"/>27022703<!--2704Note: this seems to always be paired with another bit in another2705block.2706-->2707<enum name="a6xx_threadsize">2708<value value="0" name="THREAD64"/>2709<value value="1" name="THREAD128"/>2710</enum>2711<reg32 offset="0xa601" name="VFD_ADDR_MODE_CNTL" type="a5xx_address_mode"/>2712<array offset="0xa610" name="VFD_PERFCTR_VFD_SEL" stride="1" length="8"/>27132714<bitset name="a6xx_sp_xs_ctrl_reg0" inline="yes">2715<!-- if set to SINGLE, only use 1 concurrent wave on each SP -->2716<bitfield name="THREADMODE" pos="0" type="a3xx_threadmode"/>2717<!--2718When b31 set we just see FULLREGFOOTPRINT set. The pattern of2719used registers is a bit odd too:2720- used (half): 0-15 68-179 (cnt=128, max=179)2721- used (full): 0-33 50-69 71 73 75 77 79 81 83 85 87 89-105 107 109 111 113 115 117 119 121 123 125 127>2722whereas we usually see a (mostly) contiguous range of regs used. But if2723I merge the full and half ranges (ie. rN counts as hr(N*2) and hr(N*2+1)),2724then:2725- used (merged): 0-191 (cnt=192, max=191)2726So I think if b31 is set, then the half precision registers overlap2727the full precision registers. (Which seems like a pretty sensible2728feature, actually I'm not sure when you *wouldn't* want to use that,2729since it gives register allocation more flexibility)2730-->2731<bitfield name="HALFREGFOOTPRINT" low="1" high="6" type="uint"/>2732<bitfield name="FULLREGFOOTPRINT" low="7" high="12" type="uint"/>2733<!-- could it be a low bit of branchstack? -->2734<bitfield name="UNK13" pos="13" type="boolean"/>2735<!-- seems to be nesting level for flow control:.. -->2736<bitfield name="BRANCHSTACK" low="14" high="19" type="uint"/>2737</bitset>27382739<bitset name="a6xx_sp_xs_config" inline="yes">2740<!--2741Each of these are set if the given resource type is used2742with the Vulkan/bindless binding model.2743-->2744<bitfield name="BINDLESS_TEX" pos="0" type="boolean"/>2745<bitfield name="BINDLESS_SAMP" pos="1" type="boolean"/>2746<bitfield name="BINDLESS_IBO" pos="2" type="boolean"/>2747<bitfield name="BINDLESS_UBO" pos="3" type="boolean"/>27482749<bitfield name="ENABLED" pos="8" type="boolean"/>2750<!--2751number of textures and samplers.. these might be swapped, with GL I2752always see the same value for both.2753-->2754<bitfield name="NTEX" low="9" high="16" type="uint"/>2755<bitfield name="NSAMP" low="17" high="21" type="uint"/>2756<bitfield name="NIBO" low="22" high="28" type="uint"/>2757</bitset>27582759<bitset name="a6xx_sp_xs_prim_cntl" inline="yes">2760<!-- # of VS outputs including pos/psize -->2761<bitfield name="OUT" low="0" high="5" type="uint"/>2762<!-- FLAGS_REGID only for GS -->2763<bitfield name="FLAGS_REGID" low="6" high="13" type="a3xx_regid"/>2764</bitset>27652766<reg32 offset="0xa800" name="SP_VS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0">2767<bitfield name="MERGEDREGS" pos="20" type="boolean"/>2768<!-- ??? (blob has it set) -->2769<bitfield name="UNK21" pos="21" type="boolean"/>2770</reg32>2771<!-- bitmask of true/false conditions for VS brac.N instructions,2772bit N corresponds to brac.N -->2773<reg32 offset="0xa801" name="SP_VS_BRANCH_COND" type="hex"/>2774<!-- # of VS outputs including pos/psize -->2775<reg32 offset="0xa802" name="SP_VS_PRIMITIVE_CNTL" type="a6xx_sp_xs_prim_cntl"/>2776<array offset="0xa803" name="SP_VS_OUT" stride="1" length="16">2777<reg32 offset="0x0" name="REG">2778<bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>2779<bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>2780<bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>2781<bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>2782</reg32>2783</array>2784<!--2785Starting with a5xx, position/psize outputs from shader end up in the2786SP_VS_OUT map, with highest OUTLOCn position. (Generally they are2787the last entries too, except when gl_PointCoord is used, blob inserts2788an extra varying after, but with a lower OUTLOC position. If present,2789psize is last, preceded by position.2790-->2791<array offset="0xa813" name="SP_VS_VPC_DST" stride="1" length="8">2792<reg32 offset="0x0" name="REG">2793<bitfield name="OUTLOC0" low="0" high="7" type="uint"/>2794<bitfield name="OUTLOC1" low="8" high="15" type="uint"/>2795<bitfield name="OUTLOC2" low="16" high="23" type="uint"/>2796<bitfield name="OUTLOC3" low="24" high="31" type="uint"/>2797</reg32>2798</array>27992800<bitset name="a6xx_sp_xs_pvt_mem_param" inline="yes">2801<bitfield name="MEMSIZEPERITEM" low="0" high="7" shr="9">2802<doc>The size of memory that ldp/stp can address.</doc>2803</bitfield>2804<bitfield name="HWSTACKSIZEPERTHREAD" low="24" high="31">2805<doc>2806Seems to be the same as a3xx. The maximum stack2807size in units of 4 calls, so a call depth of 72808would result in a value of 2.2809TODO: What's the actual size per call, i.e. the2810size of the PC? a3xx docs say it's 16 bits2811there, but the length register now takes 28 bits2812so it's probably been bumped to 32 bits.2813</doc>2814</bitfield>2815</bitset>28162817<bitset name="a6xx_sp_xs_pvt_mem_size" inline="yes">2818<bitfield name="TOTALPVTMEMSIZE" low="0" high="17" shr="12"/>2819<bitfield name="PERWAVEMEMLAYOUT" pos="31" type="boolean">2820<doc>2821There are four indices used to compute the2822private memory location for an access:28232824- stp/ldp offset2825- fiber id2826- wavefront id (a swizzled version of what "getwid" returns)2827- SP ID (the same as what "getspid" returns)28282829The stride for the SP ID is always set by2830TOTALPVTMEMSIZE. In the per-wave layout, the2831indices are used in this order:28322833- offset % 4 (offset within dword)2834- fiber id2835- offset / 42836- wavefront id2837- SP ID28382839and the stride for the wavefront ID is2840MEMSIZEPERITEM, multiplied by 128 (fibers per2841wavefront). In the per-fiber layout, the indices2842are used in this order:28432844- offset2845- fiber id % 42846- wavefront id2847- fiber id / 42848- SP ID28492850and the stride for the fiber id/wavefront id2851combo is MEMSIZEPERITEM.28522853Note: Accesses of more than 1 dword do not work2854with per-fiber layout. The blob will fall back2855to per-wave instead.2856</doc>2857</bitfield>2858</bitset>28592860<bitset name="a6xx_sp_xs_pvt_mem_hw_stack_offset" inline="yes">2861<doc>2862This seems to be be the equivalent of HWSTACKOFFSET in2863a3xx. The ldp/stp offset formula above isn't affected by2864HWSTACKSIZEPERTHREAD at all, so the HW return address2865stack seems to be after all the normal per-SP private2866memory.2867</doc>2868<bitfield name="OFFSET" low="0" high="18" shr="11"/>2869</bitset>28702871<reg32 offset="0xa81b" name="SP_VS_OBJ_FIRST_EXEC_OFFSET" type="uint"/>2872<reg64 offset="0xa81c" name="SP_VS_OBJ_START" type="address" align="32"/>2873<reg32 offset="0xa81e" name="SP_VS_PVT_MEM_PARAM" type="a6xx_sp_xs_pvt_mem_param"/>2874<reg64 offset="0xa81f" name="SP_VS_PVT_MEM_ADDR" type="waddress" align="32"/>2875<reg32 offset="0xa821" name="SP_VS_PVT_MEM_SIZE" type="a6xx_sp_xs_pvt_mem_size"/>2876<reg32 offset="0xa822" name="SP_VS_TEX_COUNT" low="0" high="7" type="uint"/>2877<reg32 offset="0xa823" name="SP_VS_CONFIG" type="a6xx_sp_xs_config"/>2878<reg32 offset="0xa824" name="SP_VS_INSTRLEN" low="0" high="27" type="uint"/>2879<reg32 offset="0xa825" name="SP_VS_PVT_MEM_HW_STACK_OFFSET" type="a6xx_sp_xs_pvt_mem_hw_stack_offset"/>28802881<reg32 offset="0xa830" name="SP_HS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0">2882<!--2883There is no mergedregs bit, that comes from the previous stage (VS).2884No idea what this bit does here.2885-->2886<bitfield name="UNK20" pos="20" type="boolean"/>2887</reg32>2888<!--2889Total size of local storage in dwords divided by the wave size.2890The maximum value is 64. With the wave size being always 64 for HS,2891the maximum size of local storage should be:289264 (wavesize) * 64 (SP_HS_WAVE_INPUT_SIZE) * 4 = 16k2893-->2894<reg32 offset="0xa831" name="SP_HS_WAVE_INPUT_SIZE" low="0" high="7" type="uint"/>2895<reg32 offset="0xa832" name="SP_HS_BRANCH_COND" type="hex"/>28962897<!-- TODO: exact same layout as 0xa81b-0xa825 -->2898<reg32 offset="0xa833" name="SP_HS_OBJ_FIRST_EXEC_OFFSET" type="uint"/>2899<reg64 offset="0xa834" name="SP_HS_OBJ_START" type="address" align="32"/>2900<reg32 offset="0xa836" name="SP_HS_PVT_MEM_PARAM" type="a6xx_sp_xs_pvt_mem_param"/>2901<reg64 offset="0xa837" name="SP_HS_PVT_MEM_ADDR" type="waddress" align="32"/>2902<reg32 offset="0xa839" name="SP_HS_PVT_MEM_SIZE" type="a6xx_sp_xs_pvt_mem_size"/>2903<reg32 offset="0xa83a" name="SP_HS_TEX_COUNT" low="0" high="7" type="uint"/>2904<reg32 offset="0xa83b" name="SP_HS_CONFIG" type="a6xx_sp_xs_config"/>2905<reg32 offset="0xa83c" name="SP_HS_INSTRLEN" low="0" high="27" type="uint"/>2906<reg32 offset="0xa83d" name="SP_HS_PVT_MEM_HW_STACK_OFFSET" type="a6xx_sp_xs_pvt_mem_hw_stack_offset"/>29072908<reg32 offset="0xa840" name="SP_DS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0">2909<bitfield name="MERGEDREGS" pos="20" type="boolean"/>2910</reg32>2911<reg32 offset="0xa841" name="SP_DS_BRANCH_COND" type="hex"/>29122913<!-- TODO: exact same layout as 0xa802-0xa81a -->2914<reg32 offset="0xa842" name="SP_DS_PRIMITIVE_CNTL" type="a6xx_sp_xs_prim_cntl"/>2915<array offset="0xa843" name="SP_DS_OUT" stride="1" length="16">2916<reg32 offset="0x0" name="REG">2917<bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>2918<bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>2919<bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>2920<bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>2921</reg32>2922</array>2923<array offset="0xa853" name="SP_DS_VPC_DST" stride="1" length="8">2924<reg32 offset="0x0" name="REG">2925<bitfield name="OUTLOC0" low="0" high="7" type="uint"/>2926<bitfield name="OUTLOC1" low="8" high="15" type="uint"/>2927<bitfield name="OUTLOC2" low="16" high="23" type="uint"/>2928<bitfield name="OUTLOC3" low="24" high="31" type="uint"/>2929</reg32>2930</array>29312932<!-- TODO: exact same layout as 0xa81b-0xa825 -->2933<reg32 offset="0xa85b" name="SP_DS_OBJ_FIRST_EXEC_OFFSET" type="uint"/>2934<reg64 offset="0xa85c" name="SP_DS_OBJ_START" type="address" align="32"/>2935<reg32 offset="0xa85e" name="SP_DS_PVT_MEM_PARAM" type="a6xx_sp_xs_pvt_mem_param"/>2936<reg64 offset="0xa85f" name="SP_DS_PVT_MEM_ADDR" type="waddress" align="32"/>2937<reg32 offset="0xa861" name="SP_DS_PVT_MEM_SIZE" type="a6xx_sp_xs_pvt_mem_size"/>2938<reg32 offset="0xa862" name="SP_DS_TEX_COUNT" low="0" high="7" type="uint"/>2939<reg32 offset="0xa863" name="SP_DS_CONFIG" type="a6xx_sp_xs_config"/>2940<reg32 offset="0xa864" name="SP_DS_INSTRLEN" low="0" high="27" type="uint"/>2941<reg32 offset="0xa865" name="SP_DS_PVT_MEM_HW_STACK_OFFSET" type="a6xx_sp_xs_pvt_mem_hw_stack_offset"/>29422943<reg32 offset="0xa870" name="SP_GS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0">2944<!--2945There is no mergedregs bit, that comes from the previous stage (VS/DS).2946No idea what this bit does here.2947-->2948<bitfield name="UNK20" pos="20" type="boolean"/>2949</reg32>2950<reg32 offset="0xa871" name="SP_GS_PRIM_SIZE" low="0" high="7" type="uint">2951<doc>2952Normally the size of the output of the last stage in2953dwords. It should be programmed as follows:29542955size less than 63 - size2956size of 63 (?) or 64 - 632957size greater than 64 - 6429582959What to program when the size is 61-63 is a guess, but2960both the blob and ir3 align the size to 4 dword's so it2961doesn't matter in practice.2962</doc>2963</reg32>2964<reg32 offset="0xa872" name="SP_GS_BRANCH_COND" type="hex"/>29652966<!-- TODO: exact same layout as 0xa802-0xa81a -->2967<reg32 offset="0xa873" name="SP_GS_PRIMITIVE_CNTL" type="a6xx_sp_xs_prim_cntl"/>2968<array offset="0xa874" name="SP_GS_OUT" stride="1" length="16">2969<reg32 offset="0x0" name="REG">2970<bitfield name="A_REGID" low="0" high="7" type="a3xx_regid"/>2971<bitfield name="A_COMPMASK" low="8" high="11" type="hex"/>2972<bitfield name="B_REGID" low="16" high="23" type="a3xx_regid"/>2973<bitfield name="B_COMPMASK" low="24" high="27" type="hex"/>2974</reg32>2975</array>29762977<array offset="0xa884" name="SP_GS_VPC_DST" stride="1" length="8">2978<reg32 offset="0x0" name="REG">2979<bitfield name="OUTLOC0" low="0" high="7" type="uint"/>2980<bitfield name="OUTLOC1" low="8" high="15" type="uint"/>2981<bitfield name="OUTLOC2" low="16" high="23" type="uint"/>2982<bitfield name="OUTLOC3" low="24" high="31" type="uint"/>2983</reg32>2984</array>29852986<!-- TODO: exact same layout as 0xa81b-0xa825 -->2987<reg32 offset="0xa88c" name="SP_GS_OBJ_FIRST_EXEC_OFFSET" type="uint"/>2988<reg64 offset="0xa88d" name="SP_GS_OBJ_START" type="address" align="32"/>2989<reg32 offset="0xa88f" name="SP_GS_PVT_MEM_PARAM" type="a6xx_sp_xs_pvt_mem_param"/>2990<reg64 offset="0xa890" name="SP_GS_PVT_MEM_ADDR" type="waddress" align="32"/>2991<reg32 offset="0xa892" name="SP_GS_PVT_MEM_SIZE" type="a6xx_sp_xs_pvt_mem_size"/>2992<reg32 offset="0xa893" name="SP_GS_TEX_COUNT" low="0" high="7" type="uint"/>2993<reg32 offset="0xa894" name="SP_GS_CONFIG" type="a6xx_sp_xs_config"/>2994<reg32 offset="0xa895" name="SP_GS_INSTRLEN" low="0" high="27" type="uint"/>2995<reg32 offset="0xa896" name="SP_GS_PVT_MEM_HW_STACK_OFFSET" type="a6xx_sp_xs_pvt_mem_hw_stack_offset"/>29962997<reg64 offset="0xa8a0" name="SP_VS_TEX_SAMP" type="address" align="16"/>2998<reg64 offset="0xa8a2" name="SP_HS_TEX_SAMP" type="address" align="16"/>2999<reg64 offset="0xa8a4" name="SP_DS_TEX_SAMP" type="address" align="16"/>3000<reg64 offset="0xa8a6" name="SP_GS_TEX_SAMP" type="address" align="16"/>3001<reg64 offset="0xa8a8" name="SP_VS_TEX_CONST" type="address" align="64"/>3002<reg64 offset="0xa8aa" name="SP_HS_TEX_CONST" type="address" align="64"/>3003<reg64 offset="0xa8ac" name="SP_DS_TEX_CONST" type="address" align="64"/>3004<reg64 offset="0xa8ae" name="SP_GS_TEX_CONST" type="address" align="64"/>30053006<!-- TODO: 4 unknown bool registers 0xa8c0-0xa8c3 -->30073008<reg32 offset="0xa980" name="SP_FS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0">3009<bitfield name="THREADSIZE" pos="20" type="a6xx_threadsize"/>3010<bitfield name="UNK21" pos="21" type="boolean"/>3011<bitfield name="VARYING" pos="22" type="boolean"/>3012<bitfield name="DIFF_FINE" pos="23" type="boolean"/>3013<!-- note: vk blob uses bit24 -->3014<bitfield name="UNK24" pos="24" type="boolean"/>3015<bitfield name="UNK25" pos="25" type="boolean"/>3016<bitfield name="PIXLODENABLE" pos="26" type="boolean"/>3017<bitfield name="UNK27" low="27" high="28"/>3018<bitfield name="MERGEDREGS" pos="31" type="boolean"/>3019</reg32>3020<reg32 offset="0xa981" name="SP_FS_BRANCH_COND" type="hex"/>3021<reg32 offset="0xa982" name="SP_FS_OBJ_FIRST_EXEC_OFFSET" type="uint"/>3022<reg64 offset="0xa983" name="SP_FS_OBJ_START" type="address" align="32"/>3023<reg32 offset="0xa985" name="SP_FS_PVT_MEM_PARAM" type="a6xx_sp_xs_pvt_mem_param"/>3024<reg64 offset="0xa986" name="SP_FS_PVT_MEM_ADDR" type="waddress" align="32"/>3025<reg32 offset="0xa988" name="SP_FS_PVT_MEM_SIZE" type="a6xx_sp_xs_pvt_mem_size"/>30263027<reg32 offset="0xa989" name="SP_BLEND_CNTL">3028<!-- per-mrt enable bit -->3029<bitfield name="ENABLE_BLEND" low="0" high="7"/>3030<bitfield name="UNK8" pos="8" type="boolean"/>3031<bitfield name="DUAL_COLOR_IN_ENABLE" pos="9" type="boolean"/>3032<bitfield name="ALPHA_TO_COVERAGE" pos="10" type="boolean"/>3033</reg32>3034<reg32 offset="0xa98a" name="SP_SRGB_CNTL">3035<!-- Same as RB_SRGB_CNTL -->3036<bitfield name="SRGB_MRT0" pos="0" type="boolean"/>3037<bitfield name="SRGB_MRT1" pos="1" type="boolean"/>3038<bitfield name="SRGB_MRT2" pos="2" type="boolean"/>3039<bitfield name="SRGB_MRT3" pos="3" type="boolean"/>3040<bitfield name="SRGB_MRT4" pos="4" type="boolean"/>3041<bitfield name="SRGB_MRT5" pos="5" type="boolean"/>3042<bitfield name="SRGB_MRT6" pos="6" type="boolean"/>3043<bitfield name="SRGB_MRT7" pos="7" type="boolean"/>3044</reg32>3045<reg32 offset="0xa98b" name="SP_FS_RENDER_COMPONENTS">3046<bitfield name="RT0" low="0" high="3"/>3047<bitfield name="RT1" low="4" high="7"/>3048<bitfield name="RT2" low="8" high="11"/>3049<bitfield name="RT3" low="12" high="15"/>3050<bitfield name="RT4" low="16" high="19"/>3051<bitfield name="RT5" low="20" high="23"/>3052<bitfield name="RT6" low="24" high="27"/>3053<bitfield name="RT7" low="28" high="31"/>3054</reg32>3055<reg32 offset="0xa98c" name="SP_FS_OUTPUT_CNTL0">3056<bitfield name="DUAL_COLOR_IN_ENABLE" pos="0" type="boolean"/>3057<bitfield name="DEPTH_REGID" low="8" high="15" type="a3xx_regid"/>3058<bitfield name="SAMPMASK_REGID" low="16" high="23" type="a3xx_regid"/>3059<bitfield name="STENCILREF_REGID" low="24" high="31" type="a3xx_regid"/>3060</reg32>3061<reg32 offset="0xa98d" name="SP_FS_OUTPUT_CNTL1">3062<bitfield name="MRT" low="0" high="3" type="uint"/>3063</reg32>30643065<array offset="0xa98e" name="SP_FS_OUTPUT" stride="1" length="8">3066<doc>per MRT</doc>3067<reg32 offset="0x0" name="REG">3068<bitfield name="REGID" low="0" high="7" type="a3xx_regid"/>3069<bitfield name="HALF_PRECISION" pos="8" type="boolean"/>3070</reg32>3071</array>30723073<array offset="0xa996" name="SP_FS_MRT" stride="1" length="8">3074<reg32 offset="0" name="REG">3075<bitfield name="COLOR_FORMAT" low="0" high="7" type="a6xx_format"/>3076<bitfield name="COLOR_SINT" pos="8" type="boolean"/>3077<bitfield name="COLOR_UINT" pos="9" type="boolean"/>3078<bitfield name="UNK10" pos="10" type="boolean"/>3079</reg32>3080</array>30813082<reg32 offset="0xa99e" name="SP_FS_PREFETCH_CNTL">3083<!-- unknown bits 0x7fc0 always set -->3084<bitfield name="COUNT" low="0" high="2" type="uint"/>3085<!-- b3 set if no other use of varyings in the shader itself.. maybe alternative to dummy bary.f? -->3086<bitfield name="UNK3" pos="3" type="boolean"/>3087<bitfield name="UNK4" low="4" high="11" type="a3xx_regid"/>3088<bitfield name="UNK12" low="12" high="14"/>3089</reg32>3090<array offset="0xa99f" name="SP_FS_PREFETCH" stride="1" length="4">3091<reg32 offset="0" name="CMD">3092<bitfield name="SRC" low="0" high="6" type="uint"/>3093<bitfield name="SAMP_ID" low="7" high="10" type="uint"/>3094<bitfield name="TEX_ID" low="11" high="15" type="uint"/>3095<bitfield name="DST" low="16" high="21" type="a3xx_regid"/>3096<bitfield name="WRMASK" low="22" high="25" type="hex"/>3097<bitfield name="HALF" pos="26" type="boolean"/>3098<!--3099CMD seems always 0x4?? 3d, textureProj, textureLod seem to3100skip pre-fetch.. TODO test texelFetch3101CMD is 0x6 when the Vulkan mode is enabled, and3102TEX_ID/SAMP_ID refer to the descriptor sets while the3103indices come from SP_FS_BINDLESS_PREFETCH[n]3104-->3105<bitfield name="CMD" low="27" high="31"/>3106</reg32>3107</array>3108<array offset="0xa9a3" name="SP_FS_BINDLESS_PREFETCH" stride="1" length="4">3109<reg32 offset="0" name="CMD">3110<bitfield name="SAMP_ID" low="0" high="15" type="uint"/>3111<bitfield name="TEX_ID" low="16" high="31" type="uint"/>3112</reg32>3113</array>3114<reg32 offset="0xa9a7" name="SP_FS_TEX_COUNT" low="0" high="7" type="uint"/>3115<reg32 offset="0xa9a8" name="SP_UNKNOWN_A9A8" low="0" high="16" /> <!-- always 0x0 ? -->3116<reg32 offset="0xa9a9" name="SP_FS_PVT_MEM_HW_STACK_OFFSET" type="a6xx_sp_xs_pvt_mem_hw_stack_offset"/>31173118<!-- TODO: unknown bool register at 0xa9aa, likely same as 0xa8c0-0xa8c3 but for FS -->31193120312131223123<reg32 offset="0xa9b0" name="SP_CS_CTRL_REG0" type="a6xx_sp_xs_ctrl_reg0">3124<bitfield name="THREADSIZE" pos="20" type="a6xx_threadsize"/>3125<!-- seems to make SP use less concurrent threads when possible? -->3126<bitfield name="UNK21" pos="21" type="boolean"/>3127<!-- has a small impact on performance, not clear what it does -->3128<bitfield name="UNK22" pos="22" type="boolean"/>3129<!-- creates a separate prolog-only thread? -->3130<bitfield name="SEPARATEPROLOG" pos="23" type="boolean"/>3131<bitfield name="MERGEDREGS" pos="31" type="boolean"/>3132</reg32>31333134<!-- set for compute shaders -->3135<reg32 offset="0xa9b1" name="SP_CS_UNKNOWN_A9B1">3136<bitfield name="SHARED_SIZE" low="0" high="4" type="uint">3137<doc>3138If 0 - all 32k of shared storage is enabled, otherwise3139(SHARED_SIZE + 1) * 1k is enabled.3140The ldl/stl offset seems to be rewritten to 0 when it is beyond3141this limit. This is different from ldlw/stlw, which wraps at314264k (and has 36k of storage on A640 - reads between 36k-64k3143always return 0)3144</doc>3145</bitfield>3146<bitfield name="UNK5" pos="5" type="boolean"/>3147<!-- always 1 ? -->3148<bitfield name="UNK6" pos="6" type="boolean"/>3149</reg32>3150<reg32 offset="0xa9b2" name="SP_CS_BRANCH_COND" type="hex"/>3151<reg32 offset="0xa9b3" name="SP_CS_OBJ_FIRST_EXEC_OFFSET" type="uint"/>3152<reg64 offset="0xa9b4" name="SP_CS_OBJ_START" type="address" align="32"/>3153<reg32 offset="0xa9b6" name="SP_CS_PVT_MEM_PARAM" type="a6xx_sp_xs_pvt_mem_param"/>3154<reg64 offset="0xa9b7" name="SP_CS_PVT_MEM_ADDR" align="32"/>3155<reg32 offset="0xa9b9" name="SP_CS_PVT_MEM_SIZE" type="a6xx_sp_xs_pvt_mem_size"/>3156<reg32 offset="0xa9ba" name="SP_CS_TEX_COUNT" low="0" high="7" type="uint"/>3157<reg32 offset="0xa9bb" name="SP_CS_CONFIG" type="a6xx_sp_xs_config"/>3158<reg32 offset="0xa9bc" name="SP_CS_INSTRLEN" low="0" high="27" type="uint"/>3159<reg32 offset="0xa9bd" name="SP_CS_PVT_MEM_HW_STACK_OFFSET" type="a6xx_sp_xs_pvt_mem_hw_stack_offset"/>31603161<!-- TODO: two 64kb aligned addresses at a9d0/a9d2 -->31623163<reg64 offset="0xa9e0" name="SP_FS_TEX_SAMP" type="address" align="16"/>3164<reg64 offset="0xa9e2" name="SP_CS_TEX_SAMP" type="address" align="16"/>3165<reg64 offset="0xa9e4" name="SP_FS_TEX_CONST" type="address" align="64"/>3166<reg64 offset="0xa9e6" name="SP_CS_TEX_CONST" type="address" align="64"/>31673168<array offset="0xa9e8" name="SP_CS_BINDLESS_BASE" stride="2" length="5">3169<!-- TODO: probably align=64 with 6 flags bits in the low bits ? -->3170<reg64 offset="0" name="ADDR" type="address"/>3171</array>31723173<!--3174IBO state for compute shader:3175-->3176<reg64 offset="0xa9f2" name="SP_CS_IBO" type="address" align="16"/>3177<reg32 offset="0xaa00" name="SP_CS_IBO_COUNT" low="0" high="6" type="uint"/>31783179<reg32 offset="0xab00" name="SP_MODE_CONTROL">3180<!--3181When set, half register loads from the constant file will3182load a 32-bit value (so hc0.y loads the same value as c0.y)3183and implicitly convert it to 16b (f2f16, or u2u16, based on3184operand type). When unset, half register loads from the3185constant file will load 16 bits from the packed constant3186file (so hc0.y loads the top 16 bits of the value of c0.x)3187-->3188<bitfield name="CONSTANT_DEMOTION_ENABLE" pos="0" type="boolean"/>3189<bitfield name="UNK1" pos="1" type="boolean"/> <!-- never set by VK blob -->3190<bitfield name="UNK2" pos="2" type="boolean"/> <!-- always set by VK blob -->3191<bitfield name="SHARED_CONSTS_ENABLE" pos="3" type="boolean"/> <!-- see HLSQ_SHARED_CONSTS -->3192</reg32>31933194<reg32 offset="0xab04" name="SP_FS_CONFIG" type="a6xx_sp_xs_config"/>3195<reg32 offset="0xab05" name="SP_FS_INSTRLEN" low="0" high="27" type="uint"/>31963197<array offset="0xab10" name="SP_BINDLESS_BASE" stride="2" length="5">3198<!-- TODO: probably align=64 with 6 flags bits in the low bits? -->3199<reg64 offset="0" name="ADDR" type="address"/>3200</array>32013202<!--3203Combined IBO state for 3d pipe, used for Image and SSBO write/atomic3204instructions VS/HS/DS/GS/FS. See SP_CS_IBO_* for compute shaders.3205-->3206<reg64 offset="0xab1a" name="SP_IBO" type="address" align="16"/>3207<reg32 offset="0xab20" name="SP_IBO_COUNT" low="0" high="6" type="uint"/>32083209<reg32 offset="0xacc0" name="SP_2D_DST_FORMAT">3210<bitfield name="NORM" pos="0" type="boolean"/>3211<bitfield name="SINT" pos="1" type="boolean"/>3212<bitfield name="UINT" pos="2" type="boolean"/>3213<!-- looks like HW only cares about the base type of this format,3214which matches the ifmt? -->3215<bitfield name="COLOR_FORMAT" low="3" high="10" type="a6xx_format"/>3216<!-- set when ifmt is R2D_UNORM8_SRGB -->3217<bitfield name="SRGB" pos="11" type="boolean"/>3218<!-- some sort of channel mask, not sure what it is for -->3219<bitfield name="MASK" low="12" high="15"/>3220</reg32>32213222<reg32 offset="0xae00" name="SP_UNKNOWN_AE00"/>3223<reg32 offset="0xae01" name="SP_ADDR_MODE_CNTL" pos="0" type="a5xx_address_mode"/>3224<reg32 offset="0xae02" name="SP_NC_MODE_CNTL">3225<!-- TODO: valid bits 0x3c3f, see kernel -->3226</reg32>3227<reg32 offset="0xae03" name="SP_UNKNOWN_AE03"/>3228<reg32 offset="0xae04" name="SP_FLOAT_CNTL">3229<bitfield name="F16_NO_INF" pos="3" type="boolean"/>3230</reg32>32313232<reg32 offset="0xae0f" name="SP_PERFCTR_ENABLE">3233<!-- some perfcntrs are affected by a per-stage enable bit3234(PERF_SP_ALU_WORKING_CYCLES for example)3235TODO: verify position of HS/DS/GS bits -->3236<bitfield name="VS" pos="0" type="boolean"/>3237<bitfield name="HS" pos="1" type="boolean"/>3238<bitfield name="DS" pos="2" type="boolean"/>3239<bitfield name="GS" pos="3" type="boolean"/>3240<bitfield name="FS" pos="4" type="boolean"/>3241<bitfield name="CS" pos="5" type="boolean"/>3242</reg32>3243<array offset="0xae10" name="SP_PERFCTR_SP_SEL" stride="1" length="24"/>3244<!-- TODO: there are 4 more percntr select registers (0xae28-0xae2b) -->3245<!-- TODO: there are a few unknown registers in the 0xae30-0xae52 range -->32463247<!--3248The downstream kernel calls the debug cluster of registers3249"a6xx_sp_ps_tp_cluster" but this actually specifies the border3250color base for compute shaders.3251-->3252<reg64 offset="0xb180" name="SP_PS_TP_BORDER_COLOR_BASE_ADDR" type="address" align="128"/>3253<reg32 offset="0xb182" name="SP_UNKNOWN_B182" low="0" high="2"/>3254<reg32 offset="0xb183" name="SP_UNKNOWN_B183" low="0" high="23"/>32553256<reg32 offset="0xb190" name="SP_UNKNOWN_B190"/>3257<reg32 offset="0xb191" name="SP_UNKNOWN_B191"/>32583259<!-- could be all the stuff below here is actually TPL1?? -->32603261<reg32 offset="0xb300" name="SP_TP_RAS_MSAA_CNTL">3262<bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>3263<bitfield name="UNK2" low="2" high="3"/>3264</reg32>3265<reg32 offset="0xb301" name="SP_TP_DEST_MSAA_CNTL">3266<bitfield name="SAMPLES" low="0" high="1" type="a3xx_msaa_samples"/>3267<bitfield name="MSAA_DISABLE" pos="2" type="boolean"/>3268</reg32>32693270<!-- looks to work in the same way as a5xx: -->3271<reg64 offset="0xb302" name="SP_TP_BORDER_COLOR_BASE_ADDR" type="address" align="128"/>3272<reg32 offset="0xb304" name="SP_TP_SAMPLE_CONFIG" type="a6xx_sample_config"/>3273<reg32 offset="0xb305" name="SP_TP_SAMPLE_LOCATION_0" type="a6xx_sample_locations"/>3274<reg32 offset="0xb306" name="SP_TP_SAMPLE_LOCATION_1" type="a6xx_sample_locations"/>3275<reg32 offset="0xb307" name="SP_TP_WINDOW_OFFSET" type="a6xx_reg_xy"/>3276<reg32 offset="0xb309" name="SP_TP_UNKNOWN_B309" low="0" high="7" type="uint"/>32773278<!--3279Equiv to corresponding RB_2D_SRC_* regs on a5xx.. which were either3280badly named or the functionality moved in a6xx. But downstream kernel3281calls this "a6xx_sp_ps_tp_2d_cluster"3282-->3283<reg32 offset="0xb4c0" name="SP_PS_2D_SRC_INFO" type="a6xx_2d_surf_info"/>3284<reg32 offset="0xb4c1" name="SP_PS_2D_SRC_SIZE">3285<bitfield name="WIDTH" low="0" high="14" type="uint"/>3286<bitfield name="HEIGHT" low="15" high="29" type="uint"/>3287</reg32>3288<reg64 offset="0xb4c2" name="SP_PS_2D_SRC" type="address" align="16"/>3289<reg32 offset="0xb4c4" name="SP_PS_2D_SRC_PITCH">3290<bitfield name="UNK0" low="0" high="8"/>3291<bitfield name="PITCH" low="9" high="23" shr="6" type="uint"/>3292</reg32>32933294<!-- planes for NV12, etc. (TODO: not tested) -->3295<reg64 offset="0xb4c5" name="SP_PS_2D_SRC_PLANE1" type="address" align="16"/>3296<reg32 offset="0xb4c7" name="SP_PS_2D_SRC_PLANE_PITCH" low="0" high="11" shr="6" type="uint"/>3297<reg64 offset="0xb4c8" name="SP_PS_2D_SRC_PLANE2" type="address" align="16"/>32983299<reg64 offset="0xb4ca" name="SP_PS_2D_SRC_FLAGS" type="address" align="16"/>3300<reg32 offset="0xb4cc" name="SP_PS_2D_SRC_FLAGS_PITCH" low="0" high="7" shr="6" type="uint"/>33013302<reg32 offset="0xb4cd" name="SP_PS_UNKNOWN_B4CD" low="6" high="31"/>3303<reg32 offset="0xb4ce" name="SP_PS_UNKNOWN_B4CE" low="0" high="31"/>3304<reg32 offset="0xb4cf" name="SP_PS_UNKNOWN_B4CF" low="0" high="30"/>3305<reg32 offset="0xb4d0" name="SP_PS_UNKNOWN_B4D0" low="0" high="29"/>3306<reg32 offset="0xb4d1" name="SP_WINDOW_OFFSET" type="a6xx_reg_xy"/>33073308<!-- always 0x100000 or 0x1000000? -->3309<reg32 offset="0xb600" name="TPL1_UNKNOWN_B600" low="0" high="25"/>3310<reg32 offset="0xb601" name="TPL1_ADDR_MODE_CNTL" type="a5xx_address_mode"/>3311<reg32 offset="0xb602" name="TPL1_UNKNOWN_B602" low="0" high="7" type="uint"/>3312<reg32 offset="0xb604" name="TPL1_NC_MODE_CNTL">3313<bitfield name="MODE" pos="0" type="boolean"/>3314<bitfield name="LOWER_BIT" low="1" high="2" type="uint"/>3315<bitfield name="MIN_ACCESS_LENGTH" pos="3" type="boolean"/> <!-- true=64b false=32b -->3316<bitfield name="UPPER_BIT" pos="4" type="uint"/>3317<bitfield name="UNK6" low="6" high="7"/>3318</reg32>3319<reg32 offset="0xb605" name="TPL1_UNKNOWN_B605" low="0" high="7" type="uint"/> <!-- always 0x0 or 0x44 ? -->3320<reg32 offset="0xb608" name="TPL1_BICUBIC_WEIGHTS_TABLE_0" low="0" high="29"/>3321<reg32 offset="0xb609" name="TPL1_BICUBIC_WEIGHTS_TABLE_1" low="0" high="29"/>3322<reg32 offset="0xb60a" name="TPL1_BICUBIC_WEIGHTS_TABLE_2" low="0" high="29"/>3323<reg32 offset="0xb60b" name="TPL1_BICUBIC_WEIGHTS_TABLE_3" low="0" high="29"/>3324<reg32 offset="0xb60c" name="TPL1_BICUBIC_WEIGHTS_TABLE_4" low="0" high="29"/>3325<array offset="0xb610" name="TPL1_PERFCTR_TP_SEL" stride="1" length="12"/>33263327<!-- TODO: 4 more perfcntr sel at 0xb620 ? -->33283329<bitset name="a6xx_hlsq_xs_cntl" inline="yes">3330<bitfield name="CONSTLEN" low="0" high="7" shr="2" type="uint"/>3331<bitfield name="ENABLED" pos="8" type="boolean"/>3332</bitset>33333334<reg32 offset="0xb800" name="HLSQ_VS_CNTL" type="a6xx_hlsq_xs_cntl"/>3335<reg32 offset="0xb801" name="HLSQ_HS_CNTL" type="a6xx_hlsq_xs_cntl"/>3336<reg32 offset="0xb802" name="HLSQ_DS_CNTL" type="a6xx_hlsq_xs_cntl"/>3337<reg32 offset="0xb803" name="HLSQ_GS_CNTL" type="a6xx_hlsq_xs_cntl"/>33383339<reg32 offset="0xb820" name="HLSQ_LOAD_STATE_GEOM_CMD"/>3340<reg64 offset="0xb821" name="HLSQ_LOAD_STATE_GEOM_EXT_SRC_ADDR" align="16" type="address"/>3341<reg32 offset="0xb823" name="HLSQ_LOAD_STATE_GEOM_DATA"/>33423343<reg32 offset="0xb980" name="HLSQ_FS_CNTL_0">3344<!-- must match SP_FS_CTRL -->3345<bitfield name="THREADSIZE" pos="0" type="a6xx_threadsize"/>3346<bitfield name="VARYINGS" pos="1" type="boolean"/>3347<bitfield name="UNK2" low="2" high="11"/>3348</reg32>3349<reg32 offset="0xb981" name="HLSQ_UNKNOWN_B981" pos="0" type="boolean"/> <!-- never used by blob -->33503351<reg32 offset="0xb982" name="HLSQ_CONTROL_1_REG" low="0" high="2">3352<!-- TODO: have test cases with either 0x3 or 0x7 -->3353</reg32>3354<reg32 offset="0xb983" name="HLSQ_CONTROL_2_REG">3355<bitfield name="FACEREGID" low="0" high="7" type="a3xx_regid"/>3356<!-- SAMPLEID is loaded into a half-precision register: -->3357<bitfield name="SAMPLEID" low="8" high="15" type="a3xx_regid"/>3358<bitfield name="SAMPLEMASK" low="16" high="23" type="a3xx_regid"/>3359<!--3360SIZE is the "size" of the primitive, ie. what the i/j coords need3361to be divided by to scale to a single fragment. It is probably3362the longer of the two lines that form the tri (ie v0v1 and v0v2)?3363-->3364<bitfield name="SIZE" low="24" high="31" type="a3xx_regid"/>3365</reg32>3366<reg32 offset="0xb984" name="HLSQ_CONTROL_3_REG">3367<!-- register loaded with position (bary.f) -->3368<bitfield name="IJ_PERSP_PIXEL" low="0" high="7" type="a3xx_regid"/>3369<bitfield name="IJ_LINEAR_PIXEL" low="8" high="15" type="a3xx_regid"/>3370<bitfield name="IJ_PERSP_CENTROID" low="16" high="23" type="a3xx_regid"/>3371<bitfield name="IJ_LINEAR_CENTROID" low="24" high="31" type="a3xx_regid"/>3372</reg32>3373<reg32 offset="0xb985" name="HLSQ_CONTROL_4_REG">3374<bitfield name="IJ_PERSP_SAMPLE" low="0" high="7" type="a3xx_regid"/>3375<bitfield name="IJ_LINEAR_SAMPLE" low="8" high="15" type="a3xx_regid"/>3376<bitfield name="XYCOORDREGID" low="16" high="23" type="a3xx_regid"/>3377<bitfield name="ZWCOORDREGID" low="24" high="31" type="a3xx_regid"/>3378</reg32>3379<reg32 offset="0xb986" name="HLSQ_CONTROL_5_REG">3380<bitfield name="UNK0" low="0" high="7" type="a3xx_regid"/>3381<bitfield name="UNK8" low="8" high="15" type="a3xx_regid"/>3382</reg32>3383<reg32 offset="0xb987" name="HLSQ_CS_CNTL" type="a6xx_hlsq_xs_cntl"/>33843385<!-- TODO: what does KERNELDIM do exactly (blob sets it differently from turnip) -->3386<reg32 offset="0xb990" name="HLSQ_CS_NDRANGE_0">3387<bitfield name="KERNELDIM" low="0" high="1" type="uint"/>3388<!-- localsize is value minus one: -->3389<bitfield name="LOCALSIZEX" low="2" high="11" type="uint"/>3390<bitfield name="LOCALSIZEY" low="12" high="21" type="uint"/>3391<bitfield name="LOCALSIZEZ" low="22" high="31" type="uint"/>3392</reg32>3393<reg32 offset="0xb991" name="HLSQ_CS_NDRANGE_1">3394<bitfield name="GLOBALSIZE_X" low="0" high="31" type="uint"/>3395</reg32>3396<reg32 offset="0xb992" name="HLSQ_CS_NDRANGE_2">3397<bitfield name="GLOBALOFF_X" low="0" high="31" type="uint"/>3398</reg32>3399<reg32 offset="0xb993" name="HLSQ_CS_NDRANGE_3">3400<bitfield name="GLOBALSIZE_Y" low="0" high="31" type="uint"/>3401</reg32>3402<reg32 offset="0xb994" name="HLSQ_CS_NDRANGE_4">3403<bitfield name="GLOBALOFF_Y" low="0" high="31" type="uint"/>3404</reg32>3405<reg32 offset="0xb995" name="HLSQ_CS_NDRANGE_5">3406<bitfield name="GLOBALSIZE_Z" low="0" high="31" type="uint"/>3407</reg32>3408<reg32 offset="0xb996" name="HLSQ_CS_NDRANGE_6">3409<bitfield name="GLOBALOFF_Z" low="0" high="31" type="uint"/>3410</reg32>3411<reg32 offset="0xb997" name="HLSQ_CS_CNTL_0">3412<!-- these are all vec3. first 3 need to be high regs3413WGSIZECONSTID is the local size (from HLSQ_CS_NDRANGE_0)3414WGOFFSETCONSTID is WGIDCONSTID*WGSIZECONSTID3415-->3416<bitfield name="WGIDCONSTID" low="0" high="7" type="a3xx_regid"/>3417<bitfield name="WGSIZECONSTID" low="8" high="15" type="a3xx_regid"/>3418<bitfield name="WGOFFSETCONSTID" low="16" high="23" type="a3xx_regid"/>3419<bitfield name="LOCALIDREGID" low="24" high="31" type="a3xx_regid"/>3420</reg32>3421<reg32 offset="0xb998" name="HLSQ_CS_CNTL_1">3422<!-- gl_LocalInvocationIndex -->3423<bitfield name="LINEARLOCALIDREGID" low="0" high="7" type="a3xx_regid"/>3424<!-- a650 has 6 "SP cores" (but 3 "SP"). this makes it use only3425one of those 6 "SP cores" -->3426<bitfield name="SINGLE_SP_CORE" pos="8" type="boolean"/>3427<!-- Must match SP_CS_CTRL -->3428<bitfield name="THREADSIZE" pos="9" type="a6xx_threadsize"/>3429<!-- 1 thread per wave (ignored if bit9 set) -->3430<bitfield name="THREADSIZE_SCALAR" pos="10" type="boolean"/>3431</reg32>3432<!--note: vulkan blob doesn't use these -->3433<reg32 offset="0xb999" name="HLSQ_CS_KERNEL_GROUP_X"/>3434<reg32 offset="0xb99a" name="HLSQ_CS_KERNEL_GROUP_Y"/>3435<reg32 offset="0xb99b" name="HLSQ_CS_KERNEL_GROUP_Z"/>34363437<reg32 offset="0xb9a0" name="HLSQ_LOAD_STATE_FRAG_CMD"/>3438<reg64 offset="0xb9a1" name="HLSQ_LOAD_STATE_FRAG_EXT_SRC_ADDR" align="16" type="address"/>3439<reg32 offset="0xb9a3" name="HLSQ_LOAD_STATE_FRAG_DATA"/>34403441<!-- mirror of SP_CS_BINDLESS_BASE -->3442<array offset="0xb9c0" name="HLSQ_CS_BINDLESS_BASE" stride="2" length="5">3443<!-- 64 alignment, 2 low bits for unknown flags (always 0x3 when enabled?) -->3444<reg64 offset="0" name="ADDR" type="waddress"/>3445</array>34463447<reg32 offset="0xbb00" name="HLSQ_DRAW_CMD">3448<bitfield name="STATE_ID" low="0" high="7"/>3449</reg32>34503451<reg32 offset="0xbb01" name="HLSQ_DISPATCH_CMD">3452<bitfield name="STATE_ID" low="0" high="7"/>3453</reg32>34543455<reg32 offset="0xbb02" name="HLSQ_EVENT_CMD">3456<!-- I think only the low bit is actually used? -->3457<bitfield name="STATE_ID" low="16" high="23"/>3458<bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>3459</reg32>34603461<reg32 offset="0xbb08" name="HLSQ_INVALIDATE_CMD">3462<doc>3463This register clears pending loads queued up by3464CP_LOAD_STATE6. Each bit resets a particular kind(s) of3465CP_LOAD_STATE6.3466</doc>34673468<!-- per-stage state: shader, non-bindless UBO, textures, and samplers -->3469<bitfield name="VS_STATE" pos="0" type="boolean"/>3470<bitfield name="HS_STATE" pos="1" type="boolean"/>3471<bitfield name="DS_STATE" pos="2" type="boolean"/>3472<bitfield name="GS_STATE" pos="3" type="boolean"/>3473<bitfield name="FS_STATE" pos="4" type="boolean"/>3474<bitfield name="CS_STATE" pos="5" type="boolean"/>34753476<bitfield name="CS_IBO" pos="6" type="boolean"/>3477<bitfield name="GFX_IBO" pos="7" type="boolean"/>34783479<!-- Note: these only do something when HLSQ_SHARED_CONSTS is set to 1 -->3480<bitfield name="CS_SHARED_CONST" pos="19" type="boolean"/>3481<bitfield name="GFX_SHARED_CONST" pos="8" type="boolean"/>34823483<!-- SS6_BINDLESS: one bit per bindless base -->3484<bitfield name="CS_BINDLESS" low="9" high="13" type="hex"/>3485<bitfield name="GFX_BINDLESS" low="14" high="18" type="hex"/>3486</reg32>34873488<reg32 offset="0xbb10" name="HLSQ_FS_CNTL" type="a6xx_hlsq_xs_cntl"/>34893490<reg32 offset="0xbb11" name="HLSQ_SHARED_CONSTS">3491<doc>3492Shared constants are intended to be used for Vulkan push3493constants. When enabled, 8 vec4's are reserved in the FS3494const pool and 16 in the geometry const pool although3495only 8 are actually used (why?) and they are mapped to3496c504-c511 in each stage. Both VS and FS shared consts3497are written using ST6_CONSTANTS/SB6_IBO, so that both3498the geometry and FS shared consts can be written at once3499by using CP_LOAD_STATE6 rather than3500CP_LOAD_STATE6_FRAG/CP_LOAD_STATE6_GEOM. In addition3501DST_OFF and NUM_UNIT are in units of dwords instead of3502vec4's.35033504There is also a separate shared constant pool for CS,3505which is loaded through CP_LOAD_STATE6_FRAG with3506ST6_UBO/ST6_IBO. However the only real difference for CS3507is the dword units.3508</doc>3509<bitfield name="ENABLE" pos="0" type="boolean"/>3510</reg32>35113512<!-- mirror of SP_BINDLESS_BASE -->3513<array offset="0xbb20" name="HLSQ_BINDLESS_BASE" stride="2" length="5">3514<!-- align 64 with two LSB for unknown flags (always 0x3 enabled) -->3515<reg64 offset="0" name="ADDR" type="address"/>3516</array>35173518<reg32 offset="0xbd80" name="HLSQ_2D_EVENT_CMD">3519<bitfield name="STATE_ID" low="8" high="15"/>3520<bitfield name="EVENT" low="0" high="6" type="vgt_event_type"/>3521</reg32>35223523<reg32 offset="0xbe00" name="HLSQ_UNKNOWN_BE00"/> <!-- all bits valid except bit 29 -->3524<reg32 offset="0xbe01" name="HLSQ_UNKNOWN_BE01" low="4" high="6"/>3525<reg32 offset="0xbe04" name="HLSQ_UNKNOWN_BE04"/>3526<reg32 offset="0xbe05" name="HLSQ_ADDR_MODE_CNTL" type="a5xx_address_mode"/>3527<reg32 offset="0xbe08" name="HLSQ_UNKNOWN_BE08" low="0" high="15"/>3528<array offset="0xbe10" name="HLSQ_PERFCTR_HLSQ_SEL" stride="1" length="6"/>35293530<!-- TODO: some valid registers between 0xbe20 and 0xbe33 -->35313532<!--3533These special registers signal the beginning/end of an event3534sequence. The sequence used internally for an event looks like:3535- write EVENT_CMD pipe register3536- write CP_EVENT_START3537- write HLSQ_EVENT_CMD with event or HLSQ_DRAW_CMD3538- write PC_EVENT_CMD with event or PC_DRAW_CMD3539- write HLSQ_EVENT_CMD(CONTEXT_DONE)3540- write PC_EVENT_CMD(CONTEXT_DONE)3541- write CP_EVENT_END3542Writing to CP_EVENT_END seems to actually trigger the context roll3543-->3544<reg32 offset="0xd600" name="CP_EVENT_START">3545<bitfield name="STATE_ID" low="0" high="7"/>3546</reg32>3547<reg32 offset="0xd601" name="CP_EVENT_END">3548<bitfield name="STATE_ID" low="0" high="7"/>3549</reg32>3550<reg32 offset="0xd700" name="CP_2D_EVENT_START">3551<bitfield name="STATE_ID" low="0" high="7"/>3552</reg32>3553<reg32 offset="0xd701" name="CP_2D_EVENT_END">3554<bitfield name="STATE_ID" low="0" high="7"/>3555</reg32>3556</domain>35573558<!-- Seems basically the same as a5xx, maybe move to common.xml.. -->3559<domain name="A6XX_TEX_SAMP" width="32">3560<doc>Texture sampler dwords</doc>3561<enum name="a6xx_tex_filter"> <!-- same as a4xx? -->3562<value name="A6XX_TEX_NEAREST" value="0"/>3563<value name="A6XX_TEX_LINEAR" value="1"/>3564<value name="A6XX_TEX_ANISO" value="2"/>3565<value name="A6XX_TEX_CUBIC" value="3"/> <!-- a650 only -->3566</enum>3567<enum name="a6xx_tex_clamp"> <!-- same as a4xx? -->3568<value name="A6XX_TEX_REPEAT" value="0"/>3569<value name="A6XX_TEX_CLAMP_TO_EDGE" value="1"/>3570<value name="A6XX_TEX_MIRROR_REPEAT" value="2"/>3571<value name="A6XX_TEX_CLAMP_TO_BORDER" value="3"/>3572<value name="A6XX_TEX_MIRROR_CLAMP" value="4"/>3573</enum>3574<enum name="a6xx_tex_aniso"> <!-- same as a4xx? -->3575<value name="A6XX_TEX_ANISO_1" value="0"/>3576<value name="A6XX_TEX_ANISO_2" value="1"/>3577<value name="A6XX_TEX_ANISO_4" value="2"/>3578<value name="A6XX_TEX_ANISO_8" value="3"/>3579<value name="A6XX_TEX_ANISO_16" value="4"/>3580</enum>3581<enum name="a6xx_reduction_mode">3582<value name="A6XX_REDUCTION_MODE_AVERAGE" value="0"/>3583<value name="A6XX_REDUCTION_MODE_MIN" value="1"/>3584<value name="A6XX_REDUCTION_MODE_MAX" value="2"/>3585</enum>35863587<reg32 offset="0" name="0">3588<bitfield name="MIPFILTER_LINEAR_NEAR" pos="0" type="boolean"/>3589<bitfield name="XY_MAG" low="1" high="2" type="a6xx_tex_filter"/>3590<bitfield name="XY_MIN" low="3" high="4" type="a6xx_tex_filter"/>3591<bitfield name="WRAP_S" low="5" high="7" type="a6xx_tex_clamp"/>3592<bitfield name="WRAP_T" low="8" high="10" type="a6xx_tex_clamp"/>3593<bitfield name="WRAP_R" low="11" high="13" type="a6xx_tex_clamp"/>3594<bitfield name="ANISO" low="14" high="16" type="a6xx_tex_aniso"/>3595<bitfield name="LOD_BIAS" low="19" high="31" type="fixed" radix="8"/><!-- no idea how many bits for real -->3596</reg32>3597<reg32 offset="1" name="1">3598<!-- bit 0 always set with vulkan? -->3599<bitfield name="UNK0" pos="0" type="boolean"/>3600<bitfield name="COMPARE_FUNC" low="1" high="3" type="adreno_compare_func"/>3601<bitfield name="CUBEMAPSEAMLESSFILTOFF" pos="4" type="boolean"/>3602<bitfield name="UNNORM_COORDS" pos="5" type="boolean"/>3603<bitfield name="MIPFILTER_LINEAR_FAR" pos="6" type="boolean"/>3604<bitfield name="MAX_LOD" low="8" high="19" type="ufixed" radix="8"/>3605<bitfield name="MIN_LOD" low="20" high="31" type="ufixed" radix="8"/>3606</reg32>3607<reg32 offset="2" name="2">3608<bitfield name="REDUCTION_MODE" low="0" high="1" type="a6xx_reduction_mode"/>3609<bitfield name="CHROMA_LINEAR" pos="5" type="boolean"/>3610<bitfield name="BCOLOR" low="7" high="31"/>3611</reg32>3612<reg32 offset="3" name="3"/>3613</domain>36143615<domain name="A6XX_TEX_CONST" width="32">3616<doc>Texture constant dwords</doc>3617<enum name="a6xx_tex_swiz"> <!-- same as a4xx? -->3618<value name="A6XX_TEX_X" value="0"/>3619<value name="A6XX_TEX_Y" value="1"/>3620<value name="A6XX_TEX_Z" value="2"/>3621<value name="A6XX_TEX_W" value="3"/>3622<value name="A6XX_TEX_ZERO" value="4"/>3623<value name="A6XX_TEX_ONE" value="5"/>3624</enum>3625<enum name="a6xx_tex_type"> <!-- same as a4xx? -->3626<value name="A6XX_TEX_1D" value="0"/>3627<value name="A6XX_TEX_2D" value="1"/>3628<value name="A6XX_TEX_CUBE" value="2"/>3629<value name="A6XX_TEX_3D" value="3"/>3630</enum>3631<reg32 offset="0" name="0">3632<bitfield name="TILE_MODE" low="0" high="1" type="a6xx_tile_mode"/>3633<bitfield name="SRGB" pos="2" type="boolean"/>3634<bitfield name="SWIZ_X" low="4" high="6" type="a6xx_tex_swiz"/>3635<bitfield name="SWIZ_Y" low="7" high="9" type="a6xx_tex_swiz"/>3636<bitfield name="SWIZ_Z" low="10" high="12" type="a6xx_tex_swiz"/>3637<bitfield name="SWIZ_W" low="13" high="15" type="a6xx_tex_swiz"/>3638<bitfield name="MIPLVLS" low="16" high="19" type="uint"/>3639<!-- overlaps with MIPLVLS -->3640<bitfield name="CHROMA_MIDPOINT_X" pos="16" type="boolean"/>3641<bitfield name="CHROMA_MIDPOINT_Y" pos="18" type="boolean"/>3642<bitfield name="SAMPLES" low="20" high="21" type="a3xx_msaa_samples"/>3643<bitfield name="FMT" low="22" high="29" type="a6xx_format"/>3644<bitfield name="SWAP" low="30" high="31" type="a3xx_color_swap"/>3645</reg32>3646<reg32 offset="1" name="1">3647<bitfield name="WIDTH" low="0" high="14" type="uint"/>3648<bitfield name="HEIGHT" low="15" high="29" type="uint"/>3649</reg32>3650<reg32 offset="2" name="2">3651<!--3652b4 and b31 set for buffer/ssbo case, in which case low 15 bits3653of size encoded in WIDTH, and high 15 bits encoded in HEIGHT36543655b31 is probably the 'BUFFER' bit.. it is the one that changes3656behavior of texture in dEQP-GLES31.functional.texture.texture_buffer.render.as_fragment_texture.buffer_size_1310713657-->3658<bitfield name="UNK4" pos="4" type="boolean"/>3659<!-- minimum pitch (for mipmap levels): log2(pitchalign / 64) -->3660<bitfield name="PITCHALIGN" low="0" high="3" type="uint"/>3661<doc>Pitch in bytes (so actually stride)</doc>3662<bitfield name="PITCH" low="7" high="28" type="uint"/>3663<bitfield name="TYPE" low="29" high="30" type="a6xx_tex_type"/>3664<bitfield name="UNK31" pos="31" type="boolean"/>3665</reg32>3666<reg32 offset="3" name="3">3667<!--3668ARRAY_PITCH is basically LAYERSZ for the first mipmap level, and3669for 3d textures (laid out mipmap level first) MIN_LAYERSZ is the3670layer size at the point that it stops being reduced moving to3671higher (smaller) mipmap levels3672-->3673<bitfield name="ARRAY_PITCH" low="0" high="13" shr="12" type="uint"/>3674<bitfield name="MIN_LAYERSZ" low="23" high="26" shr="12"/>3675<!--3676by default levels with w < 16 are linear3677TILE_ALL makes all levels have tiling3678seems required when using UBWC, since all levels have UBWC (can possibly be disabled?)3679-->3680<bitfield name="TILE_ALL" pos="27" type="boolean"/>3681<bitfield name="FLAG" pos="28" type="boolean"/>3682</reg32>3683<!-- for 2-3 plane format, BASE is flag buffer address (if enabled)3684the address of the non-flag base buffer is determined automatically,3685and must follow the flag buffer3686-->3687<reg32 offset="4" name="4">3688<bitfield name="BASE_LO" low="5" high="31" shr="5"/>3689</reg32>3690<reg32 offset="5" name="5">3691<bitfield name="BASE_HI" low="0" high="16"/>3692<bitfield name="DEPTH" low="17" high="29" type="uint"/>3693</reg32>3694<reg32 offset="6" name="6">3695<!-- pitch for plane 2 / plane 3 -->3696<bitfield name="PLANE_PITCH" low="8" high="31" type="uint"/>3697</reg32>3698<!-- 7/8 is plane 2 address for planar formats -->3699<reg32 offset="7" name="7">3700<bitfield name="FLAG_LO" low="5" high="31" shr="5"/>3701</reg32>3702<reg32 offset="8" name="8">3703<bitfield name="FLAG_HI" low="0" high="16"/>3704</reg32>3705<!-- 9/10 is plane 3 address for planar formats -->3706<reg32 offset="9" name="9">3707<bitfield name="FLAG_BUFFER_ARRAY_PITCH" low="0" high="16" shr="4" type="uint"/>3708</reg32>3709<reg32 offset="10" name="10">3710<bitfield name="FLAG_BUFFER_PITCH" low="0" high="6" shr="6" type="uint"/>3711<!-- log2 size of the first level, required for mipmapping -->3712<bitfield name="FLAG_BUFFER_LOGW" low="8" high="11" type="uint"/>3713<bitfield name="FLAG_BUFFER_LOGH" low="12" high="15" type="uint"/>3714</reg32>3715<reg32 offset="11" name="11"/>3716<reg32 offset="12" name="12"/>3717<reg32 offset="13" name="13"/>3718<reg32 offset="14" name="14"/>3719<reg32 offset="15" name="15"/>3720</domain>37213722<!--3723Note the "SSBO" state blocks are actually used for both images and SSBOs,3724naming is just because I r/e'd SSBOs first. I should probably come up3725with a better name.3726-->3727<domain name="A6XX_IBO" width="32">3728<reg32 offset="0" name="0">3729<!--3730NOTE: same position as in TEX_CONST state.. I don't see other bits3731used but if they are good chance position is same as TEX_CONST3732-->3733<bitfield name="TILE_MODE" low="0" high="1" type="a6xx_tile_mode"/>3734<bitfield name="FMT" low="22" high="29" type="a6xx_format"/>3735</reg32>3736<reg32 offset="1" name="1">3737<bitfield name="WIDTH" low="0" high="14" type="uint"/>3738<bitfield name="HEIGHT" low="15" high="29" type="uint"/>3739</reg32>3740<reg32 offset="2" name="2">3741<!--3742b4 and b31 set for buffer/ssbo case, in which case low 15 bits3743of size encoded in WIDTH, and high 15 bits encoded in HEIGHT3744-->3745<bitfield name="UNK4" pos="4" type="boolean"/>3746<doc>Pitch in bytes (so actually stride)</doc>3747<bitfield name="PITCH" low="7" high="28" type="uint"/>3748<bitfield name="TYPE" low="29" high="30" type="a6xx_tex_type"/>3749<bitfield name="UNK31" pos="31" type="boolean"/>3750</reg32>3751<reg32 offset="3" name="3">3752<!--3753ARRAY_PITCH is basically LAYERSZ for the first mipmap level, and3754for 3d textures (laid out mipmap level first) MIN_LAYERSZ is the3755layer size at the point that it stops being reduced moving to3756higher (smaller) mipmap levels3757-->3758<bitfield name="ARRAY_PITCH" low="0" high="13" shr="12" type="uint"/>3759<bitfield name="UNK27" pos="27" type="boolean"/>3760<bitfield name="FLAG" pos="28" type="boolean"/>3761</reg32>3762<reg32 offset="4" name="4">3763<bitfield name="BASE_LO" low="0" high="31"/>3764</reg32>3765<reg32 offset="5" name="5">3766<bitfield name="BASE_HI" low="0" high="16"/>3767<bitfield name="DEPTH" low="17" high="29" type="uint"/>3768</reg32>3769<reg32 offset="6" name="6">3770</reg32>3771<reg32 offset="7" name="7">3772</reg32>3773<reg32 offset="8" name="8">3774</reg32>3775<reg32 offset="9" name="9">3776<bitfield name="FLAG_BUFFER_ARRAY_PITCH" low="0" high="16" shr="4" type="uint"/>3777</reg32>3778<reg32 offset="10" name="10">3779<!--3780I see some other bits set by blob above FLAG_BUFFER_PITCH, but they3781don't seem to be particularly sensible... or needed for UBWC to work3782-->3783<bitfield name="FLAG_BUFFER_PITCH" low="0" high="6" shr="6" type="uint"/>3784</reg32>3785</domain>37863787<domain name="A6XX_UBO" width="32">3788<reg32 offset="0" name="0">3789<bitfield name="BASE_LO" low="0" high="31"/>3790</reg32>3791<reg32 offset="1" name="1">3792<bitfield name="BASE_HI" low="0" high="16"/>3793<bitfield name="SIZE" low="17" high="31"/> <!-- size in vec4 (4xDWORD) units -->3794</reg32>3795</domain>37963797<domain name="A6XX_PDC" width="32">3798<reg32 offset="0x1140" name="GPU_ENABLE_PDC"/>3799<reg32 offset="0x1148" name="GPU_SEQ_START_ADDR"/>3800<reg32 offset="0x1540" name="GPU_TCS0_CONTROL"/>3801<reg32 offset="0x1541" name="GPU_TCS0_CMD_ENABLE_BANK"/>3802<reg32 offset="0x1542" name="GPU_TCS0_CMD_WAIT_FOR_CMPL_BANK"/>3803<reg32 offset="0x1543" name="GPU_TCS0_CMD0_MSGID"/>3804<reg32 offset="0x1544" name="GPU_TCS0_CMD0_ADDR"/>3805<reg32 offset="0x1545" name="GPU_TCS0_CMD0_DATA"/>3806<reg32 offset="0x1572" name="GPU_TCS1_CONTROL"/>3807<reg32 offset="0x1573" name="GPU_TCS1_CMD_ENABLE_BANK"/>3808<reg32 offset="0x1574" name="GPU_TCS1_CMD_WAIT_FOR_CMPL_BANK"/>3809<reg32 offset="0x1575" name="GPU_TCS1_CMD0_MSGID"/>3810<reg32 offset="0x1576" name="GPU_TCS1_CMD0_ADDR"/>3811<reg32 offset="0x1577" name="GPU_TCS1_CMD0_DATA"/>3812<reg32 offset="0x15A4" name="GPU_TCS2_CONTROL"/>3813<reg32 offset="0x15A5" name="GPU_TCS2_CMD_ENABLE_BANK"/>3814<reg32 offset="0x15A6" name="GPU_TCS2_CMD_WAIT_FOR_CMPL_BANK"/>3815<reg32 offset="0x15A7" name="GPU_TCS2_CMD0_MSGID"/>3816<reg32 offset="0x15A8" name="GPU_TCS2_CMD0_ADDR"/>3817<reg32 offset="0x15A9" name="GPU_TCS2_CMD0_DATA"/>3818<reg32 offset="0x15D6" name="GPU_TCS3_CONTROL"/>3819<reg32 offset="0x15D7" name="GPU_TCS3_CMD_ENABLE_BANK"/>3820<reg32 offset="0x15D8" name="GPU_TCS3_CMD_WAIT_FOR_CMPL_BANK"/>3821<reg32 offset="0x15D9" name="GPU_TCS3_CMD0_MSGID"/>3822<reg32 offset="0x15DA" name="GPU_TCS3_CMD0_ADDR"/>3823<reg32 offset="0x15DB" name="GPU_TCS3_CMD0_DATA"/>3824</domain>38253826<domain name="A6XX_PDC_GPU_SEQ" width="32">3827<reg32 offset="0x0" name="MEM_0"/>3828</domain>38293830<domain name="A6XX_CX_DBGC" width="32">3831<reg32 offset="0x0000" name="CFG_DBGBUS_SEL_A">3832<bitfield high="7" low="0" name="PING_INDEX"/>3833<bitfield high="15" low="8" name="PING_BLK_SEL"/>3834</reg32>3835<reg32 offset="0x0001" name="CFG_DBGBUS_SEL_B"/>3836<reg32 offset="0x0002" name="CFG_DBGBUS_SEL_C"/>3837<reg32 offset="0x0003" name="CFG_DBGBUS_SEL_D"/>3838<reg32 offset="0x0004" name="CFG_DBGBUS_CNTLT">3839<bitfield high="5" low="0" name="TRACEEN"/>3840<bitfield high="14" low="12" name="GRANU"/>3841<bitfield high="31" low="28" name="SEGT"/>3842</reg32>3843<reg32 offset="0x0005" name="CFG_DBGBUS_CNTLM">3844<bitfield high="27" low="24" name="ENABLE"/>3845</reg32>3846<reg32 offset="0x0008" name="CFG_DBGBUS_IVTL_0"/>3847<reg32 offset="0x0009" name="CFG_DBGBUS_IVTL_1"/>3848<reg32 offset="0x000a" name="CFG_DBGBUS_IVTL_2"/>3849<reg32 offset="0x000b" name="CFG_DBGBUS_IVTL_3"/>3850<reg32 offset="0x000c" name="CFG_DBGBUS_MASKL_0"/>3851<reg32 offset="0x000d" name="CFG_DBGBUS_MASKL_1"/>3852<reg32 offset="0x000e" name="CFG_DBGBUS_MASKL_2"/>3853<reg32 offset="0x000f" name="CFG_DBGBUS_MASKL_3"/>3854<reg32 offset="0x0010" name="CFG_DBGBUS_BYTEL_0">3855<bitfield high="3" low="0" name="BYTEL0"/>3856<bitfield high="7" low="4" name="BYTEL1"/>3857<bitfield high="11" low="8" name="BYTEL2"/>3858<bitfield high="15" low="12" name="BYTEL3"/>3859<bitfield high="19" low="16" name="BYTEL4"/>3860<bitfield high="23" low="20" name="BYTEL5"/>3861<bitfield high="27" low="24" name="BYTEL6"/>3862<bitfield high="31" low="28" name="BYTEL7"/>3863</reg32>3864<reg32 offset="0x0011" name="CFG_DBGBUS_BYTEL_1">3865<bitfield high="3" low="0" name="BYTEL8"/>3866<bitfield high="7" low="4" name="BYTEL9"/>3867<bitfield high="11" low="8" name="BYTEL10"/>3868<bitfield high="15" low="12" name="BYTEL11"/>3869<bitfield high="19" low="16" name="BYTEL12"/>3870<bitfield high="23" low="20" name="BYTEL13"/>3871<bitfield high="27" low="24" name="BYTEL14"/>3872<bitfield high="31" low="28" name="BYTEL15"/>3873</reg32>38743875<reg32 offset="0x002f" name="CFG_DBGBUS_TRACE_BUF1"/>3876<reg32 offset="0x0030" name="CFG_DBGBUS_TRACE_BUF2"/>3877</domain>38783879<domain name="A6XX_CX_MISC" width="32">3880<reg32 offset="0x0001" name="SYSTEM_CACHE_CNTL_0"/>3881<reg32 offset="0x0002" name="SYSTEM_CACHE_CNTL_1"/>3882</domain>38833884</database>388538863887