gc_hal_profiler.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. /****************************************************************************
  2. *
  3. * Copyright (c) 2005 - 2014 by Vivante Corp. All rights reserved.
  4. *
  5. * The material in this file is confidential and contains trade secrets
  6. * of Vivante Corporation. This is proprietary information owned by
  7. * Vivante Corporation. No part of this work may be disclosed,
  8. * reproduced, copied, transmitted, or used in any way for any purpose,
  9. * without the express written permission of Vivante Corporation.
  10. *
  11. *****************************************************************************/
  12. #ifndef __gc_hal_profiler_h_
  13. #define __gc_hal_profiler_h_
  14. #if VIVANTE_PROFILER_NEW
  15. #include "gc_hal_engine.h"
  16. #endif
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. #define GLVERTEX_OBJECT 10
  21. #define GLVERTEX_OBJECT_BYTES 11
  22. #define GLINDEX_OBJECT 20
  23. #define GLINDEX_OBJECT_BYTES 21
  24. #define GLTEXTURE_OBJECT 30
  25. #define GLTEXTURE_OBJECT_BYTES 31
  26. #define GLBUFOBJ_OBJECT 40
  27. #define GLBUFOBJ_OBJECT_BYTES 41
  28. #if VIVANTE_PROFILER
  29. #define gcmPROFILE_GC(Enum, Value) gcoPROFILER_Count(gcvNULL, Enum, Value)
  30. #else
  31. #define gcmPROFILE_GC(Enum, Value) do { } while (gcvFALSE)
  32. #endif
  33. #ifndef gcdNEW_PROFILER_FILE
  34. #define gcdNEW_PROFILER_FILE 1
  35. #endif
  36. #define ES11_CALLS 151
  37. #define ES11_DRAWCALLS (ES11_CALLS + 1)
  38. #define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
  39. #define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
  40. #define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
  41. #define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
  42. #define ES30_CALLS 159
  43. #define ES30_DRAWCALLS (ES30_CALLS + 1)
  44. #define ES30_STATECHANGECALLS (ES30_DRAWCALLS + 1)
  45. #define ES30_POINTCOUNT (ES30_STATECHANGECALLS + 1)
  46. #define ES30_LINECOUNT (ES30_POINTCOUNT + 1)
  47. #define ES30_TRIANGLECOUNT (ES30_LINECOUNT + 1)
  48. #define VG11_CALLS 88
  49. #define VG11_DRAWCALLS (VG11_CALLS + 1)
  50. #define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
  51. #define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
  52. #define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
  53. /* End of Driver API ID Definitions. */
  54. /* HAL & MISC IDs. */
  55. #define HAL_VERTBUFNEWBYTEALLOC 1
  56. #define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
  57. #define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
  58. #define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
  59. #define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
  60. #define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
  61. #define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
  62. #define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
  63. #define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
  64. #define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
  65. #define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
  66. #define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
  67. #define GPU_CYCLES 1
  68. #define GPU_READ64BYTE (GPU_CYCLES + 1)
  69. #define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
  70. #define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
  71. #define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
  72. #define VS_INSTCOUNT 1
  73. #define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
  74. #define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
  75. #define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
  76. #define VS_SOURCE (VS_RENDEREDVERTCOUNT + 1)
  77. #define PS_INSTCOUNT 1
  78. #define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
  79. #define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
  80. #define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
  81. #define PS_SOURCE (PS_RENDEREDPIXCOUNT + 1)
  82. #define PA_INVERTCOUNT 1
  83. #define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
  84. #define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
  85. #define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
  86. #define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
  87. #define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
  88. #define SE_TRIANGLECOUNT 1
  89. #define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
  90. #define RA_VALIDPIXCOUNT 1
  91. #define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
  92. #define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
  93. #define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
  94. #define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
  95. #define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
  96. #define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
  97. #define TX_TOTBILINEARREQ 1
  98. #define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
  99. #define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
  100. #define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
  101. #define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
  102. #define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
  103. #define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
  104. #define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
  105. #define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
  106. #define PE_KILLEDBYCOLOR 1
  107. #define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
  108. #define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
  109. #define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
  110. #define MC_READREQ8BPIPE 1
  111. #define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
  112. #define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
  113. #define AXI_READREQSTALLED 1
  114. #define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
  115. #define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
  116. #define PVS_INSTRCOUNT 1
  117. #define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
  118. #define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
  119. #define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
  120. #define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
  121. #define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
  122. #define PVS_SOURCE (PVS_FUNCTIONCOUNT + 1)
  123. #define PPS_INSTRCOUNT 1
  124. #define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
  125. #define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
  126. #define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
  127. #define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
  128. #define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
  129. #define PPS_SOURCE (PPS_FUNCTIONCOUNT + 1)
  130. /* End of MISC Counter IDs. */
  131. #ifdef gcdNEW_PROFILER_FILE
  132. /* Category Constants. */
  133. #define VPHEADER 0x010000
  134. #define VPG_INFO 0x020000
  135. #define VPG_TIME 0x030000
  136. #define VPG_MEM 0x040000
  137. #define VPG_ES11 0x050000
  138. #define VPG_ES30 0x060000
  139. #define VPG_VG11 0x070000
  140. #define VPG_HAL 0x080000
  141. #define VPG_HW 0x090000
  142. #define VPG_GPU 0x0a0000
  143. #define VPG_VS 0x0b0000
  144. #define VPG_PS 0x0c0000
  145. #define VPG_PA 0x0d0000
  146. #define VPG_SETUP 0x0e0000
  147. #define VPG_RA 0x0f0000
  148. #define VPG_TX 0x100000
  149. #define VPG_PE 0x110000
  150. #define VPG_MC 0x120000
  151. #define VPG_AXI 0x130000
  152. #define VPG_PROG 0x140000
  153. #define VPG_PVS 0x150000
  154. #define VPG_PPS 0x160000
  155. #define VPG_ES11_TIME 0x170000
  156. #define VPG_ES30_TIME 0x180000
  157. #define VPG_FRAME 0x190000
  158. #define VPG_ES11_DRAW 0x200000
  159. #define VPG_ES30_DRAW 0x210000
  160. #define VPG_VG11_TIME 0x220000
  161. #define VPG_END 0xff0000
  162. /* Info. */
  163. #define VPC_INFOCOMPANY (VPG_INFO + 1)
  164. #define VPC_INFOVERSION (VPC_INFOCOMPANY + 1)
  165. #define VPC_INFORENDERER (VPC_INFOVERSION + 1)
  166. #define VPC_INFOREVISION (VPC_INFORENDERER + 1)
  167. #define VPC_INFODRIVER (VPC_INFOREVISION + 1)
  168. #define VPC_INFODRIVERMODE (VPC_INFODRIVER + 1)
  169. #define VPC_INFOSCREENSIZE (VPC_INFODRIVERMODE + 1)
  170. /* Counter Constants. */
  171. #define VPC_ELAPSETIME (VPG_TIME + 1)
  172. #define VPC_CPUTIME (VPC_ELAPSETIME + 1)
  173. #define VPC_MEMMAXRES (VPG_MEM + 1)
  174. #define VPC_MEMSHARED (VPC_MEMMAXRES + 1)
  175. #define VPC_MEMUNSHAREDDATA (VPC_MEMSHARED + 1)
  176. #define VPC_MEMUNSHAREDSTACK (VPC_MEMUNSHAREDDATA + 1)
  177. /* OpenGL ES11 Statics Counter IDs. */
  178. #define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
  179. #define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
  180. #define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
  181. #define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
  182. #define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
  183. #define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
  184. /* OpenGL ES30 Statistics Counter IDs. */
  185. #define VPC_ES30CALLS (VPG_ES30 + ES30_CALLS)
  186. #define VPC_ES30DRAWCALLS (VPG_ES30 + ES30_DRAWCALLS)
  187. #define VPC_ES30STATECHANGECALLS (VPG_ES30 + ES30_STATECHANGECALLS)
  188. #define VPC_ES30POINTCOUNT (VPG_ES30 + ES30_POINTCOUNT)
  189. #define VPC_ES30LINECOUNT (VPG_ES30 + ES30_LINECOUNT)
  190. #define VPC_ES30TRIANGLECOUNT (VPG_ES30 + ES30_TRIANGLECOUNT)
  191. /* OpenVG Statistics Counter IDs. */
  192. #define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
  193. #define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
  194. #define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
  195. #define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
  196. #define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
  197. /* HAL Counters. */
  198. #define VPC_HALVERTBUFNEWBYTEALLOC (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC)
  199. #define VPC_HALVERTBUFTOTALBYTEALLOC (VPG_HAL + HAL_VERTBUFTOTALBYTEALLOC)
  200. #define VPC_HALVERTBUFNEWOBJALLOC (VPG_HAL + HAL_VERTBUFNEWOBJALLOC)
  201. #define VPC_HALVERTBUFTOTALOBJALLOC (VPG_HAL + HAL_VERTBUFTOTALOBJALLOC)
  202. #define VPC_HALINDBUFNEWBYTEALLOC (VPG_HAL + HAL_INDBUFNEWBYTEALLOC)
  203. #define VPC_HALINDBUFTOTALBYTEALLOC (VPG_HAL + HAL_INDBUFTOTALBYTEALLOC)
  204. #define VPC_HALINDBUFNEWOBJALLOC (VPG_HAL + HAL_INDBUFNEWOBJALLOC)
  205. #define VPC_HALINDBUFTOTALOBJALLOC (VPG_HAL + HAL_INDBUFTOTALOBJALLOC)
  206. #define VPC_HALTEXBUFNEWBYTEALLOC (VPG_HAL + HAL_TEXBUFNEWBYTEALLOC)
  207. #define VPC_HALTEXBUFTOTALBYTEALLOC (VPG_HAL + HAL_TEXBUFTOTALBYTEALLOC)
  208. #define VPC_HALTEXBUFNEWOBJALLOC (VPG_HAL + HAL_TEXBUFNEWOBJALLOC)
  209. #define VPC_HALTEXBUFTOTALOBJALLOC (VPG_HAL + HAL_TEXBUFTOTALOBJALLOC)
  210. /* HW: GPU Counters. */
  211. #define VPC_GPUCYCLES (VPG_GPU + GPU_CYCLES)
  212. #define VPC_GPUREAD64BYTE (VPG_GPU + GPU_READ64BYTE)
  213. #define VPC_GPUWRITE64BYTE (VPG_GPU + GPU_WRITE64BYTE)
  214. #define VPC_GPUTOTALCYCLES (VPG_GPU + GPU_TOTALCYCLES)
  215. #define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
  216. /* HW: Shader Counters. */
  217. #define VPC_VSINSTCOUNT (VPG_VS + VS_INSTCOUNT)
  218. #define VPC_VSBRANCHINSTCOUNT (VPG_VS + VS_BRANCHINSTCOUNT)
  219. #define VPC_VSTEXLDINSTCOUNT (VPG_VS + VS_TEXLDINSTCOUNT)
  220. #define VPC_VSRENDEREDVERTCOUNT (VPG_VS + VS_RENDEREDVERTCOUNT)
  221. /* HW: PS Count. */
  222. #define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
  223. #define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
  224. #define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
  225. #define VPC_PSRENDEREDPIXCOUNT (VPG_PS + PS_RENDEREDPIXCOUNT)
  226. /* HW: PA Counters. */
  227. #define VPC_PAINVERTCOUNT (VPG_PA + PA_INVERTCOUNT)
  228. #define VPC_PAINPRIMCOUNT (VPG_PA + PA_INPRIMCOUNT)
  229. #define VPC_PAOUTPRIMCOUNT (VPG_PA + PA_OUTPRIMCOUNT)
  230. #define VPC_PADEPTHCLIPCOUNT (VPG_PA + PA_DEPTHCLIPCOUNT)
  231. #define VPC_PATRIVIALREJCOUNT (VPG_PA + PA_TRIVIALREJCOUNT)
  232. #define VPC_PACULLCOUNT (VPG_PA + PA_CULLCOUNT)
  233. /* HW: Setup Counters. */
  234. #define VPC_SETRIANGLECOUNT (VPG_SETUP + SE_TRIANGLECOUNT)
  235. #define VPC_SELINECOUNT (VPG_SETUP + SE_LINECOUNT)
  236. /* HW: RA Counters. */
  237. #define VPC_RAVALIDPIXCOUNT (VPG_RA + RA_VALIDPIXCOUNT)
  238. #define VPC_RATOTALQUADCOUNT (VPG_RA + RA_TOTALQUADCOUNT)
  239. #define VPC_RAVALIDQUADCOUNTEZ (VPG_RA + RA_VALIDQUADCOUNTEZ)
  240. #define VPC_RATOTALPRIMCOUNT (VPG_RA + RA_TOTALPRIMCOUNT)
  241. #define VPC_RAPIPECACHEMISSCOUNT (VPG_RA + RA_PIPECACHEMISSCOUNT)
  242. #define VPC_RAPREFCACHEMISSCOUNT (VPG_RA + RA_PREFCACHEMISSCOUNT)
  243. #define VPC_RAEEZCULLCOUNT (VPG_RA + RA_EEZCULLCOUNT)
  244. /* HW: TEX Counters. */
  245. #define VPC_TXTOTBILINEARREQ (VPG_TX + TX_TOTBILINEARREQ)
  246. #define VPC_TXTOTTRILINEARREQ (VPG_TX + TX_TOTTRILINEARREQ)
  247. #define VPC_TXTOTDISCARDTEXREQ (VPG_TX + TX_TOTDISCARDTEXREQ)
  248. #define VPC_TXTOTTEXREQ (VPG_TX + TX_TOTTEXREQ)
  249. #define VPC_TXMEMREADCOUNT (VPG_TX + TX_MEMREADCOUNT)
  250. #define VPC_TXMEMREADIN8BCOUNT (VPG_TX + TX_MEMREADIN8BCOUNT)
  251. #define VPC_TXCACHEMISSCOUNT (VPG_TX + TX_CACHEMISSCOUNT)
  252. #define VPC_TXCACHEHITTEXELCOUNT (VPG_TX + TX_CACHEHITTEXELCOUNT)
  253. #define VPC_TXCACHEMISSTEXELCOUNT (VPG_TX + TX_CACHEMISSTEXELCOUNT)
  254. /* HW: PE Counters. */
  255. #define VPC_PEKILLEDBYCOLOR (VPG_PE + PE_KILLEDBYCOLOR)
  256. #define VPC_PEKILLEDBYDEPTH (VPG_PE + PE_KILLEDBYDEPTH)
  257. #define VPC_PEDRAWNBYCOLOR (VPG_PE + PE_DRAWNBYCOLOR)
  258. #define VPC_PEDRAWNBYDEPTH (VPG_PE + PE_DRAWNBYDEPTH)
  259. /* HW: MC Counters. */
  260. #define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
  261. #define VPC_MCREADREQ8BIP (VPG_MC + MC_READREQ8BIP)
  262. #define VPC_MCWRITEREQ8BPIPE (VPG_MC + MC_WRITEREQ8BPIPE)
  263. /* HW: AXI Counters. */
  264. #define VPC_AXIREADREQSTALLED (VPG_AXI + AXI_READREQSTALLED)
  265. #define VPC_AXIWRITEREQSTALLED (VPG_AXI + AXI_WRITEREQSTALLED)
  266. #define VPC_AXIWRITEDATASTALLED (VPG_AXI + AXI_WRITEDATASTALLED)
  267. /* PROGRAM: Shader program counters. */
  268. #define VPC_PVSINSTRCOUNT (VPG_PVS + PVS_INSTRCOUNT)
  269. #define VPC_PVSALUINSTRCOUNT (VPG_PVS + PVS_ALUINSTRCOUNT)
  270. #define VPC_PVSTEXINSTRCOUNT (VPG_PVS + PVS_TEXINSTRCOUNT)
  271. #define VPC_PVSATTRIBCOUNT (VPG_PVS + PVS_ATTRIBCOUNT)
  272. #define VPC_PVSUNIFORMCOUNT (VPG_PVS + PVS_UNIFORMCOUNT)
  273. #define VPC_PVSFUNCTIONCOUNT (VPG_PVS + PVS_FUNCTIONCOUNT)
  274. #define VPC_PVSSOURCE (VPG_PVS + PVS_SOURCE)
  275. #define VPC_PPSINSTRCOUNT (VPG_PPS + PPS_INSTRCOUNT)
  276. #define VPC_PPSALUINSTRCOUNT (VPG_PPS + PPS_ALUINSTRCOUNT)
  277. #define VPC_PPSTEXINSTRCOUNT (VPG_PPS + PPS_TEXINSTRCOUNT)
  278. #define VPC_PPSATTRIBCOUNT (VPG_PPS + PPS_ATTRIBCOUNT)
  279. #define VPC_PPSUNIFORMCOUNT (VPG_PPS + PPS_UNIFORMCOUNT)
  280. #define VPC_PPSFUNCTIONCOUNT (VPG_PPS + PPS_FUNCTIONCOUNT)
  281. #define VPC_PPSSOURCE (VPG_PPS + PPS_SOURCE)
  282. #define VPC_PROGRAMHANDLE (VPG_PROG + 1)
  283. #define VPC_ES30_DRAW_NO (VPG_ES30_DRAW + 1)
  284. #define VPC_ES11_DRAW_NO (VPG_ES11_DRAW + 1)
  285. #endif
  286. /* HW profile information. */
  287. typedef struct _gcsPROFILER_COUNTERS
  288. {
  289. /* HW static counters. */
  290. gctUINT32 gpuClock;
  291. gctUINT32 axiClock;
  292. gctUINT32 shaderClock;
  293. /* HW vairable counters. */
  294. gctUINT32 gpuClockStart;
  295. gctUINT32 gpuClockEnd;
  296. /* HW vairable counters. */
  297. gctUINT32 gpuCyclesCounter;
  298. gctUINT32 gpuTotalCyclesCounter;
  299. gctUINT32 gpuIdleCyclesCounter;
  300. gctUINT32 gpuTotalRead64BytesPerFrame;
  301. gctUINT32 gpuTotalWrite64BytesPerFrame;
  302. /* PE */
  303. gctUINT32 pe_pixel_count_killed_by_color_pipe;
  304. gctUINT32 pe_pixel_count_killed_by_depth_pipe;
  305. gctUINT32 pe_pixel_count_drawn_by_color_pipe;
  306. gctUINT32 pe_pixel_count_drawn_by_depth_pipe;
  307. /* SH */
  308. gctUINT32 ps_inst_counter;
  309. gctUINT32 rendered_pixel_counter;
  310. gctUINT32 vs_inst_counter;
  311. gctUINT32 rendered_vertice_counter;
  312. gctUINT32 vtx_branch_inst_counter;
  313. gctUINT32 vtx_texld_inst_counter;
  314. gctUINT32 pxl_branch_inst_counter;
  315. gctUINT32 pxl_texld_inst_counter;
  316. /* PA */
  317. gctUINT32 pa_input_vtx_counter;
  318. gctUINT32 pa_input_prim_counter;
  319. gctUINT32 pa_output_prim_counter;
  320. gctUINT32 pa_depth_clipped_counter;
  321. gctUINT32 pa_trivial_rejected_counter;
  322. gctUINT32 pa_culled_counter;
  323. /* SE */
  324. gctUINT32 se_culled_triangle_count;
  325. gctUINT32 se_culled_lines_count;
  326. /* RA */
  327. gctUINT32 ra_valid_pixel_count;
  328. gctUINT32 ra_total_quad_count;
  329. gctUINT32 ra_valid_quad_count_after_early_z;
  330. gctUINT32 ra_total_primitive_count;
  331. gctUINT32 ra_pipe_cache_miss_counter;
  332. gctUINT32 ra_prefetch_cache_miss_counter;
  333. gctUINT32 ra_eez_culled_counter;
  334. /* TX */
  335. gctUINT32 tx_total_bilinear_requests;
  336. gctUINT32 tx_total_trilinear_requests;
  337. gctUINT32 tx_total_discarded_texture_requests;
  338. gctUINT32 tx_total_texture_requests;
  339. gctUINT32 tx_mem_read_count;
  340. gctUINT32 tx_mem_read_in_8B_count;
  341. gctUINT32 tx_cache_miss_count;
  342. gctUINT32 tx_cache_hit_texel_count;
  343. gctUINT32 tx_cache_miss_texel_count;
  344. /* MC */
  345. gctUINT32 mc_total_read_req_8B_from_pipeline;
  346. gctUINT32 mc_total_read_req_8B_from_IP;
  347. gctUINT32 mc_total_write_req_8B_from_pipeline;
  348. /* HI */
  349. gctUINT32 hi_axi_cycles_read_request_stalled;
  350. gctUINT32 hi_axi_cycles_write_request_stalled;
  351. gctUINT32 hi_axi_cycles_write_data_stalled;
  352. }
  353. gcsPROFILER_COUNTERS;
  354. #if VIVANTE_PROFILER_NEW
  355. #define NumOfDrawBuf 64
  356. #endif
  357. /* HAL profile information. */
  358. typedef struct _gcsPROFILER
  359. {
  360. gctUINT32 enable;
  361. gctBOOL enableHal;
  362. gctBOOL enableHW;
  363. gctBOOL enableSH;
  364. gctBOOL isSyncMode;
  365. gctBOOL disableOutputCounter;
  366. gctBOOL useSocket;
  367. gctINT sockFd;
  368. gctFILE file;
  369. /* Aggregate Information */
  370. /* Clock Info */
  371. gctUINT64 frameStart;
  372. gctUINT64 frameEnd;
  373. /* Current frame information */
  374. gctUINT32 frameNumber;
  375. gctUINT64 frameStartTimeusec;
  376. gctUINT64 frameEndTimeusec;
  377. gctUINT64 frameStartCPUTimeusec;
  378. gctUINT64 frameEndCPUTimeusec;
  379. #if PROFILE_HAL_COUNTERS
  380. gctUINT32 vertexBufferTotalBytesAlloc;
  381. gctUINT32 vertexBufferNewBytesAlloc;
  382. int vertexBufferTotalObjectsAlloc;
  383. int vertexBufferNewObjectsAlloc;
  384. gctUINT32 indexBufferTotalBytesAlloc;
  385. gctUINT32 indexBufferNewBytesAlloc;
  386. int indexBufferTotalObjectsAlloc;
  387. int indexBufferNewObjectsAlloc;
  388. gctUINT32 textureBufferTotalBytesAlloc;
  389. gctUINT32 textureBufferNewBytesAlloc;
  390. int textureBufferTotalObjectsAlloc;
  391. int textureBufferNewObjectsAlloc;
  392. gctUINT32 numCommits;
  393. gctUINT32 drawPointCount;
  394. gctUINT32 drawLineCount;
  395. gctUINT32 drawTriangleCount;
  396. gctUINT32 drawVertexCount;
  397. gctUINT32 redundantStateChangeCalls;
  398. #endif
  399. gctUINT32 prevVSInstCount;
  400. gctUINT32 prevVSBranchInstCount;
  401. gctUINT32 prevVSTexInstCount;
  402. gctUINT32 prevVSVertexCount;
  403. gctUINT32 prevPSInstCount;
  404. gctUINT32 prevPSBranchInstCount;
  405. gctUINT32 prevPSTexInstCount;
  406. gctUINT32 prevPSPixelCount;
  407. #if VIVANTE_PROFILER_NEW
  408. gcoBUFOBJ newCounterBuf[NumOfDrawBuf];
  409. gctUINT32 curBufId;
  410. #endif
  411. }
  412. gcsPROFILER;
  413. /* Memory profile information. */
  414. struct _gcsMemProfile
  415. {
  416. /* Memory Usage */
  417. gctUINT32 videoMemUsed;
  418. gctUINT32 systemMemUsed;
  419. gctUINT32 commitBufferSize;
  420. gctUINT32 contextBufferCopyBytes;
  421. };
  422. /* Shader profile information. */
  423. struct _gcsSHADER_PROFILER
  424. {
  425. gctUINT32 shaderLength;
  426. gctUINT32 shaderALUCycles;
  427. gctUINT32 shaderTexLoadCycles;
  428. gctUINT32 shaderTempRegCount;
  429. gctUINT32 shaderSamplerRegCount;
  430. gctUINT32 shaderInputRegCount;
  431. gctUINT32 shaderOutputRegCount;
  432. };
  433. /* Initialize the gcsProfiler. */
  434. gceSTATUS
  435. gcoPROFILER_Initialize(
  436. IN gcoHAL Hal,
  437. IN gctBOOL Enable
  438. );
  439. /* Destroy the gcProfiler. */
  440. gceSTATUS
  441. gcoPROFILER_Destroy(
  442. IN gcoHAL Hal
  443. );
  444. /* Write data to profiler. */
  445. gceSTATUS
  446. gcoPROFILER_Write(
  447. IN gcoHAL Hal,
  448. IN gctSIZE_T ByteCount,
  449. IN gctCONST_POINTER Data
  450. );
  451. /* Flush data out. */
  452. gceSTATUS
  453. gcoPROFILER_Flush(
  454. IN gcoHAL Hal
  455. );
  456. /* Call to signal end of frame. */
  457. gceSTATUS
  458. gcoPROFILER_EndFrame(
  459. IN gcoHAL Hal
  460. );
  461. /* Call to signal end of draw. */
  462. gceSTATUS
  463. gcoPROFILER_EndDraw(
  464. IN gcoHAL Hal,
  465. IN gctBOOL FirstDraw
  466. );
  467. /* Increase profile counter Enum by Value. */
  468. gceSTATUS
  469. gcoPROFILER_Count(
  470. IN gcoHAL Hal,
  471. IN gctUINT32 Enum,
  472. IN gctINT Value
  473. );
  474. /* Profile input vertex shader. */
  475. gceSTATUS
  476. gcoPROFILER_ShaderVS(
  477. IN gcoHAL Hal,
  478. IN gctPOINTER Vs
  479. );
  480. /* Profile input fragment shader. */
  481. gceSTATUS
  482. gcoPROFILER_ShaderFS(
  483. IN gcoHAL Hal,
  484. IN gctPOINTER Fs
  485. );
  486. #ifdef __cplusplus
  487. }
  488. #endif
  489. #endif /* __gc_hal_profiler_h_ */