From 6b10e9c063b82fa47fb3807f0fe74647ff37233c Mon Sep 17 00:00:00 2001 From: Xianzhong Date: Mon, 23 Apr 2018 18:58:00 +0800 Subject: MGS-3705-2 gpu: add 6.2.4.p1 driver for 4.14 kernel integrate 6.2.4.p1 driver and enable gpu build config, fix 4.14 linux kernel build break in gpu-viv driver. source branch: gpu-viv6/fsl_6.2.4.p1 source commit: 8aa3fcbcad9f51441b768bb41ce5c2686f7f143f Signed-off-by: Xianzhong --- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | 1173 ++++++++++++++++++++ 1 file changed, 1173 insertions(+) create mode 100644 drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h (limited to 'drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h') diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h new file mode 100644 index 000000000000..2ee13d972d6f --- /dev/null +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h @@ -0,0 +1,1173 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2018 Vivante Corporation +* +* Permission is hereby granted, free of charge, to any person obtaining a +* copy of this software and associated documentation files (the "Software"), +* to deal in the Software without restriction, including without limitation +* the rights to use, copy, modify, merge, publish, distribute, sublicense, +* and/or sell copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +* DEALINGS IN THE SOFTWARE. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2018 Vivante Corporation +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#ifndef __gc_hal_profiler_h_ +#define __gc_hal_profiler_h_ + +#ifdef __cplusplus +extern "C" { +#endif + +#define GLVERTEX_OBJECT 10 +#define GLVERTEX_OBJECT_BYTES 11 + +#define GLINDEX_OBJECT 20 +#define GLINDEX_OBJECT_BYTES 21 + +#define GLTEXTURE_OBJECT 30 +#define GLTEXTURE_OBJECT_BYTES 31 + +#define GLBUFOBJ_OBJECT 40 +#define GLBUFOBJ_OBJECT_BYTES 41 + +#define ES11_CALLS 151 +#define ES11_DRAWCALLS (ES11_CALLS + 1) +#define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1) +#define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1) +#define ES11_LINECOUNT (ES11_POINTCOUNT + 1) +#define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1) + +#define ES30_CALLS 159 +#define ES30_DRAWCALLS (ES30_CALLS + 1) +#define ES30_STATECHANGECALLS (ES30_DRAWCALLS + 1) +#define ES30_POINTCOUNT (ES30_STATECHANGECALLS + 1) +#define ES30_LINECOUNT (ES30_POINTCOUNT + 1) +#define ES30_TRIANGLECOUNT (ES30_LINECOUNT + 1) + +#define VG11_CALLS 88 +#define VG11_DRAWCALLS (VG11_CALLS + 1) +#define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1) +#define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1) +#define VG11_STROKECOUNT (VG11_FILLCOUNT + 1) +/* End of Driver API ID Definitions. */ + +/* HAL & MISC IDs. */ +#define HAL_VERTBUFNEWBYTEALLOC 1 +#define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1) +#define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1) +#define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1) +#define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1) +#define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1) +#define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1) +#define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1) +#define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1) +#define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1) +#define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1) +#define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1) + +#define GPU_CYCLES 1 +#define GPU_READ64BYTE (GPU_CYCLES + 1) +#define GPU_WRITE64BYTE (GPU_READ64BYTE + 1) +#define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1) +#define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1) + +#define VS_INSTCOUNT 1 +#define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1) +#define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1) +#define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1) +#define VS_SOURCE (VS_RENDEREDVERTCOUNT + 1) +#define VS_NONIDLESTARVECOUNT (VS_SOURCE + 1) +#define VS_STARVELCOUNT (VS_NONIDLESTARVECOUNT + 1) +#define VS_STALLCOUNT (VS_STARVELCOUNT + 1) +#define VS_PROCESSCOUNT (VS_STALLCOUNT + 1) + +#define PS_INSTCOUNT 1 +#define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1) +#define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1) +#define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1) +#define PS_SOURCE (PS_RENDEREDPIXCOUNT + 1) +#define PS_NONIDLESTARVECOUNT (PS_SOURCE + 1) +#define PS_STARVELCOUNT (PS_NONIDLESTARVECOUNT + 1) +#define PS_STALLCOUNT (PS_STARVELCOUNT + 1) +#define PS_PROCESSCOUNT (PS_STALLCOUNT + 1) +#define PS_SHADERCYCLECOUNT (PS_PROCESSCOUNT + 1) + +#define PA_INVERTCOUNT 1 +#define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1) +#define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1) +#define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1) +#define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1) +#define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1) +#define PA_NONIDLESTARVECOUNT (PA_CULLCOUNT + 1) +#define PA_STARVELCOUNT (PA_NONIDLESTARVECOUNT + 1) +#define PA_STALLCOUNT (PA_STARVELCOUNT + 1) +#define PA_PROCESSCOUNT (PA_STALLCOUNT + 1) + +#define SE_TRIANGLECOUNT 1 +#define SE_LINECOUNT (SE_TRIANGLECOUNT + 1) +#define SE_STARVECOUNT (SE_LINECOUNT + 1) +#define SE_STALLCOUNT (SE_STARVECOUNT + 1) +#define SE_RECEIVETRIANGLECOUNT (SE_STALLCOUNT + 1) +#define SE_SENDTRIANGLECOUNT (SE_RECEIVETRIANGLECOUNT + 1) +#define SE_RECEIVELINESCOUNT (SE_SENDTRIANGLECOUNT + 1) +#define SE_SENDLINESCOUNT (SE_RECEIVELINESCOUNT + 1) +#define SE_NONIDLESTARVECOUNT (SE_SENDLINESCOUNT + 1) +#define SE_PROCESSCOUNT (SE_NONIDLESTARVECOUNT + 1) + +#define RA_VALIDPIXCOUNT 1 +#define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1) +#define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1) +#define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1) +#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1) +#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1) +#define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1) +#define RA_NONIDLESTARVECOUNT (RA_EEZCULLCOUNT + 1) +#define RA_STARVELCOUNT (RA_NONIDLESTARVECOUNT + 1) +#define RA_STALLCOUNT (RA_STARVELCOUNT + 1) +#define RA_PROCESSCOUNT (RA_STALLCOUNT + 1) + +#define TX_TOTBILINEARREQ 1 +#define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1) +#define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1) +#define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1) +#define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1) +#define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1) +#define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1) +#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1) +#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1) +#define TX_NONIDLESTARVECOUNT (TX_CACHEMISSTEXELCOUNT+ 1) +#define TX_STARVELCOUNT (TX_NONIDLESTARVECOUNT + 1) +#define TX_STALLCOUNT (TX_STARVELCOUNT + 1) +#define TX_PROCESSCOUNT (TX_STALLCOUNT + 1) + +#define PE_KILLEDBYCOLOR 1 +#define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1) +#define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1) +#define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1) + +#define MC_READREQ8BPIPE 1 +#define MC_READREQ8BIP (MC_READREQ8BPIPE + 1) +#define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1) +#define MC_AXIMINLATENCY (MC_WRITEREQ8BPIPE + 1) +#define MC_AXIMAXLATENCY (MC_AXIMINLATENCY + 1) +#define MC_AXITOTALLATENCY (MC_AXIMAXLATENCY + 1) +#define MC_AXISAMPLECOUNT (MC_AXITOTALLATENCY + 1) + +#define AXI_READREQSTALLED 1 +#define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1) +#define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1) + +#define FE_DRAWCOUNT 1 +#define FE_OUTVERTEXCOUNT (FE_DRAWCOUNT + 1) +#define FE_STALLCOUNT (FE_OUTVERTEXCOUNT + 1) +#define FE_STARVECOUNT (FE_STALLCOUNT + 1) + +#define PVS_INSTRCOUNT 1 +#define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1) +#define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1) +#define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1) +#define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1) +#define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1) +#define PVS_SOURCE (PVS_FUNCTIONCOUNT + 1) + +#define PPS_INSTRCOUNT 1 +#define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1) +#define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1) +#define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1) +#define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1) +#define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1) +#define PPS_SOURCE (PPS_FUNCTIONCOUNT + 1) +/* End of MISC Counter IDs. */ + + +/* Category Constants. */ +#define VPHEADER 0x010000 +#define VPG_INFO 0x020000 +#define VPG_TIME 0x030000 +#define VPG_MEM 0x040000 +#define VPG_ES11 0x050000 +#define VPG_ES30 0x060000 +#define VPG_VG11 0x070000 +#define VPG_HAL 0x080000 +#define VPG_HW 0x090000 +#define VPG_GPU 0x0a0000 +#define VPG_VS 0x0b0000 +#define VPG_PS 0x0c0000 +#define VPG_PA 0x0d0000 +#define VPG_SETUP 0x0e0000 +#define VPG_RA 0x0f0000 +#define VPG_TX 0x100000 +#define VPG_PE 0x110000 +#define VPG_MC 0x120000 +#define VPG_AXI 0x130000 +#define VPG_PROG 0x140000 +#define VPG_PVS 0x150000 +#define VPG_PPS 0x160000 +#define VPG_ES11_TIME 0x170000 +#define VPG_ES30_TIME 0x180000 +#define VPG_FRAME 0x190000 +#define VPG_ES11_DRAW 0x200000 +#define VPG_ES30_DRAW 0x210000 +#define VPG_VG11_TIME 0x220000 +#define VPG_FE 0x230000 +#define VPG_MULTI_GPU 0x240000 +#define VPNG_FE 0x250000 +#define VPNG_VS 0x260000 +#define VPNG_PS 0x270000 +#define VPNG_PA 0x280000 +#define VPNG_SETUP 0x290000 +#define VPNG_RA 0x2a0000 +#define VPNG_TX 0x2b0000 +#define VPNG_PE 0x2c0000 +#define VPNG_MCC 0x2d0000 +#define VPNG_MCZ 0x2e0000 +#define VPNG_HI 0x2f0000 +#define VPNG_L2 0x300000 +#define VPG_FINISH 0x310000 +#define VPG_END 0xff0000 + +/* Info. */ +#define VPC_INFOCOMPANY (VPG_INFO + 1) +#define VPC_INFOVERSION (VPC_INFOCOMPANY + 1) +#define VPC_INFORENDERER (VPC_INFOVERSION + 1) +#define VPC_INFOREVISION (VPC_INFORENDERER + 1) +#define VPC_INFODRIVER (VPC_INFOREVISION + 1) +#define VPC_INFODRIVERMODE (VPC_INFODRIVER + 1) +#define VPC_INFOSCREENSIZE (VPC_INFODRIVERMODE + 1) + +/* Counter Constants. */ +#define VPC_ELAPSETIME (VPG_TIME + 1) +#define VPC_CPUTIME (VPC_ELAPSETIME + 1) + +#define VPC_MEMMAXRES (VPG_MEM + 1) +#define VPC_MEMSHARED (VPC_MEMMAXRES + 1) +#define VPC_MEMUNSHAREDDATA (VPC_MEMSHARED + 1) +#define VPC_MEMUNSHAREDSTACK (VPC_MEMUNSHAREDDATA + 1) + +/* OpenGL ES11 Statics Counter IDs. */ +#define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS) +#define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS) +#define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS) +#define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT) +#define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT) +#define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT) + +/* OpenGL ES30 Statistics Counter IDs. */ +#define VPC_ES30CALLS (VPG_ES30 + ES30_CALLS) +#define VPC_ES30DRAWCALLS (VPG_ES30 + ES30_DRAWCALLS) +#define VPC_ES30STATECHANGECALLS (VPG_ES30 + ES30_STATECHANGECALLS) +#define VPC_ES30POINTCOUNT (VPG_ES30 + ES30_POINTCOUNT) +#define VPC_ES30LINECOUNT (VPG_ES30 + ES30_LINECOUNT) +#define VPC_ES30TRIANGLECOUNT (VPG_ES30 + ES30_TRIANGLECOUNT) + +/* OpenVG Statistics Counter IDs. */ +#define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS) +#define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS) +#define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS) +#define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT) +#define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT) + +/* HAL Counters. */ +#define VPC_HALVERTBUFNEWBYTEALLOC (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC) +#define VPC_HALVERTBUFTOTALBYTEALLOC (VPG_HAL + HAL_VERTBUFTOTALBYTEALLOC) +#define VPC_HALVERTBUFNEWOBJALLOC (VPG_HAL + HAL_VERTBUFNEWOBJALLOC) +#define VPC_HALVERTBUFTOTALOBJALLOC (VPG_HAL + HAL_VERTBUFTOTALOBJALLOC) +#define VPC_HALINDBUFNEWBYTEALLOC (VPG_HAL + HAL_INDBUFNEWBYTEALLOC) +#define VPC_HALINDBUFTOTALBYTEALLOC (VPG_HAL + HAL_INDBUFTOTALBYTEALLOC) +#define VPC_HALINDBUFNEWOBJALLOC (VPG_HAL + HAL_INDBUFNEWOBJALLOC) +#define VPC_HALINDBUFTOTALOBJALLOC (VPG_HAL + HAL_INDBUFTOTALOBJALLOC) +#define VPC_HALTEXBUFNEWBYTEALLOC (VPG_HAL + HAL_TEXBUFNEWBYTEALLOC) +#define VPC_HALTEXBUFTOTALBYTEALLOC (VPG_HAL + HAL_TEXBUFTOTALBYTEALLOC) +#define VPC_HALTEXBUFNEWOBJALLOC (VPG_HAL + HAL_TEXBUFNEWOBJALLOC) +#define VPC_HALTEXBUFTOTALOBJALLOC (VPG_HAL + HAL_TEXBUFTOTALOBJALLOC) + +/* HW: GPU Counters. */ +#define VPC_GPUCYCLES (VPG_GPU + GPU_CYCLES) +#define VPC_GPUREAD64BYTE (VPG_GPU + GPU_READ64BYTE) +#define VPC_GPUWRITE64BYTE (VPG_GPU + GPU_WRITE64BYTE) +#define VPC_GPUTOTALCYCLES (VPG_GPU + GPU_TOTALCYCLES) +#define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES) + +/* HW: Shader Counters. */ +#define VPC_VSINSTCOUNT (VPG_VS + VS_INSTCOUNT) +#define VPC_VSBRANCHINSTCOUNT (VPG_VS + VS_BRANCHINSTCOUNT) +#define VPC_VSTEXLDINSTCOUNT (VPG_VS + VS_TEXLDINSTCOUNT) +#define VPC_VSRENDEREDVERTCOUNT (VPG_VS + VS_RENDEREDVERTCOUNT) +#define VPC_VSNONIDLESTARVECOUNT (VPG_VS + VS_NONIDLESTARVECOUNT) +#define VPC_VSSTARVELCOUNT (VPG_VS + VS_STARVELCOUNT) +#define VPC_VSSTALLCOUNT (VPG_VS + VS_STALLCOUNT) +#define VPC_VSPROCESSCOUNT (VPG_VS + VS_PROCESSCOUNT) +/* HW: PS Count. */ +#define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT) +#define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT) +#define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT) +#define VPC_PSRENDEREDPIXCOUNT (VPG_PS + PS_RENDEREDPIXCOUNT) +#define VPC_PSNONIDLESTARVECOUNT (VPG_PS + PS_NONIDLESTARVECOUNT) +#define VPC_PSSTARVELCOUNT (VPG_PS + PS_STARVELCOUNT) +#define VPC_PSSTALLCOUNT (VPG_PS + PS_STALLCOUNT) +#define VPC_PSPROCESSCOUNT (VPG_PS + PS_PROCESSCOUNT) +#define VPC_PSSHADERCYCLECOUNT (VPG_PS + PS_SHADERCYCLECOUNT) + +/* HW: PA Counters. */ +#define VPC_PAINVERTCOUNT (VPG_PA + PA_INVERTCOUNT) +#define VPC_PAINPRIMCOUNT (VPG_PA + PA_INPRIMCOUNT) +#define VPC_PAOUTPRIMCOUNT (VPG_PA + PA_OUTPRIMCOUNT) +#define VPC_PADEPTHCLIPCOUNT (VPG_PA + PA_DEPTHCLIPCOUNT) +#define VPC_PATRIVIALREJCOUNT (VPG_PA + PA_TRIVIALREJCOUNT) +#define VPC_PACULLCOUNT (VPG_PA + PA_CULLCOUNT) +#define VPC_PANONIDLESTARVECOUNT (VPG_PA + PA_NONIDLESTARVECOUNT) +#define VPC_PASTARVELCOUNT (VPG_PA + PA_STARVELCOUNT) +#define VPC_PASTALLCOUNT (VPG_PA + PA_STALLCOUNT) +#define VPC_PAPROCESSCOUNT (VPG_PA + PA_PROCESSCOUNT) + +/* HW: Setup Counters. */ +#define VPC_SETRIANGLECOUNT (VPG_SETUP + SE_TRIANGLECOUNT) +#define VPC_SELINECOUNT (VPG_SETUP + SE_LINECOUNT) +#define VPC_SESTARVECOUNT (VPG_SETUP + SE_STARVECOUNT) +#define VPC_SESTALLCOUNT (VPG_SETUP + SE_STALLCOUNT) +#define VPC_SERECEIVETRIANGLECOUNT (VPG_SETUP + SE_RECEIVETRIANGLECOUNT) +#define VPC_SESENDTRIANGLECOUNT (VPG_SETUP + SE_SENDTRIANGLECOUNT) +#define VPC_SERECEIVELINESCOUNT (VPG_SETUP + SE_RECEIVELINESCOUNT) +#define VPC_SESENDLINESCOUNT (VPG_SETUP + SE_SENDLINESCOUNT) +#define VPC_SENONIDLESTARVECOUNT (VPG_SETUP + SE_NONIDLESTARVECOUNT) +#define VPC_SEPROCESSCOUNT (VPG_SETUP + SE_PROCESSCOUNT) + +/* HW: RA Counters. */ +#define VPC_RAVALIDPIXCOUNT (VPG_RA + RA_VALIDPIXCOUNT) +#define VPC_RATOTALQUADCOUNT (VPG_RA + RA_TOTALQUADCOUNT) +#define VPC_RAVALIDQUADCOUNTEZ (VPG_RA + RA_VALIDQUADCOUNTEZ) +#define VPC_RATOTALPRIMCOUNT (VPG_RA + RA_TOTALPRIMCOUNT) +#define VPC_RAPIPECACHEMISSCOUNT (VPG_RA + RA_PIPECACHEMISSCOUNT) +#define VPC_RAPREFCACHEMISSCOUNT (VPG_RA + RA_PREFCACHEMISSCOUNT) +#define VPC_RAEEZCULLCOUNT (VPG_RA + RA_EEZCULLCOUNT) +#define VPC_RANONIDLESTARVECOUNT (VPG_RA + RA_NONIDLESTARVECOUNT) +#define VPC_RASTARVELCOUNT (VPG_RA + RA_STARVELCOUNT) +#define VPC_RASTALLCOUNT (VPG_RA + RA_STALLCOUNT) +#define VPC_RAPROCESSCOUNT (VPG_RA + RA_PROCESSCOUNT) + +/* HW: TEX Counters. */ +#define VPC_TXTOTBILINEARREQ (VPG_TX + TX_TOTBILINEARREQ) +#define VPC_TXTOTTRILINEARREQ (VPG_TX + TX_TOTTRILINEARREQ) +#define VPC_TXTOTDISCARDTEXREQ (VPG_TX + TX_TOTDISCARDTEXREQ) +#define VPC_TXTOTTEXREQ (VPG_TX + TX_TOTTEXREQ) +#define VPC_TXMEMREADCOUNT (VPG_TX + TX_MEMREADCOUNT) +#define VPC_TXMEMREADIN8BCOUNT (VPG_TX + TX_MEMREADIN8BCOUNT) +#define VPC_TXCACHEMISSCOUNT (VPG_TX + TX_CACHEMISSCOUNT) +#define VPC_TXCACHEHITTEXELCOUNT (VPG_TX + TX_CACHEHITTEXELCOUNT) +#define VPC_TXCACHEMISSTEXELCOUNT (VPG_TX + TX_CACHEMISSTEXELCOUNT) +#define VPC_TXNONIDLESTARVECOUNT (VPG_TX + TX_NONIDLESTARVECOUNT) +#define VPC_TXSTARVELCOUNT (VPG_TX + TX_STARVELCOUNT) +#define VPC_TXSTALLCOUNT (VPG_TX + TX_STALLCOUNT) +#define VPC_TXPROCESSCOUNT (VPG_TX + TX_PROCESSCOUNT) + +/* HW: PE Counters. */ +#define VPC_PEKILLEDBYCOLOR (VPG_PE + PE_KILLEDBYCOLOR) +#define VPC_PEKILLEDBYDEPTH (VPG_PE + PE_KILLEDBYDEPTH) +#define VPC_PEDRAWNBYCOLOR (VPG_PE + PE_DRAWNBYCOLOR) +#define VPC_PEDRAWNBYDEPTH (VPG_PE + PE_DRAWNBYDEPTH) + +/* HW: MC Counters. */ +#define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE) +#define VPC_MCREADREQ8BIP (VPG_MC + MC_READREQ8BIP) +#define VPC_MCWRITEREQ8BPIPE (VPG_MC + MC_WRITEREQ8BPIPE) +#define VPC_MCAXIMINLATENCY (VPG_MC + MC_AXIMINLATENCY) +#define VPC_MCAXIMAXLATENCY (VPG_MC + MC_AXIMAXLATENCY) +#define VPC_MCAXITOTALLATENCY (VPG_MC + MC_AXITOTALLATENCY) +#define VPC_MCAXISAMPLECOUNT (VPG_MC + MC_AXISAMPLECOUNT) + +/* HW: AXI Counters. */ +#define VPC_AXIREADREQSTALLED (VPG_AXI + AXI_READREQSTALLED) +#define VPC_AXIWRITEREQSTALLED (VPG_AXI + AXI_WRITEREQSTALLED) +#define VPC_AXIWRITEDATASTALLED (VPG_AXI + AXI_WRITEDATASTALLED) + +/* HW: FE Counters. */ +#define VPC_FEDRAWCOUNT (VPG_FE + FE_DRAWCOUNT) +#define VPC_FEOUTVERTEXCOUNT (VPG_FE + FE_OUTVERTEXCOUNT) +#define VPC_FESTALLCOUNT (VPG_FE + FE_STALLCOUNT) +#define VPC_FESTARVECOUNT (VPG_FE + FE_STARVECOUNT) + +/* HW: Shader Counters. */ +#define VPNC_VSINSTCOUNT (VPNG_VS + 1) +#define VPNC_VSBRANCHINSTCOUNT (VPNG_VS + 2) +#define VPNC_VSTEXLDINSTCOUNT (VPNG_VS + 3) +#define VPNC_VSRENDEREDVERTCOUNT (VPNG_VS + 4) +#define VPNC_VSNONIDLESTARVECOUNT (VPNG_VS + 5) +#define VPNC_VSSTARVELCOUNT (VPNG_VS + 6) +#define VPNC_VSSTALLCOUNT (VPNG_VS + 7) +#define VPNC_VSPROCESSCOUNT (VPNG_VS + 8) +#define VPNC_VSSHADERCYCLECOUNT (VPNG_VS + 9) +#define VPNC_VS_COUNT VPNC_VSSHADERCYCLECOUNT - VPNG_VS + +/* HW: PS Count. */ +#define VPNC_PSINSTCOUNT (VPNG_PS + 1) +#define VPNC_PSBRANCHINSTCOUNT (VPNG_PS + 2) +#define VPNC_PSTEXLDINSTCOUNT (VPNG_PS + 3) +#define VPNC_PSRENDEREDPIXCOUNT (VPNG_PS + 4) +#define VPNC_PSNONIDLESTARVECOUNT (VPNG_PS + 5) +#define VPNC_PSSTARVELCOUNT (VPNG_PS + 6) +#define VPNC_PSSTALLCOUNT (VPNG_PS + 7) +#define VPNC_PSPROCESSCOUNT (VPNG_PS + 8) +#define VPNC_PSSHADERCYCLECOUNT (VPNG_PS + 9) +#define VPNC_PS_COUNT VPNC_PSSHADERCYCLECOUNT - VPNG_PS + +/* HW: PA Counters. */ +#define VPNC_PAINVERTCOUNT (VPNG_PA + 1) +#define VPNC_PAINPRIMCOUNT (VPNG_PA + 2) +#define VPNC_PAOUTPRIMCOUNT (VPNG_PA + 3) +#define VPNC_PADEPTHCLIPCOUNT (VPNG_PA + 4) +#define VPNC_PATRIVIALREJCOUNT (VPNG_PA + 5) +#define VPNC_PACULLPRIMCOUNT (VPNG_PA + 6) +#define VPNC_PADROPPRIMCOUNT (VPNG_PA + 7) +#define VPNC_PAFRCLIPPRIMCOUNT (VPNG_PA + 8) +#define VPNC_PAFRCLIPDROPPRIMCOUNT (VPNG_PA + 9) +#define VPNC_PANONIDLESTARVECOUNT (VPNG_PA + 10) +#define VPNC_PASTARVELCOUNT (VPNG_PA + 11) +#define VPNC_PASTALLCOUNT (VPNG_PA + 12) +#define VPNC_PAPROCESSCOUNT (VPNG_PA + 13) +#define VPNC_PA_COUNT VPNC_PAPROCESSCOUNT - VPNG_PA + +/* HW: Setup Counters. */ +#define VPNC_SECULLTRIANGLECOUNT (VPNG_SETUP + 1) +#define VPNC_SECULLLINECOUNT (VPNG_SETUP + 2) +#define VPNC_SECLIPTRIANGLECOUNT (VPNG_SETUP + 3) +#define VPNC_SECLIPLINECOUNT (VPNG_SETUP + 4) +#define VPNC_SESTARVECOUNT (VPNG_SETUP + 5) +#define VPNC_SESTALLCOUNT (VPNG_SETUP + 6) +#define VPNC_SERECEIVETRIANGLECOUNT (VPNG_SETUP + 7) +#define VPNC_SESENDTRIANGLECOUNT (VPNG_SETUP + 8) +#define VPNC_SERECEIVELINESCOUNT (VPNG_SETUP + 9) +#define VPNC_SESENDLINESCOUNT (VPNG_SETUP + 10) +#define VPNC_SENONIDLESTARVECOUNT (VPNG_SETUP + 11) +#define VPNC_SETRIVIALREJLINECOUNT (VPNG_SETUP + 12) +#define VPNC_SEPROCESSCOUNT (VPNG_SETUP + 13) +#define VPNC_SE_COUNT VPNC_SEPROCESSCOUNT - VPNG_SETUP + +/* HW: RA Counters. */ +#define VPNC_RAVALIDPIXCOUNT (VPNG_RA + 1) +#define VPNC_RATOTALQUADCOUNT (VPNG_RA + 2) +#define VPNC_RAVALIDQUADCOUNTEZ (VPNG_RA + 3) +#define VPNC_RAINPUTPRIMCOUNT (VPNG_RA + 4) +#define VPNC_RAPIPECACHEMISSCOUNT (VPNG_RA + 5) +#define VPNC_RAPREFCACHEMISSCOUNT (VPNG_RA + 6) +#define VPNC_RAPIPEHZCACHEMISSCOUNT (VPNG_RA + 7) +#define VPNC_RAPREFHZCACHEMISSCOUNT (VPNG_RA + 8) +#define VPNC_RAOUTPUTQUADCOUNT (VPNG_RA + 9) +#define VPNC_RAOUTPUTPIXELCOUNT (VPNG_RA + 10) +#define VPNC_RAEEZCULLCOUNT (VPNG_RA + 11) +#define VPNC_RANONIDLESTARVECOUNT (VPNG_RA + 12) +#define VPNC_RASTARVELCOUNT (VPNG_RA + 13) +#define VPNC_RASTALLCOUNT (VPNG_RA + 14) +#define VPNC_RAPROCESSCOUNT (VPNG_RA + 15) +#define VPNC_RA_COUNT VPNC_RAPROCESSCOUNT - VPNG_RA + +/* HW: TEX Counters. */ +#define VPNC_TXTOTBILINEARREQ (VPNG_TX + 1) +#define VPNC_TXTOTTRILINEARREQ (VPNG_TX + 2) +#define VPNC_TXTOTDISCARDTEXREQ (VPNG_TX + 3) +#define VPNC_TXTOTTEXREQ (VPNG_TX + 4) +#define VPNC_TXMC0MISSCOUNT (VPNG_TX + 5) +#define VPNC_TXMC0REQCOUNT (VPNG_TX + 6) +#define VPNC_TXMC1MISSCOUNT (VPNG_TX + 7) +#define VPNC_TXMC1REQCOUNT (VPNG_TX + 8) +#define VPNC_TX_COUNT VPNC_TXMC1REQCOUNT - VPNG_TX + +/* HW: PE Counters. */ +#define VPNC_PE0KILLEDBYCOLOR (VPNG_PE + 1) +#define VPNC_PE0KILLEDBYDEPTH (VPNG_PE + 2) +#define VPNC_PE0DRAWNBYCOLOR (VPNG_PE + 3) +#define VPNC_PE0DRAWNBYDEPTH (VPNG_PE + 4) +#define VPNC_PE1KILLEDBYCOLOR (VPNG_PE + 5) +#define VPNC_PE1KILLEDBYDEPTH (VPNG_PE + 6) +#define VPNC_PE1DRAWNBYCOLOR (VPNG_PE + 7) +#define VPNC_PE1DRAWNBYDEPTH (VPNG_PE + 8) +#define VPNC_PE_COUNT VPNC_PE1DRAWNBYDEPTH - VPNG_PE + +/* HW: MCC Counters. */ +#define VPNC_MCCREADREQ8BCOLORPIPE (VPNG_MCC + 1) +#define VPNC_MCCREADREQ8BSOCOLORPIPE (VPNG_MCC + 2) +#define VPNC_MCCWRITEREQ8BCOLORPIPE (VPNG_MCC + 3) +#define VPNC_MCCREADREQSOCOLORPIPE (VPNG_MCC + 4) +#define VPNC_MCCWRITEREQCOLORPIPE (VPNG_MCC + 5) +#define VPNC_MCCREADREQ8BDEPTHPIPE (VPNG_MCC + 6) +#define VPNC_MCCREADREQ8BSFDEPTHPIPE (VPNG_MCC + 7) +#define VPNC_MCCWRITEREQ8BDEPTHPIPE (VPNG_MCC + 8) +#define VPNC_MCCREADREQSFDEPTHPIPE (VPNG_MCC + 9) +#define VPNC_MCCWRITEREQDEPTHPIPE (VPNG_MCC + 10) +#define VPNC_MCCREADREQ8BOTHERPIPE (VPNG_MCC + 11) +#define VPNC_MCCWRITEREQ8BOTHERPIPE (VPNG_MCC + 12) +#define VPNC_MCCREADREQOTHERPIPE (VPNG_MCC + 13) +#define VPNC_MCCWRITEREQOTHERPIPE (VPNG_MCC + 14) +#define VPNC_MCCAXIMINLATENCY (VPNG_MCC + 15) +#define VPNC_MCCAXIMAXLATENCY (VPNG_MCC + 16) +#define VPNC_MCCAXITOTALLATENCY (VPNG_MCC + 17) +#define VPNC_MCCAXISAMPLECOUNT (VPNG_MCC + 18) +#define VPNC_MCCFEREADBANDWIDTH (VPNG_MCC + 19) +#define VPNC_MCCMMUREADBANDWIDTH (VPNG_MCC + 20) +#define VPNC_MCCBLTREADBANDWIDTH (VPNG_MCC + 21) +#define VPNC_MCCSH0READBANDWIDTH (VPNG_MCC + 22) +#define VPNC_MCCSH1READBANDWIDTH (VPNG_MCC + 23) +#define VPNC_MCCPEWRITEBANDWIDTH (VPNG_MCC + 24) +#define VPNC_MCCBLTWRITEBANDWIDTH (VPNG_MCC + 25) +#define VPNC_MCCSH0WRITEBANDWIDTH (VPNG_MCC + 26) +#define VPNC_MCCSH1WRITEBANDWIDTH (VPNG_MCC + 27) +#define VPNC_MCC_COUNT VPNC_MCCSH1WRITEBANDWIDTH - VPNG_MCC + +/* HW: MCZ Counters. */ +#define VPNC_MCZREADREQ8BCOLORPIPE (VPNG_MCZ + 1) +#define VPNC_MCZREADREQ8BSOCOLORPIPE (VPNG_MCZ + 2) +#define VPNC_MCZWRITEREQ8BCOLORPIPE (VPNG_MCZ + 3) +#define VPNC_MCZREADREQSOCOLORPIPE (VPNG_MCZ + 4) +#define VPNC_MCZWRITEREQCOLORPIPE (VPNG_MCZ + 5) +#define VPNC_MCZREADREQ8BDEPTHPIPE (VPNG_MCZ + 6) +#define VPNC_MCZREADREQ8BSFDEPTHPIPE (VPNG_MCZ + 7) +#define VPNC_MCZWRITEREQ8BDEPTHPIPE (VPNG_MCZ + 8) +#define VPNC_MCZREADREQSFDEPTHPIPE (VPNG_MCZ + 9) +#define VPNC_MCZWRITEREQDEPTHPIPE (VPNG_MCZ + 10) +#define VPNC_MCZREADREQ8BOTHERPIPE (VPNG_MCZ + 11) +#define VPNC_MCZWRITEREQ8BOTHERPIPE (VPNG_MCZ + 12) +#define VPNC_MCZREADREQOTHERPIPE (VPNG_MCZ + 13) +#define VPNC_MCZWRITEREQOTHERPIPE (VPNG_MCZ + 14) +#define VPNC_MCZAXIMINLATENCY (VPNG_MCZ + 15) +#define VPNC_MCZAXIMAXLATENCY (VPNG_MCZ + 16) +#define VPNC_MCZAXITOTALLATENCY (VPNG_MCZ + 17) +#define VPNC_MCZAXISAMPLECOUNT (VPNG_MCZ + 18) +#define VPNC_MCZ_COUNT VPNC_MCZAXISAMPLECOUNT - VPNG_MCZ + +/* HW: HI Counters. */ +#define VPNC_HI0READ8BYTE (VPNG_HI + 1) +#define VPNC_HI0WRITE8BYTE (VPNG_HI + 2) +#define VPNC_HI0READREQ (VPNG_HI + 3) +#define VPNC_HI0WRITEREQ (VPNG_HI + 4) +#define VPNC_HI0AXIREADREQSTALL (VPNG_HI + 5) +#define VPNC_HI0AXIWRITEREQSTALL (VPNG_HI + 6) +#define VPNC_HI0AXIWRITEDATASTALL (VPNG_HI + 7) +#define VPNC_HI1READ8BYTE (VPNG_HI + 8) +#define VPNC_HI1WRITE8BYTE (VPNG_HI + 9) +#define VPNC_HI1READREQ (VPNG_HI + 10) +#define VPNC_HI1WRITEREQ (VPNG_HI + 11) +#define VPNC_HI1AXIREADREQSTALL (VPNG_HI + 12) +#define VPNC_HI1AXIWRITEREQSTALL (VPNG_HI + 13) +#define VPNC_HI1AXIWRITEDATASTALL (VPNG_HI + 14) +#define VPNC_HITOTALCYCLES (VPNG_HI + 15) +#define VPNC_HIIDLECYCLES (VPNG_HI + 16) +#define VPNC_HIREAD8BYTE (VPNG_HI + 17) +#define VPNC_HIWRITE8BYTE (VPNG_HI + 18) +#define VPNC_HI_COUNT VPNC_HIWRITE8BYTE - VPNG_HI + +/* HW: L2 Counters. */ +#define VPNC_L2AXI0READREQCOUNT (VPNG_L2 + 1) +#define VPNC_L2AXI1READREQCOUNT (VPNG_L2 + 2) +#define VPNC_L2AXI0WRITEREQCOUNT (VPNG_L2 + 3) +#define VPNC_L2AXI1WRITEREQCOUNT (VPNG_L2 + 4) +#define VPNC_L2READTRANSREQBYAXI0 (VPNG_L2 + 5) +#define VPNC_L2READTRANSREQBYAXI1 (VPNG_L2 + 6) +#define VPNC_L2WRITETRANSREQBYAXI0 (VPNG_L2 + 7) +#define VPNC_L2WRITETRANSREQBYAXI1 (VPNG_L2 + 8) +#define VPNC_L2AXI0MINLATENCY (VPNG_L2 + 9) +#define VPNC_L2AXI0MAXLATENCY (VPNG_L2 + 10) +#define VPNC_L2AXI0TOTLATENCY (VPNG_L2 + 11) +#define VPNC_L2AXI0TOTREQCOUNT (VPNG_L2 + 12) +#define VPNC_L2AXI1MINLATENCY (VPNG_L2 + 13) +#define VPNC_L2AXI1MAXLATENCY (VPNG_L2 + 14) +#define VPNC_L2AXI1TOTLATENCY (VPNG_L2 + 15) +#define VPNC_L2AXI1TOTREQCOUNT (VPNG_L2 + 16) +#define VPNC_L2_COUNT VPNC_L2AXI1TOTREQCOUNT - VPNG_L2 + +/* HW: FE Counters. */ +#define VPNC_FEDRAWCOUNT (VPNG_FE + 1) +#define VPNC_FEOUTVERTEXCOUNT (VPNG_FE + 2) +#define VPNC_FECACHEMISSCOUNT (VPNG_FE + 3) +#define VPNC_FECACHELKCOUNT (VPNG_FE + 4) +#define VPNC_FESTALLCOUNT (VPNG_FE + 5) +#define VPNC_FESTARVECOUNT (VPNG_FE + 6) +#define VPNC_FEPROCESSCOUNT (VPNG_FE + 7) +#define VPNC_FE_COUNT VPNC_FEPROCESSCOUNT - VPNG_FE + +#define TOTAL_COUNTER_NUMBER (VPNC_FE_COUNT + VPNC_VS_COUNT + VPNC_PA_COUNT + VPNC_SE_COUNT + VPNC_RA_COUNT \ + + VPNC_PS_COUNT + VPNC_TX_COUNT + VPNC_PE_COUNT + VPNC_MCC_COUNT + VPNC_MCZ_COUNT \ + + VPNC_HI_COUNT + VPNC_L2_COUNT) + +#define TOTAL_MODULE_NUMBER 12 + +/* PROGRAM: Shader program counters. */ +#define VPC_PVSINSTRCOUNT (VPG_PVS + PVS_INSTRCOUNT) +#define VPC_PVSALUINSTRCOUNT (VPG_PVS + PVS_ALUINSTRCOUNT) +#define VPC_PVSTEXINSTRCOUNT (VPG_PVS + PVS_TEXINSTRCOUNT) +#define VPC_PVSATTRIBCOUNT (VPG_PVS + PVS_ATTRIBCOUNT) +#define VPC_PVSUNIFORMCOUNT (VPG_PVS + PVS_UNIFORMCOUNT) +#define VPC_PVSFUNCTIONCOUNT (VPG_PVS + PVS_FUNCTIONCOUNT) +#define VPC_PVSSOURCE (VPG_PVS + PVS_SOURCE) + +#define VPC_PPSINSTRCOUNT (VPG_PPS + PPS_INSTRCOUNT) +#define VPC_PPSALUINSTRCOUNT (VPG_PPS + PPS_ALUINSTRCOUNT) +#define VPC_PPSTEXINSTRCOUNT (VPG_PPS + PPS_TEXINSTRCOUNT) +#define VPC_PPSATTRIBCOUNT (VPG_PPS + PPS_ATTRIBCOUNT) +#define VPC_PPSUNIFORMCOUNT (VPG_PPS + PPS_UNIFORMCOUNT) +#define VPC_PPSFUNCTIONCOUNT (VPG_PPS + PPS_FUNCTIONCOUNT) +#define VPC_PPSSOURCE (VPG_PPS + PPS_SOURCE) + +#define VPC_PROGRAMHANDLE (VPG_PROG + 1) + +#define VPC_ES30_DRAW_NO (VPG_ES30_DRAW + 1) +#define VPC_ES11_DRAW_NO (VPG_ES11_DRAW + 1) +#define VPC_ES30_GPU_NO (VPG_MULTI_GPU + 1) + + +#define MODULE_FRONT_END_COUNTER_NUM 0x5 +#define MODULE_VERTEX_SHADER_COUNTER_NUM 0x9 +#define MODULE_PRIMITIVE_ASSEMBLY_COUNTER_NUM 0xC +#define MODULE_SETUP_COUNTER_NUM 0xD +#define MODULE_RASTERIZER_COUNTER_NUM 0xE +#define MODULE_PIXEL_SHADER_COUNTER_NUM 0x9 +#define MODULE_TEXTURE_COUNTER_NUM 0x8 +#define MODULE_PIXEL_ENGINE_COUNTER_NUM 0x8 +#define MODULE_MEMORY_CONTROLLER_COLOR_COUNTER_NUM 0xC +#define MODULE_MEMORY_CONTROLLER_DEPTH_COUNTER_NUM 0xC +#define MODULE_HOST_INTERFACE0_COUNTER_NUM 0x9 +#define MODULE_HOST_INTERFACE1_COUNTER_NUM 0x7 +#define MODULE_GPUL2_CACHE_COUNTER_NUM 0xE +#define TOTAL_PROBE_NUMBER (MODULE_FRONT_END_COUNTER_NUM + MODULE_VERTEX_SHADER_COUNTER_NUM + MODULE_PRIMITIVE_ASSEMBLY_COUNTER_NUM \ + + MODULE_SETUP_COUNTER_NUM + MODULE_RASTERIZER_COUNTER_NUM + MODULE_PIXEL_SHADER_COUNTER_NUM \ + + MODULE_TEXTURE_COUNTER_NUM + MODULE_PIXEL_ENGINE_COUNTER_NUM + MODULE_MEMORY_CONTROLLER_COLOR_COUNTER_NUM \ + + MODULE_MEMORY_CONTROLLER_DEPTH_COUNTER_NUM + MODULE_HOST_INTERFACE0_COUNTER_NUM + MODULE_HOST_INTERFACE1_COUNTER_NUM \ + + MODULE_GPUL2_CACHE_COUNTER_NUM) + + +#ifdef ANDROID +#define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.vpd" +#else +#define DEFAULT_PROFILE_FILE_NAME "vprofiler.vpd" +#endif + +#if gcdENDIAN_BIG +#define BIG_ENDIAN_TRANS_INT(x) ((gctUINT32)( \ + (((gctUINT32)(x) & (gctUINT32)0x000000FFUL) << 24) | \ + (((gctUINT32)(x) & (gctUINT32)0x0000FF00UL) << 8) | \ + (((gctUINT32)(x) & (gctUINT32)0x00FF0000UL) >> 8) | \ + (((gctUINT32)(x) & (gctUINT32)0xFF000000UL) >> 24))) +#else +#define BIG_ENDIAN_TRANS_INT(x) x +#endif + +/* Write a data value. */ +#define gcmWRITE_VALUE(IntData) \ + do \ + { \ + gceSTATUS status; \ + gctINT32 value = IntData; \ + value = BIG_ENDIAN_TRANS_INT(value); \ + gcmERR_BREAK(gcoPROFILER_Write(Profiler, gcmSIZEOF(value), &value)); \ + } \ + while (gcvFALSE) + +#define gcmWRITE_CONST(Const) \ + do \ + { \ + gceSTATUS status; \ + gctINT32 data = Const; \ + data = BIG_ENDIAN_TRANS_INT(data); \ + gcmERR_BREAK(gcoPROFILER_Write(Profiler, gcmSIZEOF(data), &data)); \ + } \ + while (gcvFALSE) + +#define gcmWRITE_COUNTER(Counter, Value) \ + gcmWRITE_CONST(Counter); \ + gcmWRITE_VALUE(Value) + +/* Write a data value. */ +#define gcmRECORD_VALUE(IntData) \ + do \ + { \ + gctINT32 value = IntData; \ + value = BIG_ENDIAN_TRANS_INT(value); \ + counterData[counterIndex++] = value; \ + } \ + while (gcvFALSE) + +#define gcmRECORD_CONST(Const) \ + do \ + { \ + gctINT32 data = Const; \ + data = BIG_ENDIAN_TRANS_INT(data); \ + counterData[counterIndex++] = data; \ + } \ + while (gcvFALSE) + +#define gcmRECORD_COUNTER(Counter, Value) \ + gcmRECORD_CONST(Counter); \ + gcmRECORD_VALUE(Value) + +/* Write a string value (char*). */ +#define gcmWRITE_STRING(String) \ + do \ + { \ + gceSTATUS status; \ + gctINT32 length; \ + length = (gctINT32) gcoOS_StrLen((gctSTRING)String, gcvNULL); \ + length = BIG_ENDIAN_TRANS_INT(length); \ + gcmERR_BREAK(gcoPROFILER_Write(Profiler, gcmSIZEOF(length), &length)); \ + gcmERR_BREAK(gcoPROFILER_Write(Profiler, length, String)); \ + } \ + while (gcvFALSE) + +#define gcmWRITE_BUFFER(Size, Buffer) \ + do \ + { \ + gceSTATUS status; \ + gcmERR_BREAK(gcoPROFILER_Write(Profiler, Size, Buffer)); \ + } \ + while (gcvFALSE) + +#define gcmGET_COUNTER(counter, counterId) \ + do \ + { \ + if ((gctUINT32)*(memory + counterId + offset) == 0xdeaddead) \ + { \ + counter = 0xdeaddead; \ + } \ + else \ + { \ + gctUINT64_PTR Memory = memory; \ + Memory += TOTAL_PROBE_NUMBER * CoreId; \ + counter = (gctUINT32)*(Memory + counterId + offset); \ + } \ + } \ + while (gcvFALSE) + +#define gcmGET_LATENCY_COUNTER(minLatency, maxLatency, counterId) \ + do \ + { \ + if ((gctUINT32)*(memory + counterId + offset) == 0xdeaddead) \ + { \ + minLatency = maxLatency = 0xdeaddead; \ + } \ + else \ + { \ + gctUINT64_PTR Memory = memory; \ + Memory += TOTAL_PROBE_NUMBER * CoreId; \ + maxLatency = (((gctUINT32)*(Memory + counterId + offset) & 0xfff000) >> 12); \ + minLatency = ((gctUINT32)*(Memory + counterId + offset) & 0x000fff); \ + if (minLatency == 4095) \ + minLatency = 0; \ + } \ + } \ + while (gcvFALSE) + +typedef enum _gceCOUNTER +{ + gcvCOUNTER_FRONT_END, + gcvCOUNTER_VERTEX_SHADER, + gcvCOUNTER_PRIMITIVE_ASSEMBLY, + gcvCOUNTER_SETUP, + gcvCOUNTER_RASTERIZER, + gcvCOUNTER_PIXEL_SHADER, + gcvCOUNTER_TEXTURE, + gcvCOUNTER_PIXEL_ENGINE, + gcvCOUNTER_MEMORY_CONTROLLER_COLOR, + gcvCOUNTER_MEMORY_CONTROLLER_DEPTH, + gcvCOUNTER_HOST_INTERFACE0, + gcvCOUNTER_HOST_INTERFACE1, + gcvCOUNTER_GPUL2_CACHE, + gcvCOUNTER_COUNT +} +gceCOUNTER; + +typedef enum _gceProfilerClient +{ + gcvCLIENT_OPENGLES11 = 1, + gcvCLIENT_OPENGLES, + gcvCLIENT_OPENGL, + gcvCLIENT_OPENVG, + gcvCLIENT_OPENCL, + gcvCLIENT_OPENVX, + gcvCLIENT_OPENVK, +} +gceProfilerClient; + +/* HW profile information. */ +typedef struct _gcsPROFILER_COUNTERS_PART1 +{ + gctUINT32 gpuTotalRead64BytesPerFrame; + gctUINT32 gpuTotalWrite64BytesPerFrame; + + /* FE */ + gctUINT32 fe_draw_count; + gctUINT32 fe_out_vertex_count; + gctUINT32 fe_cache_miss_count; + gctUINT32 fe_cache_lk_count; + gctUINT32 fe_stall_count; + gctUINT32 fe_starve_count; + gctUINT32 fe_process_count; + + /* PE */ + gctUINT32 pe0_pixel_count_killed_by_color_pipe; + gctUINT32 pe0_pixel_count_killed_by_depth_pipe; + gctUINT32 pe0_pixel_count_drawn_by_color_pipe; + gctUINT32 pe0_pixel_count_drawn_by_depth_pipe; + gctUINT32 pe1_pixel_count_killed_by_color_pipe; + gctUINT32 pe1_pixel_count_killed_by_depth_pipe; + gctUINT32 pe1_pixel_count_drawn_by_color_pipe; + gctUINT32 pe1_pixel_count_drawn_by_depth_pipe; + + /* SH */ + gctUINT32 shader_cycle_count; + gctUINT32 vs_shader_cycle_count; + gctUINT32 ps_shader_cycle_count; + gctUINT32 ps_inst_counter; + gctUINT32 ps_rendered_pixel_counter; + gctUINT32 vs_inst_counter; + gctUINT32 vs_rendered_vertice_counter; + gctUINT32 vs_branch_inst_counter; + gctUINT32 vs_texld_inst_counter; + gctUINT32 ps_branch_inst_counter; + gctUINT32 ps_texld_inst_counter; + gctUINT32 vs_non_idle_starve_count; + gctUINT32 vs_starve_count; + gctUINT32 vs_stall_count; + gctUINT32 vs_process_count; + gctUINT32 ps_non_idle_starve_count; + gctUINT32 ps_starve_count; + gctUINT32 ps_stall_count; + gctUINT32 ps_process_count; + + /* PA */ + gctUINT32 pa_input_vtx_counter; + gctUINT32 pa_input_prim_counter; + gctUINT32 pa_output_prim_counter; + gctUINT32 pa_depth_clipped_counter; + gctUINT32 pa_trivial_rejected_counter; + gctUINT32 pa_culled_prim_counter; + gctUINT32 pa_droped_prim_counter; + gctUINT32 pa_frustum_clipped_prim_counter; + gctUINT32 pa_frustum_clipdroped_prim_counter; + gctUINT32 pa_non_idle_starve_count; + gctUINT32 pa_starve_count; + gctUINT32 pa_stall_count; + gctUINT32 pa_process_count; + + /* SE */ + gctUINT32 se_culled_triangle_count; + gctUINT32 se_culled_lines_count; + gctUINT32 se_clipped_triangle_count; + gctUINT32 se_clipped_line_count; + gctUINT32 se_starve_count; + gctUINT32 se_stall_count; + gctUINT32 se_receive_triangle_count; + gctUINT32 se_send_triangle_count; + gctUINT32 se_receive_lines_count; + gctUINT32 se_send_lines_count; + gctUINT32 se_process_count; + gctUINT32 se_trivial_rejected_line_count; + gctUINT32 se_non_idle_starve_count; + + /* RA */ + gctUINT32 ra_input_prim_count; + gctUINT32 ra_total_quad_count; + gctUINT32 ra_valid_quad_count_after_early_z; + gctUINT32 ra_valid_pixel_count_to_render; + gctUINT32 ra_output_valid_quad_count; + gctUINT32 ra_output_valid_pixel_count; + gctUINT32 ra_pipe_cache_miss_counter; + gctUINT32 ra_pipe_hz_cache_miss_counter; + gctUINT32 ra_prefetch_cache_miss_counter; + gctUINT32 ra_prefetch_hz_cache_miss_counter; + gctUINT32 ra_eez_culled_counter; + gctUINT32 ra_non_idle_starve_count; + gctUINT32 ra_starve_count; + gctUINT32 ra_stall_count; + gctUINT32 ra_process_count; + + /* TX */ + gctUINT32 tx_total_bilinear_requests; + gctUINT32 tx_total_trilinear_requests; + gctUINT32 tx_total_discarded_texture_requests; + gctUINT32 tx_total_texture_requests; + gctUINT32 tx_mc0_miss_count; + gctUINT32 tx_mc0_request_byte_count; + gctUINT32 tx_mc1_miss_count; + gctUINT32 tx_mc1_request_byte_count; + gctUINT32 tx_non_idle_starve_count; + gctUINT32 tx_starve_count; + gctUINT32 tx_stall_count; + gctUINT32 tx_process_count; +} +gcsPROFILER_COUNTERS_PART1; + +typedef struct _gcsPROFILER_COUNTERS_PART2 +{ + /* MCC */ + gctUINT32 mcc_total_read_req_8B_from_colorpipe; + gctUINT32 mcc_total_read_req_8B_sentout_from_colorpipe; + gctUINT32 mcc_total_write_req_8B_from_colorpipe; + gctUINT32 mcc_total_read_req_sentout_from_colorpipe; + gctUINT32 mcc_total_write_req_from_colorpipe; + gctUINT32 mcc_total_read_req_8B_from_depthpipe; + gctUINT32 mcc_total_read_req_8B_sentout_from_depthpipe; + gctUINT32 mcc_total_write_req_8B_from_depthpipe; + gctUINT32 mcc_total_read_req_sentout_from_depthpipe; + gctUINT32 mcc_total_write_req_from_depthpipe; + gctUINT32 mcc_total_read_req_8B_from_others; + gctUINT32 mcc_total_write_req_8B_from_others; + gctUINT32 mcc_total_read_req_from_others; + gctUINT32 mcc_total_write_req_from_others; + gctUINT32 mcc_axi_total_latency; + gctUINT32 mcc_axi_sample_count; + gctUINT32 mcc_axi_max_latency; + gctUINT32 mcc_axi_min_latency; + gctUINT32 mc_fe_read_bandwidth; + gctUINT32 mc_mmu_read_bandwidth; + gctUINT32 mc_blt_read_bandwidth; + gctUINT32 mc_sh0_read_bandwidth; + gctUINT32 mc_sh1_read_bandwidth; + gctUINT32 mc_pe_write_bandwidth; + gctUINT32 mc_blt_write_bandwidth; + gctUINT32 mc_sh0_write_bandwidth; + gctUINT32 mc_sh1_write_bandwidth; + + /* MCZ */ + gctUINT32 mcz_total_read_req_8B_from_colorpipe; + gctUINT32 mcz_total_read_req_8B_sentout_from_colorpipe; + gctUINT32 mcz_total_write_req_8B_from_colorpipe; + gctUINT32 mcz_total_read_req_sentout_from_colorpipe; + gctUINT32 mcz_total_write_req_from_colorpipe; + gctUINT32 mcz_total_read_req_8B_from_depthpipe; + gctUINT32 mcz_total_read_req_8B_sentout_from_depthpipe; + gctUINT32 mcz_total_write_req_8B_from_depthpipe; + gctUINT32 mcz_total_read_req_sentout_from_depthpipe; + gctUINT32 mcz_total_write_req_from_depthpipe; + gctUINT32 mcz_total_read_req_8B_from_others; + gctUINT32 mcz_total_write_req_8B_from_others; + gctUINT32 mcz_total_read_req_from_others; + gctUINT32 mcz_total_write_req_from_others; + gctUINT32 mcz_axi_total_latency; + gctUINT32 mcz_axi_sample_count; + gctUINT32 mcz_axi_max_latency; + gctUINT32 mcz_axi_min_latency; + + /* HI */ + gctUINT32 hi0_total_read_8B_count; + gctUINT32 hi0_total_write_8B_count; + gctUINT32 hi0_total_read_request_count; + gctUINT32 hi0_total_write_request_count; + gctUINT32 hi0_axi_cycles_read_request_stalled; + gctUINT32 hi0_axi_cycles_write_request_stalled; + gctUINT32 hi0_axi_cycles_write_data_stalled; + gctUINT32 hi1_total_read_8B_count; + gctUINT32 hi1_total_write_8B_count; + gctUINT32 hi1_total_read_request_count; + gctUINT32 hi1_total_write_request_count; + gctUINT32 hi1_axi_cycles_read_request_stalled; + gctUINT32 hi1_axi_cycles_write_request_stalled; + gctUINT32 hi1_axi_cycles_write_data_stalled; + gctUINT32 hi_total_cycle_count; + gctUINT32 hi_total_idle_cycle_count; + gctUINT32 hi_total_read_8B_count; + gctUINT32 hi_total_write_8B_count; + + /* L2 */ + gctUINT32 l2_total_axi0_read_request_count; + gctUINT32 l2_total_axi1_read_request_count; + gctUINT32 l2_total_axi0_write_request_count; + gctUINT32 l2_total_axi1_write_request_count; + gctUINT32 l2_total_read_transactions_request_by_axi0; + gctUINT32 l2_total_read_transactions_request_by_axi1; + gctUINT32 l2_total_write_transactions_request_by_axi0; + gctUINT32 l2_total_write_transactions_request_by_axi1; + gctUINT32 l2_axi0_minmax_latency; + gctUINT32 l2_axi0_min_latency; + gctUINT32 l2_axi0_max_latency; + gctUINT32 l2_axi0_total_latency; + gctUINT32 l2_axi0_total_request_count; + gctUINT32 l2_axi1_minmax_latency; + gctUINT32 l2_axi1_min_latency; + gctUINT32 l2_axi1_max_latency; + gctUINT32 l2_axi1_total_latency; + gctUINT32 l2_axi1_total_request_count; +} +gcsPROFILER_COUNTERS_PART2; + +typedef struct _gcsPROFILER_COUNTERS +{ + gcsPROFILER_COUNTERS_PART1 counters_part1; + gcsPROFILER_COUNTERS_PART2 counters_part2; +} +gcsPROFILER_COUNTERS; + +#define NumOfPerFrameBuf 16 +#define NumOfPerDrawBuf 128 + +typedef enum _gceCOUNTER_OPTYPE +{ + gcvCOUNTER_OP_DRAW = 0, + gcvCOUNTER_OP_BLT = 1, + gcvCOUNTER_OP_COMPUTE = 2, + gcvCOUNTER_OP_RS = 3, + gcvCOUNTER_OP_FINISH = 4, + gcvCOUNTER_OP_FRAME = 5, + gcvCOUNTER_OP_NONE = 6 +} +gceCOUNTER_OPTYPE; + +typedef struct gcsCounterBuffer * gcsCounterBuffer_PTR; + +struct gcsCounterBuffer +{ + gcsPROFILER_COUNTERS *counters; + gctHANDLE couterBufobj; + gctUINT32 probeAddress; + gctPOINTER logicalAddress; + gceCOUNTER_OPTYPE opType; + gctUINT32 opID; + gctUINT32 startPos; + gctUINT32 endPos; + gctUINT32 dataSize; + gctBOOL available; + gctBOOL needDump; + gcsCounterBuffer_PTR next; + gcsCounterBuffer_PTR prev; +}; + +typedef struct _gcoPROFILER * gcoPROFILER; + +struct _gcoPROFILER +{ + gctBOOL enable; + gctBOOL enablePrint; + gctBOOL disableProbe; + gctBOOL probeMode; + + gctFILE file; + gctCHAR* fileName; + + gcsCounterBuffer_PTR counterBuf; + gctUINT32 bufferCount; + + gctBOOL perDrawMode; + gctBOOL needDump; + gctBOOL counterEnable; + + gceProfilerClient profilerClient; + + /*query some features from hw*/ + gctUINT32 coreCount; + gctUINT32 shaderCoreCount; + gctBOOL bHalti4; + gctBOOL psRenderPixelFix; + gctBOOL axiBus128bits; +}; + +typedef enum _gceProbeStatus +{ + gcvPROBE_Disabled = 0, + gcvPROBE_Paused = 1, + gcvPROBE_Enabled = 2, +} +gceProbeStatus; + +typedef enum _gceProbeCmd +{ + gcvPROBECMD_BEGIN = 0, + gcvPROBECMD_PAUSE = 1, + gcvPROBECMD_RESUME = 2, + gcvPROBECMD_END = 3, +} +gceProbeCmd; + +typedef struct _gcsPROBESTATES +{ + gceProbeStatus status; + gctUINT32 probeAddress; +}gcsPROBESTATES; + +/* Construct a Profiler object per context. */ +gceSTATUS +gcoPROFILER_Construct( + OUT gcoPROFILER * Profiler + ); + +gceSTATUS +gcoPROFILER_Destroy( + IN gcoPROFILER Profiler + ); + +gceSTATUS +gcoPROFILER_Enable( + IN gcoPROFILER Profiler + ); + +gceSTATUS +gcoPROFILER_Disable( + void + ); + +gceSTATUS +gcoPROFILER_Begin( + IN gcoPROFILER Profiler, + IN gceCOUNTER_OPTYPE operationType + ); + +gceSTATUS +gcoPROFILER_End( + IN gcoPROFILER Profiler, + IN gceCOUNTER_OPTYPE operationType, + IN gctUINT32 OpID + ); + +gceSTATUS +gcoPROFILER_Write( + IN gcoPROFILER Profiler, + IN gctSIZE_T ByteCount, + IN gctCONST_POINTER Data + ); + +gceSTATUS +gcoPROFILER_Flush( + IN gcoPROFILER Profiler + ); +#ifdef __cplusplus +} +#endif + +#endif /* __gc_hal_profiler_h_ */ -- cgit v1.2.3