gc_hal_profiler.h 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062
  1. /****************************************************************************
  2. *
  3. * Copyright (c) 2005 - 2021 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. #include "shared/gc_hal_profiler_shared.h"
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #define GLVERTEX_OBJECT 10
  19. #define GLVERTEX_OBJECT_BYTES 11
  20. #define GLINDEX_OBJECT 20
  21. #define GLINDEX_OBJECT_BYTES 21
  22. #define GLTEXTURE_OBJECT 30
  23. #define GLTEXTURE_OBJECT_BYTES 31
  24. #define GLBUFOBJ_OBJECT 40
  25. #define GLBUFOBJ_OBJECT_BYTES 41
  26. #define ES11_CALLS 151
  27. #define ES11_DRAWCALLS (ES11_CALLS + 1)
  28. #define ES11_STATECHANGECALLS (ES11_DRAWCALLS + 1)
  29. #define ES11_POINTCOUNT (ES11_STATECHANGECALLS + 1)
  30. #define ES11_LINECOUNT (ES11_POINTCOUNT + 1)
  31. #define ES11_TRIANGLECOUNT (ES11_LINECOUNT + 1)
  32. #define ES30_CALLS 159
  33. #define ES30_DRAWCALLS (ES30_CALLS + 1)
  34. #define ES30_STATECHANGECALLS (ES30_DRAWCALLS + 1)
  35. #define ES30_POINTCOUNT (ES30_STATECHANGECALLS + 1)
  36. #define ES30_LINECOUNT (ES30_POINTCOUNT + 1)
  37. #define ES30_TRIANGLECOUNT (ES30_LINECOUNT + 1)
  38. #define VG11_CALLS 88
  39. #define VG11_DRAWCALLS (VG11_CALLS + 1)
  40. #define VG11_STATECHANGECALLS (VG11_DRAWCALLS + 1)
  41. #define VG11_FILLCOUNT (VG11_STATECHANGECALLS + 1)
  42. #define VG11_STROKECOUNT (VG11_FILLCOUNT + 1)
  43. /* End of Driver API ID Definitions. */
  44. /* HAL & MISC IDs. */
  45. #define HAL_VERTBUFNEWBYTEALLOC 1
  46. #define HAL_VERTBUFTOTALBYTEALLOC (HAL_VERTBUFNEWBYTEALLOC + 1)
  47. #define HAL_VERTBUFNEWOBJALLOC (HAL_VERTBUFTOTALBYTEALLOC + 1)
  48. #define HAL_VERTBUFTOTALOBJALLOC (HAL_VERTBUFNEWOBJALLOC + 1)
  49. #define HAL_INDBUFNEWBYTEALLOC (HAL_VERTBUFTOTALOBJALLOC + 1)
  50. #define HAL_INDBUFTOTALBYTEALLOC (HAL_INDBUFNEWBYTEALLOC + 1)
  51. #define HAL_INDBUFNEWOBJALLOC (HAL_INDBUFTOTALBYTEALLOC + 1)
  52. #define HAL_INDBUFTOTALOBJALLOC (HAL_INDBUFNEWOBJALLOC + 1)
  53. #define HAL_TEXBUFNEWBYTEALLOC (HAL_INDBUFTOTALOBJALLOC + 1)
  54. #define HAL_TEXBUFTOTALBYTEALLOC (HAL_TEXBUFNEWBYTEALLOC + 1)
  55. #define HAL_TEXBUFNEWOBJALLOC (HAL_TEXBUFTOTALBYTEALLOC + 1)
  56. #define HAL_TEXBUFTOTALOBJALLOC (HAL_TEXBUFNEWOBJALLOC + 1)
  57. #define GPU_CYCLES 1
  58. #define GPU_READ64BYTE (GPU_CYCLES + 1)
  59. #define GPU_WRITE64BYTE (GPU_READ64BYTE + 1)
  60. #define GPU_TOTALCYCLES (GPU_WRITE64BYTE + 1)
  61. #define GPU_IDLECYCLES (GPU_TOTALCYCLES + 1)
  62. #define VS_INSTCOUNT 1
  63. #define VS_BRANCHINSTCOUNT (VS_INSTCOUNT + 1)
  64. #define VS_TEXLDINSTCOUNT (VS_BRANCHINSTCOUNT + 1)
  65. #define VS_RENDEREDVERTCOUNT (VS_TEXLDINSTCOUNT + 1)
  66. #define VS_SOURCE (VS_RENDEREDVERTCOUNT + 1)
  67. #define VS_NONIDLESTARVECOUNT (VS_SOURCE + 1)
  68. #define VS_STARVELCOUNT (VS_NONIDLESTARVECOUNT + 1)
  69. #define VS_STALLCOUNT (VS_STARVELCOUNT + 1)
  70. #define VS_PROCESSCOUNT (VS_STALLCOUNT + 1)
  71. #define PS_INSTCOUNT 1
  72. #define PS_BRANCHINSTCOUNT (PS_INSTCOUNT + 1)
  73. #define PS_TEXLDINSTCOUNT (PS_BRANCHINSTCOUNT + 1)
  74. #define PS_RENDEREDPIXCOUNT (PS_TEXLDINSTCOUNT + 1)
  75. #define PS_SOURCE (PS_RENDEREDPIXCOUNT + 1)
  76. #define PS_NONIDLESTARVECOUNT (PS_SOURCE + 1)
  77. #define PS_STARVELCOUNT (PS_NONIDLESTARVECOUNT + 1)
  78. #define PS_STALLCOUNT (PS_STARVELCOUNT + 1)
  79. #define PS_PROCESSCOUNT (PS_STALLCOUNT + 1)
  80. #define PS_SHADERCYCLECOUNT (PS_PROCESSCOUNT + 1)
  81. #define PA_INVERTCOUNT 1
  82. #define PA_INPRIMCOUNT (PA_INVERTCOUNT + 1)
  83. #define PA_OUTPRIMCOUNT (PA_INPRIMCOUNT + 1)
  84. #define PA_DEPTHCLIPCOUNT (PA_OUTPRIMCOUNT + 1)
  85. #define PA_TRIVIALREJCOUNT (PA_DEPTHCLIPCOUNT + 1)
  86. #define PA_CULLCOUNT (PA_TRIVIALREJCOUNT + 1)
  87. #define PA_NONIDLESTARVECOUNT (PA_CULLCOUNT + 1)
  88. #define PA_STARVELCOUNT (PA_NONIDLESTARVECOUNT + 1)
  89. #define PA_STALLCOUNT (PA_STARVELCOUNT + 1)
  90. #define PA_PROCESSCOUNT (PA_STALLCOUNT + 1)
  91. #define SE_TRIANGLECOUNT 1
  92. #define SE_LINECOUNT (SE_TRIANGLECOUNT + 1)
  93. #define SE_STARVECOUNT (SE_LINECOUNT + 1)
  94. #define SE_STALLCOUNT (SE_STARVECOUNT + 1)
  95. #define SE_RECEIVETRIANGLECOUNT (SE_STALLCOUNT + 1)
  96. #define SE_SENDTRIANGLECOUNT (SE_RECEIVETRIANGLECOUNT + 1)
  97. #define SE_RECEIVELINESCOUNT (SE_SENDTRIANGLECOUNT + 1)
  98. #define SE_SENDLINESCOUNT (SE_RECEIVELINESCOUNT + 1)
  99. #define SE_NONIDLESTARVECOUNT (SE_SENDLINESCOUNT + 1)
  100. #define SE_PROCESSCOUNT (SE_NONIDLESTARVECOUNT + 1)
  101. #define RA_VALIDPIXCOUNT 1
  102. #define RA_TOTALQUADCOUNT (RA_VALIDPIXCOUNT + 1)
  103. #define RA_VALIDQUADCOUNTEZ (RA_TOTALQUADCOUNT + 1)
  104. #define RA_TOTALPRIMCOUNT (RA_VALIDQUADCOUNTEZ + 1)
  105. #define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT + 1)
  106. #define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
  107. #define RA_EEZCULLCOUNT (RA_PREFCACHEMISSCOUNT + 1)
  108. #define RA_NONIDLESTARVECOUNT (RA_EEZCULLCOUNT + 1)
  109. #define RA_STARVELCOUNT (RA_NONIDLESTARVECOUNT + 1)
  110. #define RA_STALLCOUNT (RA_STARVELCOUNT + 1)
  111. #define RA_PROCESSCOUNT (RA_STALLCOUNT + 1)
  112. #define TX_TOTBILINEARREQ 1
  113. #define TX_TOTTRILINEARREQ (TX_TOTBILINEARREQ + 1)
  114. #define TX_TOTDISCARDTEXREQ (TX_TOTTRILINEARREQ + 1)
  115. #define TX_TOTTEXREQ (TX_TOTDISCARDTEXREQ + 1)
  116. #define TX_MEMREADCOUNT (TX_TOTTEXREQ + 1)
  117. #define TX_MEMREADIN8BCOUNT (TX_MEMREADCOUNT + 1)
  118. #define TX_CACHEMISSCOUNT (TX_MEMREADIN8BCOUNT + 1)
  119. #define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT + 1)
  120. #define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
  121. #define TX_NONIDLESTARVECOUNT (TX_CACHEMISSTEXELCOUNT+ 1)
  122. #define TX_STARVELCOUNT (TX_NONIDLESTARVECOUNT + 1)
  123. #define TX_STALLCOUNT (TX_STARVELCOUNT + 1)
  124. #define TX_PROCESSCOUNT (TX_STALLCOUNT + 1)
  125. #define PE_KILLEDBYCOLOR 1
  126. #define PE_KILLEDBYDEPTH (PE_KILLEDBYCOLOR + 1)
  127. #define PE_DRAWNBYCOLOR (PE_KILLEDBYDEPTH + 1)
  128. #define PE_DRAWNBYDEPTH (PE_DRAWNBYCOLOR + 1)
  129. #define MC_READREQ8BPIPE 1
  130. #define MC_READREQ8BIP (MC_READREQ8BPIPE + 1)
  131. #define MC_WRITEREQ8BPIPE (MC_READREQ8BIP + 1)
  132. #define MC_AXIMINLATENCY (MC_WRITEREQ8BPIPE + 1)
  133. #define MC_AXIMAXLATENCY (MC_AXIMINLATENCY + 1)
  134. #define MC_AXITOTALLATENCY (MC_AXIMAXLATENCY + 1)
  135. #define MC_AXISAMPLECOUNT (MC_AXITOTALLATENCY + 1)
  136. #define AXI_READREQSTALLED 1
  137. #define AXI_WRITEREQSTALLED (AXI_READREQSTALLED + 1)
  138. #define AXI_WRITEDATASTALLED (AXI_WRITEREQSTALLED + 1)
  139. #define FE_DRAWCOUNT 1
  140. #define FE_OUTVERTEXCOUNT (FE_DRAWCOUNT + 1)
  141. #define FE_STALLCOUNT (FE_OUTVERTEXCOUNT + 1)
  142. #define FE_STARVECOUNT (FE_STALLCOUNT + 1)
  143. #define PVS_INSTRCOUNT 1
  144. #define PVS_ALUINSTRCOUNT (PVS_INSTRCOUNT + 1)
  145. #define PVS_TEXINSTRCOUNT (PVS_ALUINSTRCOUNT + 1)
  146. #define PVS_ATTRIBCOUNT (PVS_TEXINSTRCOUNT + 1)
  147. #define PVS_UNIFORMCOUNT (PVS_ATTRIBCOUNT + 1)
  148. #define PVS_FUNCTIONCOUNT (PVS_UNIFORMCOUNT + 1)
  149. #define PVS_SOURCE (PVS_FUNCTIONCOUNT + 1)
  150. #define PPS_INSTRCOUNT 1
  151. #define PPS_ALUINSTRCOUNT (PPS_INSTRCOUNT + 1)
  152. #define PPS_TEXINSTRCOUNT (PPS_ALUINSTRCOUNT + 1)
  153. #define PPS_ATTRIBCOUNT (PPS_TEXINSTRCOUNT + 1)
  154. #define PPS_UNIFORMCOUNT (PPS_ATTRIBCOUNT + 1)
  155. #define PPS_FUNCTIONCOUNT (PPS_UNIFORMCOUNT + 1)
  156. #define PPS_SOURCE (PPS_FUNCTIONCOUNT + 1)
  157. /* End of MISC Counter IDs. */
  158. /* Category Constants. */
  159. #define VPHEADER 0x010000
  160. #define VPG_INFO 0x020000
  161. #define VPG_TIME 0x030000
  162. #define VPG_MEM 0x040000
  163. #define VPG_ES11 0x050000
  164. #define VPG_ES30 0x060000
  165. #define VPG_VG11 0x070000
  166. #define VPG_HAL 0x080000
  167. #define VPG_HW 0x090000
  168. #define VPG_GPU 0x0a0000
  169. #define VPG_VS 0x0b0000
  170. #define VPG_PS 0x0c0000
  171. #define VPG_PA 0x0d0000
  172. #define VPG_SETUP 0x0e0000
  173. #define VPG_RA 0x0f0000
  174. #define VPG_TX 0x100000
  175. #define VPG_PE 0x110000
  176. #define VPG_MC 0x120000
  177. #define VPG_AXI 0x130000
  178. #define VPG_PROG 0x140000
  179. #define VPG_PVS 0x150000
  180. #define VPG_PPS 0x160000
  181. #define VPG_ES11_TIME 0x170000
  182. #define VPG_ES30_TIME 0x180000
  183. #define VPG_FRAME 0x190000
  184. #define VPG_ES11_DRAW 0x200000
  185. #define VPG_ES30_DRAW 0x210000
  186. #define VPG_VG11_TIME 0x220000
  187. #define VPG_FE 0x230000
  188. #define VPG_MULTI_GPU 0x240000
  189. #define VPNG_FE 0x250000
  190. #define VPNG_VS 0x260000
  191. #define VPNG_PS 0x270000
  192. #define VPNG_PA 0x280000
  193. #define VPNG_SETUP 0x290000
  194. #define VPNG_RA 0x2a0000
  195. #define VPNG_TX 0x2b0000
  196. #define VPNG_PE 0x2c0000
  197. #define VPNG_MCC 0x2d0000
  198. #define VPNG_MCZ 0x2e0000
  199. #define VPNG_HI 0x2f0000
  200. #define VPNG_L2 0x300000
  201. #define VPNG_NN 0x310000
  202. #define VPNG_TP 0x320000
  203. #define VPG_FINISH 0x330000
  204. #define VPG_END 0xff0000
  205. /* Info. */
  206. #define VPC_INFOCOMPANY (VPG_INFO + 1)
  207. #define VPC_INFOVERSION (VPC_INFOCOMPANY + 1)
  208. #define VPC_INFORENDERER (VPC_INFOVERSION + 1)
  209. #define VPC_INFOREVISION (VPC_INFORENDERER + 1)
  210. #define VPC_INFODRIVER (VPC_INFOREVISION + 1)
  211. #define VPC_INFODRIVERMODE (VPC_INFODRIVER + 1)
  212. #define VPC_INFOSCREENSIZE (VPC_INFODRIVERMODE + 1)
  213. /* Counter Constants. */
  214. #define VPC_ELAPSETIME (VPG_TIME + 1)
  215. #define VPC_CPUTIME (VPC_ELAPSETIME + 1)
  216. #define VPC_MEMMAXRES (VPG_MEM + 1)
  217. #define VPC_MEMSHARED (VPC_MEMMAXRES + 1)
  218. #define VPC_MEMUNSHAREDDATA (VPC_MEMSHARED + 1)
  219. #define VPC_MEMUNSHAREDSTACK (VPC_MEMUNSHAREDDATA + 1)
  220. /* OpenGL ES11 Statics Counter IDs. */
  221. #define VPC_ES11CALLS (VPG_ES11 + ES11_CALLS)
  222. #define VPC_ES11DRAWCALLS (VPG_ES11 + ES11_DRAWCALLS)
  223. #define VPC_ES11STATECHANGECALLS (VPG_ES11 + ES11_STATECHANGECALLS)
  224. #define VPC_ES11POINTCOUNT (VPG_ES11 + ES11_POINTCOUNT)
  225. #define VPC_ES11LINECOUNT (VPG_ES11 + ES11_LINECOUNT)
  226. #define VPC_ES11TRIANGLECOUNT (VPG_ES11 + ES11_TRIANGLECOUNT)
  227. /* OpenGL ES30 Statistics Counter IDs. */
  228. #define VPC_ES30CALLS (VPG_ES30 + ES30_CALLS)
  229. #define VPC_ES30DRAWCALLS (VPG_ES30 + ES30_DRAWCALLS)
  230. #define VPC_ES30STATECHANGECALLS (VPG_ES30 + ES30_STATECHANGECALLS)
  231. #define VPC_ES30POINTCOUNT (VPG_ES30 + ES30_POINTCOUNT)
  232. #define VPC_ES30LINECOUNT (VPG_ES30 + ES30_LINECOUNT)
  233. #define VPC_ES30TRIANGLECOUNT (VPG_ES30 + ES30_TRIANGLECOUNT)
  234. /* OpenVG Statistics Counter IDs. */
  235. #define VPC_VG11CALLS (VPG_VG11 + VG11_CALLS)
  236. #define VPC_VG11DRAWCALLS (VPG_VG11 + VG11_DRAWCALLS)
  237. #define VPC_VG11STATECHANGECALLS (VPG_VG11 + VG11_STATECHANGECALLS)
  238. #define VPC_VG11FILLCOUNT (VPG_VG11 + VG11_FILLCOUNT)
  239. #define VPC_VG11STROKECOUNT (VPG_VG11 + VG11_STROKECOUNT)
  240. /* HAL Counters. */
  241. #define VPC_HALVERTBUFNEWBYTEALLOC (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC)
  242. #define VPC_HALVERTBUFTOTALBYTEALLOC (VPG_HAL + HAL_VERTBUFTOTALBYTEALLOC)
  243. #define VPC_HALVERTBUFNEWOBJALLOC (VPG_HAL + HAL_VERTBUFNEWOBJALLOC)
  244. #define VPC_HALVERTBUFTOTALOBJALLOC (VPG_HAL + HAL_VERTBUFTOTALOBJALLOC)
  245. #define VPC_HALINDBUFNEWBYTEALLOC (VPG_HAL + HAL_INDBUFNEWBYTEALLOC)
  246. #define VPC_HALINDBUFTOTALBYTEALLOC (VPG_HAL + HAL_INDBUFTOTALBYTEALLOC)
  247. #define VPC_HALINDBUFNEWOBJALLOC (VPG_HAL + HAL_INDBUFNEWOBJALLOC)
  248. #define VPC_HALINDBUFTOTALOBJALLOC (VPG_HAL + HAL_INDBUFTOTALOBJALLOC)
  249. #define VPC_HALTEXBUFNEWBYTEALLOC (VPG_HAL + HAL_TEXBUFNEWBYTEALLOC)
  250. #define VPC_HALTEXBUFTOTALBYTEALLOC (VPG_HAL + HAL_TEXBUFTOTALBYTEALLOC)
  251. #define VPC_HALTEXBUFNEWOBJALLOC (VPG_HAL + HAL_TEXBUFNEWOBJALLOC)
  252. #define VPC_HALTEXBUFTOTALOBJALLOC (VPG_HAL + HAL_TEXBUFTOTALOBJALLOC)
  253. /* HW: GPU Counters. */
  254. #define VPC_GPUCYCLES (VPG_GPU + GPU_CYCLES)
  255. #define VPC_GPUREAD64BYTE (VPG_GPU + GPU_READ64BYTE)
  256. #define VPC_GPUWRITE64BYTE (VPG_GPU + GPU_WRITE64BYTE)
  257. #define VPC_GPUTOTALCYCLES (VPG_GPU + GPU_TOTALCYCLES)
  258. #define VPC_GPUIDLECYCLES (VPG_GPU + GPU_IDLECYCLES)
  259. /* HW: Shader Counters. */
  260. #define VPC_VSINSTCOUNT (VPG_VS + VS_INSTCOUNT)
  261. #define VPC_VSBRANCHINSTCOUNT (VPG_VS + VS_BRANCHINSTCOUNT)
  262. #define VPC_VSTEXLDINSTCOUNT (VPG_VS + VS_TEXLDINSTCOUNT)
  263. #define VPC_VSRENDEREDVERTCOUNT (VPG_VS + VS_RENDEREDVERTCOUNT)
  264. #define VPC_VSNONIDLESTARVECOUNT (VPG_VS + VS_NONIDLESTARVECOUNT)
  265. #define VPC_VSSTARVELCOUNT (VPG_VS + VS_STARVELCOUNT)
  266. #define VPC_VSSTALLCOUNT (VPG_VS + VS_STALLCOUNT)
  267. #define VPC_VSPROCESSCOUNT (VPG_VS + VS_PROCESSCOUNT)
  268. /* HW: PS Count. */
  269. #define VPC_PSINSTCOUNT (VPG_PS + PS_INSTCOUNT)
  270. #define VPC_PSBRANCHINSTCOUNT (VPG_PS + PS_BRANCHINSTCOUNT)
  271. #define VPC_PSTEXLDINSTCOUNT (VPG_PS + PS_TEXLDINSTCOUNT)
  272. #define VPC_PSRENDEREDPIXCOUNT (VPG_PS + PS_RENDEREDPIXCOUNT)
  273. #define VPC_PSNONIDLESTARVECOUNT (VPG_PS + PS_NONIDLESTARVECOUNT)
  274. #define VPC_PSSTARVELCOUNT (VPG_PS + PS_STARVELCOUNT)
  275. #define VPC_PSSTALLCOUNT (VPG_PS + PS_STALLCOUNT)
  276. #define VPC_PSPROCESSCOUNT (VPG_PS + PS_PROCESSCOUNT)
  277. #define VPC_PSSHADERCYCLECOUNT (VPG_PS + PS_SHADERCYCLECOUNT)
  278. /* HW: PA Counters. */
  279. #define VPC_PAINVERTCOUNT (VPG_PA + PA_INVERTCOUNT)
  280. #define VPC_PAINPRIMCOUNT (VPG_PA + PA_INPRIMCOUNT)
  281. #define VPC_PAOUTPRIMCOUNT (VPG_PA + PA_OUTPRIMCOUNT)
  282. #define VPC_PADEPTHCLIPCOUNT (VPG_PA + PA_DEPTHCLIPCOUNT)
  283. #define VPC_PATRIVIALREJCOUNT (VPG_PA + PA_TRIVIALREJCOUNT)
  284. #define VPC_PACULLCOUNT (VPG_PA + PA_CULLCOUNT)
  285. #define VPC_PANONIDLESTARVECOUNT (VPG_PA + PA_NONIDLESTARVECOUNT)
  286. #define VPC_PASTARVELCOUNT (VPG_PA + PA_STARVELCOUNT)
  287. #define VPC_PASTALLCOUNT (VPG_PA + PA_STALLCOUNT)
  288. #define VPC_PAPROCESSCOUNT (VPG_PA + PA_PROCESSCOUNT)
  289. /* HW: Setup Counters. */
  290. #define VPC_SETRIANGLECOUNT (VPG_SETUP + SE_TRIANGLECOUNT)
  291. #define VPC_SELINECOUNT (VPG_SETUP + SE_LINECOUNT)
  292. #define VPC_SESTARVECOUNT (VPG_SETUP + SE_STARVECOUNT)
  293. #define VPC_SESTALLCOUNT (VPG_SETUP + SE_STALLCOUNT)
  294. #define VPC_SERECEIVETRIANGLECOUNT (VPG_SETUP + SE_RECEIVETRIANGLECOUNT)
  295. #define VPC_SESENDTRIANGLECOUNT (VPG_SETUP + SE_SENDTRIANGLECOUNT)
  296. #define VPC_SERECEIVELINESCOUNT (VPG_SETUP + SE_RECEIVELINESCOUNT)
  297. #define VPC_SESENDLINESCOUNT (VPG_SETUP + SE_SENDLINESCOUNT)
  298. #define VPC_SENONIDLESTARVECOUNT (VPG_SETUP + SE_NONIDLESTARVECOUNT)
  299. #define VPC_SEPROCESSCOUNT (VPG_SETUP + SE_PROCESSCOUNT)
  300. /* HW: RA Counters. */
  301. #define VPC_RAVALIDPIXCOUNT (VPG_RA + RA_VALIDPIXCOUNT)
  302. #define VPC_RATOTALQUADCOUNT (VPG_RA + RA_TOTALQUADCOUNT)
  303. #define VPC_RAVALIDQUADCOUNTEZ (VPG_RA + RA_VALIDQUADCOUNTEZ)
  304. #define VPC_RATOTALPRIMCOUNT (VPG_RA + RA_TOTALPRIMCOUNT)
  305. #define VPC_RAPIPECACHEMISSCOUNT (VPG_RA + RA_PIPECACHEMISSCOUNT)
  306. #define VPC_RAPREFCACHEMISSCOUNT (VPG_RA + RA_PREFCACHEMISSCOUNT)
  307. #define VPC_RAEEZCULLCOUNT (VPG_RA + RA_EEZCULLCOUNT)
  308. #define VPC_RANONIDLESTARVECOUNT (VPG_RA + RA_NONIDLESTARVECOUNT)
  309. #define VPC_RASTARVELCOUNT (VPG_RA + RA_STARVELCOUNT)
  310. #define VPC_RASTALLCOUNT (VPG_RA + RA_STALLCOUNT)
  311. #define VPC_RAPROCESSCOUNT (VPG_RA + RA_PROCESSCOUNT)
  312. /* HW: TEX Counters. */
  313. #define VPC_TXTOTBILINEARREQ (VPG_TX + TX_TOTBILINEARREQ)
  314. #define VPC_TXTOTTRILINEARREQ (VPG_TX + TX_TOTTRILINEARREQ)
  315. #define VPC_TXTOTDISCARDTEXREQ (VPG_TX + TX_TOTDISCARDTEXREQ)
  316. #define VPC_TXTOTTEXREQ (VPG_TX + TX_TOTTEXREQ)
  317. #define VPC_TXMEMREADCOUNT (VPG_TX + TX_MEMREADCOUNT)
  318. #define VPC_TXMEMREADIN8BCOUNT (VPG_TX + TX_MEMREADIN8BCOUNT)
  319. #define VPC_TXCACHEMISSCOUNT (VPG_TX + TX_CACHEMISSCOUNT)
  320. #define VPC_TXCACHEHITTEXELCOUNT (VPG_TX + TX_CACHEHITTEXELCOUNT)
  321. #define VPC_TXCACHEMISSTEXELCOUNT (VPG_TX + TX_CACHEMISSTEXELCOUNT)
  322. #define VPC_TXNONIDLESTARVECOUNT (VPG_TX + TX_NONIDLESTARVECOUNT)
  323. #define VPC_TXSTARVELCOUNT (VPG_TX + TX_STARVELCOUNT)
  324. #define VPC_TXSTALLCOUNT (VPG_TX + TX_STALLCOUNT)
  325. #define VPC_TXPROCESSCOUNT (VPG_TX + TX_PROCESSCOUNT)
  326. /* HW: PE Counters. */
  327. #define VPC_PEKILLEDBYCOLOR (VPG_PE + PE_KILLEDBYCOLOR)
  328. #define VPC_PEKILLEDBYDEPTH (VPG_PE + PE_KILLEDBYDEPTH)
  329. #define VPC_PEDRAWNBYCOLOR (VPG_PE + PE_DRAWNBYCOLOR)
  330. #define VPC_PEDRAWNBYDEPTH (VPG_PE + PE_DRAWNBYDEPTH)
  331. /* HW: MC Counters. */
  332. #define VPC_MCREADREQ8BPIPE (VPG_MC + MC_READREQ8BPIPE)
  333. #define VPC_MCREADREQ8BIP (VPG_MC + MC_READREQ8BIP)
  334. #define VPC_MCWRITEREQ8BPIPE (VPG_MC + MC_WRITEREQ8BPIPE)
  335. #define VPC_MCAXIMINLATENCY (VPG_MC + MC_AXIMINLATENCY)
  336. #define VPC_MCAXIMAXLATENCY (VPG_MC + MC_AXIMAXLATENCY)
  337. #define VPC_MCAXITOTALLATENCY (VPG_MC + MC_AXITOTALLATENCY)
  338. #define VPC_MCAXISAMPLECOUNT (VPG_MC + MC_AXISAMPLECOUNT)
  339. /* HW: AXI Counters. */
  340. #define VPC_AXIREADREQSTALLED (VPG_AXI + AXI_READREQSTALLED)
  341. #define VPC_AXIWRITEREQSTALLED (VPG_AXI + AXI_WRITEREQSTALLED)
  342. #define VPC_AXIWRITEDATASTALLED (VPG_AXI + AXI_WRITEDATASTALLED)
  343. /* HW: FE Counters. */
  344. #define VPC_FEDRAWCOUNT (VPG_FE + FE_DRAWCOUNT)
  345. #define VPC_FEOUTVERTEXCOUNT (VPG_FE + FE_OUTVERTEXCOUNT)
  346. #define VPC_FESTALLCOUNT (VPG_FE + FE_STALLCOUNT)
  347. #define VPC_FESTARVECOUNT (VPG_FE + FE_STARVECOUNT)
  348. /* HW: Shader Counters. */
  349. #define VPNC_VSINSTCOUNT (VPNG_VS + 1)
  350. #define VPNC_VSBRANCHINSTCOUNT (VPNG_VS + 2)
  351. #define VPNC_VSTEXLDINSTCOUNT (VPNG_VS + 3)
  352. #define VPNC_VSRENDEREDVERTCOUNT (VPNG_VS + 4)
  353. #define VPNC_VSNONIDLESTARVECOUNT (VPNG_VS + 5)
  354. #define VPNC_VSSTARVELCOUNT (VPNG_VS + 6)
  355. #define VPNC_VSSTALLCOUNT (VPNG_VS + 7)
  356. #define VPNC_VSPROCESSCOUNT (VPNG_VS + 8)
  357. #define VPNC_VSSHADERCYCLECOUNT (VPNG_VS + 9)
  358. #define VPNC_VS_COUNT VPNC_VSSHADERCYCLECOUNT - VPNG_VS
  359. /* HW: PS Count. */
  360. #define VPNC_PSINSTCOUNT (VPNG_PS + 1)
  361. #define VPNC_PSBRANCHINSTCOUNT (VPNG_PS + 2)
  362. #define VPNC_PSTEXLDINSTCOUNT (VPNG_PS + 3)
  363. #define VPNC_PSRENDEREDPIXCOUNT (VPNG_PS + 4)
  364. #define VPNC_PSNONIDLESTARVECOUNT (VPNG_PS + 5)
  365. #define VPNC_PSSTARVELCOUNT (VPNG_PS + 6)
  366. #define VPNC_PSSTALLCOUNT (VPNG_PS + 7)
  367. #define VPNC_PSPROCESSCOUNT (VPNG_PS + 8)
  368. #define VPNC_PSSHADERCYCLECOUNT (VPNG_PS + 9)
  369. #define VPNC_PS_COUNT VPNC_PSSHADERCYCLECOUNT - VPNG_PS
  370. /* HW: PA Counters. */
  371. #define VPNC_PAINVERTCOUNT (VPNG_PA + 1)
  372. #define VPNC_PAINPRIMCOUNT (VPNG_PA + 2)
  373. #define VPNC_PAOUTPRIMCOUNT (VPNG_PA + 3)
  374. #define VPNC_PADEPTHCLIPCOUNT (VPNG_PA + 4)
  375. #define VPNC_PATRIVIALREJCOUNT (VPNG_PA + 5)
  376. #define VPNC_PACULLPRIMCOUNT (VPNG_PA + 6)
  377. #define VPNC_PADROPPRIMCOUNT (VPNG_PA + 7)
  378. #define VPNC_PAFRCLIPPRIMCOUNT (VPNG_PA + 8)
  379. #define VPNC_PAFRCLIPDROPPRIMCOUNT (VPNG_PA + 9)
  380. #define VPNC_PANONIDLESTARVECOUNT (VPNG_PA + 10)
  381. #define VPNC_PASTARVELCOUNT (VPNG_PA + 11)
  382. #define VPNC_PASTALLCOUNT (VPNG_PA + 12)
  383. #define VPNC_PAPROCESSCOUNT (VPNG_PA + 13)
  384. #define VPNC_PA_COUNT VPNC_PAPROCESSCOUNT - VPNG_PA
  385. /* HW: Setup Counters. */
  386. #define VPNC_SECULLTRIANGLECOUNT (VPNG_SETUP + 1)
  387. #define VPNC_SECULLLINECOUNT (VPNG_SETUP + 2)
  388. #define VPNC_SECLIPTRIANGLECOUNT (VPNG_SETUP + 3)
  389. #define VPNC_SECLIPLINECOUNT (VPNG_SETUP + 4)
  390. #define VPNC_SESTARVECOUNT (VPNG_SETUP + 5)
  391. #define VPNC_SESTALLCOUNT (VPNG_SETUP + 6)
  392. #define VPNC_SERECEIVETRIANGLECOUNT (VPNG_SETUP + 7)
  393. #define VPNC_SESENDTRIANGLECOUNT (VPNG_SETUP + 8)
  394. #define VPNC_SERECEIVELINESCOUNT (VPNG_SETUP + 9)
  395. #define VPNC_SESENDLINESCOUNT (VPNG_SETUP + 10)
  396. #define VPNC_SENONIDLESTARVECOUNT (VPNG_SETUP + 11)
  397. #define VPNC_SETRIVIALREJLINECOUNT (VPNG_SETUP + 12)
  398. #define VPNC_SEPROCESSCOUNT (VPNG_SETUP + 13)
  399. #define VPNC_SE_COUNT VPNC_SEPROCESSCOUNT - VPNG_SETUP
  400. /* HW: RA Counters. */
  401. #define VPNC_RAVALIDPIXCOUNT (VPNG_RA + 1)
  402. #define VPNC_RATOTALQUADCOUNT (VPNG_RA + 2)
  403. #define VPNC_RAVALIDQUADCOUNTEZ (VPNG_RA + 3)
  404. #define VPNC_RAINPUTPRIMCOUNT (VPNG_RA + 4)
  405. #define VPNC_RAPIPECACHEMISSCOUNT (VPNG_RA + 5)
  406. #define VPNC_RAPREFCACHEMISSCOUNT (VPNG_RA + 6)
  407. #define VPNC_RAPIPEHZCACHEMISSCOUNT (VPNG_RA + 7)
  408. #define VPNC_RAPREFHZCACHEMISSCOUNT (VPNG_RA + 8)
  409. #define VPNC_RAOUTPUTQUADCOUNT (VPNG_RA + 9)
  410. #define VPNC_RAOUTPUTPIXELCOUNT (VPNG_RA + 10)
  411. #define VPNC_RAEEZCULLCOUNT (VPNG_RA + 11)
  412. #define VPNC_RANONIDLESTARVECOUNT (VPNG_RA + 12)
  413. #define VPNC_RASTARVELCOUNT (VPNG_RA + 13)
  414. #define VPNC_RASTALLCOUNT (VPNG_RA + 14)
  415. #define VPNC_RAPROCESSCOUNT (VPNG_RA + 15)
  416. #define VPNC_RA_COUNT VPNC_RAPROCESSCOUNT - VPNG_RA
  417. /* HW: TEX Counters. */
  418. #define VPNC_TXTOTBILINEARREQ (VPNG_TX + 1)
  419. #define VPNC_TXTOTTRILINEARREQ (VPNG_TX + 2)
  420. #define VPNC_TXTOTDISCARDTEXREQ (VPNG_TX + 3)
  421. #define VPNC_TXTOTTEXREQ (VPNG_TX + 4)
  422. #define VPNC_TXMC0MISSCOUNT (VPNG_TX + 5)
  423. #define VPNC_TXMC0REQCOUNT (VPNG_TX + 6)
  424. #define VPNC_TXMC1MISSCOUNT (VPNG_TX + 7)
  425. #define VPNC_TXMC1REQCOUNT (VPNG_TX + 8)
  426. #define VPNC_TX_COUNT VPNC_TXMC1REQCOUNT - VPNG_TX
  427. /* HW: PE Counters. */
  428. #define VPNC_PE0KILLEDBYCOLOR (VPNG_PE + 1)
  429. #define VPNC_PE0KILLEDBYDEPTH (VPNG_PE + 2)
  430. #define VPNC_PE0DRAWNBYCOLOR (VPNG_PE + 3)
  431. #define VPNC_PE0DRAWNBYDEPTH (VPNG_PE + 4)
  432. #define VPNC_PE1KILLEDBYCOLOR (VPNG_PE + 5)
  433. #define VPNC_PE1KILLEDBYDEPTH (VPNG_PE + 6)
  434. #define VPNC_PE1DRAWNBYCOLOR (VPNG_PE + 7)
  435. #define VPNC_PE1DRAWNBYDEPTH (VPNG_PE + 8)
  436. #define VPNC_PE_COUNT VPNC_PE1DRAWNBYDEPTH - VPNG_PE
  437. /* HW: MCC Counters. */
  438. #define VPNC_MCCREADREQ8BCOLORPIPE (VPNG_MCC + 1)
  439. #define VPNC_MCCREADREQ8BSOCOLORPIPE (VPNG_MCC + 2)
  440. #define VPNC_MCCWRITEREQ8BCOLORPIPE (VPNG_MCC + 3)
  441. #define VPNC_MCCREADREQSOCOLORPIPE (VPNG_MCC + 4)
  442. #define VPNC_MCCWRITEREQCOLORPIPE (VPNG_MCC + 5)
  443. #define VPNC_MCCREADREQ8BDEPTHPIPE (VPNG_MCC + 6)
  444. #define VPNC_MCCREADREQ8BSFDEPTHPIPE (VPNG_MCC + 7)
  445. #define VPNC_MCCWRITEREQ8BDEPTHPIPE (VPNG_MCC + 8)
  446. #define VPNC_MCCREADREQSFDEPTHPIPE (VPNG_MCC + 9)
  447. #define VPNC_MCCWRITEREQDEPTHPIPE (VPNG_MCC + 10)
  448. #define VPNC_MCCREADREQ8BOTHERPIPE (VPNG_MCC + 11)
  449. #define VPNC_MCCWRITEREQ8BOTHERPIPE (VPNG_MCC + 12)
  450. #define VPNC_MCCREADREQOTHERPIPE (VPNG_MCC + 13)
  451. #define VPNC_MCCWRITEREQOTHERPIPE (VPNG_MCC + 14)
  452. #define VPNC_MCCAXIMINLATENCY (VPNG_MCC + 15)
  453. #define VPNC_MCCAXIMAXLATENCY (VPNG_MCC + 16)
  454. #define VPNC_MCCAXITOTALLATENCY (VPNG_MCC + 17)
  455. #define VPNC_MCCAXISAMPLECOUNT (VPNG_MCC + 18)
  456. #define VPNC_MCCFEREADBANDWIDTH (VPNG_MCC + 19)
  457. #define VPNC_MCCMMUREADBANDWIDTH (VPNG_MCC + 20)
  458. #define VPNC_MCCBLTREADBANDWIDTH (VPNG_MCC + 21)
  459. #define VPNC_MCCSH0READBANDWIDTH (VPNG_MCC + 22)
  460. #define VPNC_MCCSH1READBANDWIDTH (VPNG_MCC + 23)
  461. #define VPNC_MCCPEWRITEBANDWIDTH (VPNG_MCC + 24)
  462. #define VPNC_MCCBLTWRITEBANDWIDTH (VPNG_MCC + 25)
  463. #define VPNC_MCCSH0WRITEBANDWIDTH (VPNG_MCC + 26)
  464. #define VPNC_MCCSH1WRITEBANDWIDTH (VPNG_MCC + 27)
  465. #define VPNC_MCC_COUNT VPNC_MCCSH1WRITEBANDWIDTH - VPNG_MCC
  466. /* HW: MCZ Counters. */
  467. #define VPNC_MCZREADREQ8BCOLORPIPE (VPNG_MCZ + 1)
  468. #define VPNC_MCZREADREQ8BSOCOLORPIPE (VPNG_MCZ + 2)
  469. #define VPNC_MCZWRITEREQ8BCOLORPIPE (VPNG_MCZ + 3)
  470. #define VPNC_MCZREADREQSOCOLORPIPE (VPNG_MCZ + 4)
  471. #define VPNC_MCZWRITEREQCOLORPIPE (VPNG_MCZ + 5)
  472. #define VPNC_MCZREADREQ8BDEPTHPIPE (VPNG_MCZ + 6)
  473. #define VPNC_MCZREADREQ8BSFDEPTHPIPE (VPNG_MCZ + 7)
  474. #define VPNC_MCZWRITEREQ8BDEPTHPIPE (VPNG_MCZ + 8)
  475. #define VPNC_MCZREADREQSFDEPTHPIPE (VPNG_MCZ + 9)
  476. #define VPNC_MCZWRITEREQDEPTHPIPE (VPNG_MCZ + 10)
  477. #define VPNC_MCZREADREQ8BOTHERPIPE (VPNG_MCZ + 11)
  478. #define VPNC_MCZWRITEREQ8BOTHERPIPE (VPNG_MCZ + 12)
  479. #define VPNC_MCZREADREQOTHERPIPE (VPNG_MCZ + 13)
  480. #define VPNC_MCZWRITEREQOTHERPIPE (VPNG_MCZ + 14)
  481. #define VPNC_MCZAXIMINLATENCY (VPNG_MCZ + 15)
  482. #define VPNC_MCZAXIMAXLATENCY (VPNG_MCZ + 16)
  483. #define VPNC_MCZAXITOTALLATENCY (VPNG_MCZ + 17)
  484. #define VPNC_MCZAXISAMPLECOUNT (VPNG_MCZ + 18)
  485. #define VPNC_MCZ_COUNT VPNC_MCZAXISAMPLECOUNT - VPNG_MCZ
  486. /* HW: HI Counters. */
  487. #define VPNC_HI0READ8BYTE (VPNG_HI + 1)
  488. #define VPNC_HI0WRITE8BYTE (VPNG_HI + 2)
  489. #define VPNC_HI0READREQ (VPNG_HI + 3)
  490. #define VPNC_HI0WRITEREQ (VPNG_HI + 4)
  491. #define VPNC_HI0AXIREADREQSTALL (VPNG_HI + 5)
  492. #define VPNC_HI0AXIWRITEREQSTALL (VPNG_HI + 6)
  493. #define VPNC_HI0AXIWRITEDATASTALL (VPNG_HI + 7)
  494. #define VPNC_HI1READ8BYTE (VPNG_HI + 8)
  495. #define VPNC_HI1WRITE8BYTE (VPNG_HI + 9)
  496. #define VPNC_HI1READREQ (VPNG_HI + 10)
  497. #define VPNC_HI1WRITEREQ (VPNG_HI + 11)
  498. #define VPNC_HI1AXIREADREQSTALL (VPNG_HI + 12)
  499. #define VPNC_HI1AXIWRITEREQSTALL (VPNG_HI + 13)
  500. #define VPNC_HI1AXIWRITEDATASTALL (VPNG_HI + 14)
  501. #define VPNC_HITOTALCYCLES (VPNG_HI + 15)
  502. #define VPNC_HIIDLECYCLES (VPNG_HI + 16)
  503. #define VPNC_HIREAD8BYTE (VPNG_HI + 17)
  504. #define VPNC_HIWRITE8BYTE (VPNG_HI + 18)
  505. #define VPNC_HIOCBREAD16BYTE (VPNG_HI + 19)
  506. #define VPNC_HIOCBWRITE16BYTE (VPNG_HI + 20)
  507. #define VPNC_HI_COUNT VPNC_HIOCBWRITE16BYTE - VPNG_HI
  508. /* HW: L2 Counters. */
  509. #define VPNC_L2AXI0READREQCOUNT (VPNG_L2 + 1)
  510. #define VPNC_L2AXI1READREQCOUNT (VPNG_L2 + 2)
  511. #define VPNC_L2AXI0WRITEREQCOUNT (VPNG_L2 + 3)
  512. #define VPNC_L2AXI1WRITEREQCOUNT (VPNG_L2 + 4)
  513. #define VPNC_L2READTRANSREQBYAXI0 (VPNG_L2 + 5)
  514. #define VPNC_L2READTRANSREQBYAXI1 (VPNG_L2 + 6)
  515. #define VPNC_L2WRITETRANSREQBYAXI0 (VPNG_L2 + 7)
  516. #define VPNC_L2WRITETRANSREQBYAXI1 (VPNG_L2 + 8)
  517. #define VPNC_L2AXI0MINLATENCY (VPNG_L2 + 9)
  518. #define VPNC_L2AXI0MAXLATENCY (VPNG_L2 + 10)
  519. #define VPNC_L2AXI0TOTLATENCY (VPNG_L2 + 11)
  520. #define VPNC_L2AXI0TOTREQCOUNT (VPNG_L2 + 12)
  521. #define VPNC_L2AXI1MINLATENCY (VPNG_L2 + 13)
  522. #define VPNC_L2AXI1MAXLATENCY (VPNG_L2 + 14)
  523. #define VPNC_L2AXI1TOTLATENCY (VPNG_L2 + 15)
  524. #define VPNC_L2AXI1TOTREQCOUNT (VPNG_L2 + 16)
  525. #define VPNC_L2_COUNT VPNC_L2AXI1TOTREQCOUNT - VPNG_L2
  526. /* HW: FE Counters. */
  527. #define VPNC_FEDRAWCOUNT (VPNG_FE + 1)
  528. #define VPNC_FEOUTVERTEXCOUNT (VPNG_FE + 2)
  529. #define VPNC_FECACHEMISSCOUNT (VPNG_FE + 3)
  530. #define VPNC_FECACHELKCOUNT (VPNG_FE + 4)
  531. #define VPNC_FESTALLCOUNT (VPNG_FE + 5)
  532. #define VPNC_FESTARVECOUNT (VPNG_FE + 6)
  533. #define VPNC_FEPROCESSCOUNT (VPNG_FE + 7)
  534. #define VPNC_FE_COUNT VPNC_FEPROCESSCOUNT - VPNG_FE
  535. #define TOTAL_COUNTER_NUMBER (VPNC_FE_COUNT + VPNC_VS_COUNT + VPNC_PA_COUNT + VPNC_SE_COUNT + VPNC_RA_COUNT \
  536. + VPNC_PS_COUNT + VPNC_TX_COUNT + VPNC_PE_COUNT + VPNC_MCC_COUNT + VPNC_MCZ_COUNT \
  537. + VPNC_HI_COUNT + VPNC_L2_COUNT)
  538. #define TOTAL_MODULE_NUMBER 12
  539. /* PROGRAM: Shader program counters. */
  540. #define VPC_PVSINSTRCOUNT (VPG_PVS + PVS_INSTRCOUNT)
  541. #define VPC_PVSALUINSTRCOUNT (VPG_PVS + PVS_ALUINSTRCOUNT)
  542. #define VPC_PVSTEXINSTRCOUNT (VPG_PVS + PVS_TEXINSTRCOUNT)
  543. #define VPC_PVSATTRIBCOUNT (VPG_PVS + PVS_ATTRIBCOUNT)
  544. #define VPC_PVSUNIFORMCOUNT (VPG_PVS + PVS_UNIFORMCOUNT)
  545. #define VPC_PVSFUNCTIONCOUNT (VPG_PVS + PVS_FUNCTIONCOUNT)
  546. #define VPC_PVSSOURCE (VPG_PVS + PVS_SOURCE)
  547. #define VPC_PPSINSTRCOUNT (VPG_PPS + PPS_INSTRCOUNT)
  548. #define VPC_PPSALUINSTRCOUNT (VPG_PPS + PPS_ALUINSTRCOUNT)
  549. #define VPC_PPSTEXINSTRCOUNT (VPG_PPS + PPS_TEXINSTRCOUNT)
  550. #define VPC_PPSATTRIBCOUNT (VPG_PPS + PPS_ATTRIBCOUNT)
  551. #define VPC_PPSUNIFORMCOUNT (VPG_PPS + PPS_UNIFORMCOUNT)
  552. #define VPC_PPSFUNCTIONCOUNT (VPG_PPS + PPS_FUNCTIONCOUNT)
  553. #define VPC_PPSSOURCE (VPG_PPS + PPS_SOURCE)
  554. #define VPC_PROGRAMHANDLE (VPG_PROG + 1)
  555. #define VPC_ES30_DRAW_NO (VPG_ES30_DRAW + 1)
  556. #define VPC_ES11_DRAW_NO (VPG_ES11_DRAW + 1)
  557. #define VPC_ES30_GPU_NO (VPG_MULTI_GPU + 1)
  558. #define MODULE_FRONT_END_COUNTER_NUM 0x5
  559. #define MODULE_VERTEX_SHADER_COUNTER_NUM 0x9
  560. #define MODULE_PRIMITIVE_ASSEMBLY_COUNTER_NUM 0xC
  561. #define MODULE_SETUP_COUNTER_NUM 0xD
  562. #define MODULE_RASTERIZER_COUNTER_NUM 0xE
  563. #define MODULE_PIXEL_SHADER_COUNTER_NUM 0x9
  564. #define MODULE_TEXTURE_COUNTER_NUM 0x8
  565. #define MODULE_PIXEL_ENGINE_COUNTER_NUM 0x8
  566. #define MODULE_MEMORY_CONTROLLER_COLOR_COUNTER_NUM 0xC
  567. #define MODULE_MEMORY_CONTROLLER_DEPTH_COUNTER_NUM 0xC
  568. #define MODULE_HOST_INTERFACE0_COUNTER_NUM 0x9
  569. #define MODULE_HOST_INTERFACE1_COUNTER_NUM 0x7
  570. #define MODULE_GPUL2_CACHE_COUNTER_NUM 0xE
  571. #define TOTAL_PROBE_NUMBER (MODULE_FRONT_END_COUNTER_NUM + MODULE_VERTEX_SHADER_COUNTER_NUM + MODULE_PRIMITIVE_ASSEMBLY_COUNTER_NUM \
  572. + MODULE_SETUP_COUNTER_NUM + MODULE_RASTERIZER_COUNTER_NUM + MODULE_PIXEL_SHADER_COUNTER_NUM \
  573. + MODULE_TEXTURE_COUNTER_NUM + MODULE_PIXEL_ENGINE_COUNTER_NUM + MODULE_MEMORY_CONTROLLER_COLOR_COUNTER_NUM \
  574. + MODULE_MEMORY_CONTROLLER_DEPTH_COUNTER_NUM + MODULE_HOST_INTERFACE0_COUNTER_NUM + MODULE_HOST_INTERFACE1_COUNTER_NUM \
  575. + MODULE_GPUL2_CACHE_COUNTER_NUM)
  576. #define TOTAL_CL_COUNTER_NUMBER ((VPNC_FEPROCESSCOUNT - VPNC_FECACHELKCOUNT + 1) + VPNC_TX_COUNT + (VPNC_PS_COUNT - 1) + (VPNC_MCCSH1WRITEBANDWIDTH - VPNC_MCCWRITEREQDEPTHPIPE - (VPNC_MCCSH1WRITEBANDWIDTH - VPNC_MCCFEREADBANDWIDTH + 1)) + (VPNC_HI_COUNT - (VPNC_HIOCBWRITE16BYTE - VPNC_HIOCBREAD16BYTE + 1)) + VPNC_L2_COUNT)
  577. #define TOTAL_CL_MODULE_NUMBER (6)
  578. #define VPNC_NN_LAYER_ID (VPNG_NN + 1)
  579. #define VPNC_NN_LAYER_ID_OVFL (VPNG_NN + 2)
  580. #define VPNC_NN_INSTR_INFO (VPNG_NN + 3)
  581. #define VPNC_NN_TOTAL_BUSY_CYCLE (VPNG_NN + 4)
  582. #define VPNC_NN_TOTAL_BUSY_CYCLE_OVFL (VPNG_NN + 5)
  583. #define VPNC_NN_TOTAL_READ_CYCLE_DDR (VPNG_NN + 6)
  584. #define VPNC_NN_TOTAL_READ_CYCLE_DDR_OVFL (VPNG_NN + 7)
  585. #define VPNC_NN_TOTAL_READ_VALID_BW_DDR (VPNG_NN + 8)
  586. #define VPNC_NN_TOTAL_READ_VALID_BW_DDR_OVFL (VPNG_NN + 9)
  587. #define VPNC_NN_TOTAL_WRITE_CYCLE_DDR (VPNG_NN + 10)
  588. #define VPNC_NN_TOTAL_WRITE_CYCLE_DDR_OVFL (VPNG_NN + 11)
  589. #define VPNC_NN_TOTAL_WRITE_VALID_BW_DDR (VPNG_NN + 12)
  590. #define VPNC_NN_TOTAL_WRITE_VALID_BW_DDR_OVFL (VPNG_NN + 13)
  591. #define VPNC_NN_TOTAL_READ_CYCLE_SRAM (VPNG_NN + 14)
  592. #define VPNC_NN_TOTAL_READ_CYCLE_SRAM_OVFL (VPNG_NN + 15)
  593. #define VPNC_NN_TOTAL_WRITE_CYCLE_SRAM (VPNG_NN + 16)
  594. #define VPNC_NN_TOTAL_WRITE_CYCLE_SRAM_OVFL (VPNG_NN + 17)
  595. #define VPNC_NN_TOTAL_MAC_CYCLE (VPNG_NN + 18)
  596. #define VPNC_NN_TOTAL_MAC_CYCLE_OVFL (VPNG_NN + 19)
  597. #define VPNC_NN_TOTAL_MAC_COUNT (VPNG_NN + 20)
  598. #define VPNC_NN_TOTAL_MAC_COUNT_OVFL (VPNG_NN + 21)
  599. #define VPNC_NN_ZERO_COEF_SKIP_COUNT (VPNG_NN + 22)
  600. #define VPNC_NN_ZERO_COEF_SKIP_COUNT_OVFL (VPNG_NN + 23)
  601. #define VPNC_NN_NON_ZERO_COEF_COUNT (VPNG_NN + 24)
  602. #define VPNC_NN_NON_ZERO_COEF_COUNT_OVFL (VPNG_NN + 25)
  603. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE_OVFL (VPNG_NN + 26)
  604. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE0 (VPNG_NN + 27)
  605. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE1 (VPNG_NN + 28)
  606. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE2 (VPNG_NN + 29)
  607. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE3 (VPNG_NN + 30)
  608. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE4 (VPNG_NN + 31)
  609. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE5 (VPNG_NN + 32)
  610. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE6 (VPNG_NN + 33)
  611. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE7 (VPNG_NN + 34)
  612. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE8 (VPNG_NN + 35)
  613. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE9 (VPNG_NN + 36)
  614. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE10 (VPNG_NN + 37)
  615. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE11 (VPNG_NN + 38)
  616. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE12 (VPNG_NN + 39)
  617. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE13 (VPNG_NN + 40)
  618. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE14 (VPNG_NN + 41)
  619. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE15 (VPNG_NN + 42)
  620. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE16 (VPNG_NN + 43)
  621. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE17 (VPNG_NN + 44)
  622. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE18 (VPNG_NN + 45)
  623. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE19 (VPNG_NN + 46)
  624. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE20 (VPNG_NN + 47)
  625. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE21 (VPNG_NN + 48)
  626. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE22 (VPNG_NN + 49)
  627. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE23 (VPNG_NN + 50)
  628. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE24 (VPNG_NN + 51)
  629. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE25 (VPNG_NN + 52)
  630. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE26 (VPNG_NN + 53)
  631. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE27 (VPNG_NN + 54)
  632. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE28 (VPNG_NN + 55)
  633. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE29 (VPNG_NN + 56)
  634. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE30 (VPNG_NN + 57)
  635. #define VPNC_NN_TOTAL_IDLE_CYCLE_CORE31 (VPNG_NN + 58)
  636. #define VPNC_NN_COUNT (VPNC_NN_TOTAL_IDLE_CYCLE_CORE31 - VPNG_NN)
  637. /* HW: TP Probe Counters. */
  638. #define VPNC_TP_LAYER_ID (VPNG_TP + 1)
  639. #define VPNC_TP_LAYER_ID_OVFL (VPNG_TP + 2)
  640. #define VPNC_TP_TOTAL_BUSY_CYCLE (VPNG_TP + 3)
  641. #define VPNC_TP_TOTAL_BUSY_CYCLE_OVFL (VPNG_TP + 4)
  642. #define VPNC_TP_TOTAL_READ_BW_CACHE (VPNG_TP + 5)
  643. #define VPNC_TP_TOTAL_READ_BW_CACHE_OVFL (VPNG_TP + 6)
  644. #define VPNC_TP_TOTAL_WRITE_BW_CACHE (VPNG_TP + 7)
  645. #define VPNC_TP_TOTAL_WRITE_BW_CACHE_OVFL (VPNG_TP + 8)
  646. #define VPNC_TP_TOTAL_READ_BW_SRAM (VPNG_TP + 9)
  647. #define VPNC_TP_TOTAL_READ_BW_SRAM_OVFL (VPNG_TP + 10)
  648. #define VPNC_TP_TOTAL_WRITE_BW_SRAM (VPNG_TP + 11)
  649. #define VPNC_TP_TOTAL_WRITE_BW_SRAM_OVFL (VPNG_TP + 12)
  650. #define VPNC_TP_TOTAL_READ_BW_OCB (VPNG_TP + 13)
  651. #define VPNC_TP_TOTAL_READ_BW_OCB_OVFL (VPNG_TP + 14)
  652. #define VPNC_TP_TOTAL_WRITE_BW_OCB (VPNG_TP + 15)
  653. #define VPNC_TP_TOTAL_WRITE_BW_OCB_OVFL (VPNG_TP + 16)
  654. #define VPNC_TP_FC_PIX_CNT (VPNG_TP + 17)
  655. #define VPNC_TP_FC_ZERO_SKIP_CNT (VPNG_TP + 18)
  656. #define VPNC_TP_FC_PIX_CNT_OVFL (VPNG_TP + 19)
  657. #define VPNC_TP_FC_ZERO_SKIP_CNT_OVFL (VPNG_TP + 20)
  658. #define VPNC_TP_FC_COEF_CNT (VPNG_TP + 21)
  659. #define VPNC_TP_FC_COEF_ZERO_CNT (VPNG_TP + 22)
  660. #define VPNC_TP_FC_COEF_CNT_OVFL (VPNG_TP + 23)
  661. #define VPNC_TP_FC_COEF_ZERO_CNT_OVFL (VPNG_TP + 24)
  662. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE0 (VPNG_TP + 25)
  663. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE0_OVFL (VPNG_TP + 26)
  664. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE1 (VPNG_TP + 27)
  665. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE1_OVFL (VPNG_TP + 28)
  666. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE2 (VPNG_TP + 29)
  667. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE2_OVFL (VPNG_TP + 30)
  668. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE3 (VPNG_TP + 31)
  669. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE3_OVFL (VPNG_TP + 32)
  670. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE4 (VPNG_TP + 33)
  671. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE4_OVFL (VPNG_TP + 34)
  672. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE5 (VPNG_TP + 35)
  673. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE5_OVFL (VPNG_TP + 36)
  674. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE6 (VPNG_TP + 37)
  675. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE6_OVFL (VPNG_TP + 38)
  676. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE7 (VPNG_TP + 39)
  677. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE7_OVFL (VPNG_TP + 40)
  678. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE8 (VPNG_TP + 41)
  679. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE8_OVFL (VPNG_TP + 42)
  680. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE9 (VPNG_TP + 43)
  681. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE9_OVFL (VPNG_TP + 44)
  682. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE10 (VPNG_TP + 45)
  683. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE10_OVFL (VPNG_TP + 46)
  684. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE11 (VPNG_TP + 47)
  685. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE11_OVFL (VPNG_TP + 48)
  686. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE12 (VPNG_TP + 49)
  687. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE12_OVFL (VPNG_TP + 50)
  688. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE13 (VPNG_TP + 51)
  689. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE13_OVFL (VPNG_TP + 52)
  690. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE14 (VPNG_TP + 53)
  691. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE14_OVFL (VPNG_TP + 54)
  692. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE15 (VPNG_TP + 55)
  693. #define VPNC_TP_TOTAL_IDLE_CYCLE_CORE15_OVFL (VPNG_TP + 56)
  694. #define VPNC_TP_COUNT (VPNC_TP_TOTAL_IDLE_CYCLE_CORE15_OVFL - VPNG_TP)
  695. #define MODULE_NN_BASE_COUNTER_NUM 0x6
  696. /*#define MODULE_NN_RESERVED_COUNTER_NUM 0x9*/
  697. #define MODULE_NN_IDLE_COUNTER_NUM 0x9
  698. #define MODULE_NN_COUNTER_NUM (MODULE_NN_BASE_COUNTER_NUM + MODULE_NN_RESERVED_COUNTER_NUM + MODULE_NN_IDLE_COUNTER_NUM)
  699. #define TOTAL_VIP_COUNTER_NUMBER (VPNC_TP_COUNT + VPNC_NN_COUNT)
  700. #define TOTAL_VIP_MODULE_NUMBER 2
  701. #define MODULE_TP_COUNTER_NUM 0xE
  702. #define TOTAL_VIP_PROBE_NUMBER (MODULE_NN_COUNTER_NUM + MODULE_TP_COUNTER_NUM)
  703. #ifdef ANDROID
  704. #define DEFAULT_PROFILE_FILE_NAME "/sdcard/vprofiler.vpd"
  705. #else
  706. #define DEFAULT_PROFILE_FILE_NAME "vprofiler.vpd"
  707. #endif
  708. #define VPHEADER_VERSION "VP20"
  709. #define VPFILETYPE_GL "10"
  710. #define VPFILETYPE_CL "00"
  711. #if gcdENDIAN_BIG
  712. #define BIG_ENDIAN_TRANS_INT(x) ((gctUINT32)(\
  713. (((gctUINT32)(x) & (gctUINT32)0x000000FFUL) << 24) | \
  714. (((gctUINT32)(x) & (gctUINT32)0x0000FF00UL) << 8) | \
  715. (((gctUINT32)(x) & (gctUINT32)0x00FF0000UL) >> 8) | \
  716. (((gctUINT32)(x) & (gctUINT32)0xFF000000UL) >> 24)))
  717. #else
  718. #define BIG_ENDIAN_TRANS_INT(x) x
  719. #endif
  720. /* Write a data value. */
  721. #define gcmWRITE_VALUE(IntData) \
  722. do \
  723. { \
  724. gceSTATUS status; \
  725. gctINT32 value = IntData; \
  726. value = BIG_ENDIAN_TRANS_INT(value); \
  727. gcmERR_BREAK(gcoPROFILER_Write(Profiler, gcmSIZEOF(value), &value)); \
  728. } \
  729. while (gcvFALSE)
  730. #define gcmWRITE_CONST(Const) \
  731. do \
  732. { \
  733. gceSTATUS status; \
  734. gctINT32 data = Const; \
  735. data = BIG_ENDIAN_TRANS_INT(data); \
  736. gcmERR_BREAK(gcoPROFILER_Write(Profiler, gcmSIZEOF(data), &data)); \
  737. } \
  738. while (gcvFALSE)
  739. #define gcmWRITE_COUNTER(Counter, Value) \
  740. gcmWRITE_CONST(Counter); \
  741. gcmWRITE_VALUE(Value)
  742. /* Write a data value. */
  743. #define gcmRECORD_VALUE(IntData) \
  744. do \
  745. { \
  746. gctINT32 value = IntData; \
  747. value = BIG_ENDIAN_TRANS_INT(value); \
  748. counterData[counterIndex++] = value; \
  749. } \
  750. while (gcvFALSE)
  751. #define gcmRECORD_CONST(Const) \
  752. do \
  753. { \
  754. gctINT32 data = Const; \
  755. data = BIG_ENDIAN_TRANS_INT(data); \
  756. counterData[counterIndex++] = data; \
  757. } \
  758. while (gcvFALSE)
  759. #define gcmRECORD_COUNTER(Counter, Value) \
  760. gcmRECORD_CONST(Counter); \
  761. gcmRECORD_VALUE(Value)
  762. /* Write a string value (char*). */
  763. #define gcmWRITE_STRING(String) \
  764. do \
  765. { \
  766. gceSTATUS status; \
  767. gctINT32 length; \
  768. length = (gctINT32) gcoOS_StrLen((gctSTRING)String, gcvNULL); \
  769. length = BIG_ENDIAN_TRANS_INT(length); \
  770. gcmERR_BREAK(gcoPROFILER_Write(Profiler, gcmSIZEOF(length), &length)); \
  771. gcmERR_BREAK(gcoPROFILER_Write(Profiler, length, String)); \
  772. } \
  773. while (gcvFALSE)
  774. #define gcmWRITE_BUFFER(Size, Buffer) \
  775. do \
  776. { \
  777. gceSTATUS status; \
  778. gcmERR_BREAK(gcoPROFILER_Write(Profiler, Size, Buffer)); \
  779. } \
  780. while (gcvFALSE)
  781. #define gcmGET_COUNTER(counter, counterId) \
  782. do \
  783. { \
  784. if (*(memory + (counterId + offset) * (1 << clusterIDWidth)) == 0xdeaddead) \
  785. { \
  786. counter = 0xdeaddead; \
  787. } \
  788. else \
  789. { \
  790. gctUINT32 i; \
  791. gctUINT32_PTR Memory = memory; \
  792. gctUINT32 total_probe_number = 0; \
  793. counter = 0; \
  794. gcmONERROR(gcoPROFILER_GetProbeNumber(Hardware, &total_probe_number)); \
  795. Memory = memory + total_probe_number * CoreId * (1 << clusterIDWidth); \
  796. for (i = 0; i < (gctUINT32)(1 << clusterIDWidth); i++) \
  797. { \
  798. counter += *(Memory + (counterId + offset) * (1 << clusterIDWidth) + i); \
  799. } \
  800. } \
  801. } \
  802. while (gcvFALSE)
  803. #define gcmGET_VIPCOUNTER(counter, counterId) \
  804. do \
  805. { \
  806. if (*(memory + (counterId + offset) * (1 << clusterIDWidth)) == 0xdeaddead) \
  807. { \
  808. counter = 0xdeaddead; \
  809. } \
  810. else \
  811. { \
  812. gctUINT32 i; \
  813. gctUINT32_PTR Memory = memory; \
  814. counter = 0; \
  815. Memory = memory + TOTAL_VIP_PROBE_NUMBER * CoreId * (1 << clusterIDWidth); \
  816. for (i = 0; i < (gctUINT32)(1 << clusterIDWidth); i++) \
  817. { \
  818. counter += *(Memory + (counterId + offset) * (1 << clusterIDWidth) + i); \
  819. } \
  820. } \
  821. } \
  822. while (gcvFALSE)
  823. #define gcmGET_LATENCY_COUNTER(minLatency, maxLatency, counterId) \
  824. do \
  825. { \
  826. if (*(memory + (counterId + offset) * (1 << clusterIDWidth)) == 0xdeaddead) \
  827. { \
  828. minLatency = maxLatency = 0xdeaddead; \
  829. } \
  830. else \
  831. { \
  832. gctUINT32 i; \
  833. gctUINT32_PTR Memory = memory; \
  834. gctUINT32 total_probe_number = 0; \
  835. gcmONERROR(gcoPROFILER_GetProbeNumber(Hardware, &total_probe_number)); \
  836. Memory = memory + total_probe_number * CoreId * (1 << clusterIDWidth); \
  837. for (i = 0; i < (gctUINT32)(1 << clusterIDWidth); i++) \
  838. { \
  839. maxLatency += ((*(Memory + (counterId + offset) * (1 << clusterIDWidth) + i) & 0xfff000) >> 12); \
  840. minLatency += (*(Memory + (counterId + offset) * (1 << clusterIDWidth) + i) & 0x000fff); \
  841. if (minLatency == 4095) \
  842. minLatency = 0; \
  843. } \
  844. } \
  845. } \
  846. while (gcvFALSE)
  847. #define NumOfPerFrameBuf 16
  848. #define NumOfPerDrawBuf 128
  849. typedef struct gcsCounterBuffer * gcsCounterBuffer_PTR;
  850. struct gcsCounterBuffer
  851. {
  852. gcsPROFILER_COUNTERS *counters;
  853. gcsPROFILER_VIP_PROBE_COUNTERS *vipCounters;
  854. gctHANDLE couterBufobj;
  855. gctUINT32 probeAddress;
  856. gctPOINTER logicalAddress;
  857. gceCOUNTER_OPTYPE opType;
  858. gctUINT32 opID;
  859. gctUINT32 startPos;
  860. gctUINT32 endPos;
  861. gctUINT32 dataSize;
  862. gctBOOL available;
  863. gctBOOL needDump;
  864. gcsCounterBuffer_PTR next;
  865. gcsCounterBuffer_PTR prev;
  866. };
  867. typedef struct _gcoPROFILER * gcoPROFILER;
  868. struct _gcoPROFILER
  869. {
  870. gctBOOL enable;
  871. gctBOOL enablePrint;
  872. gctBOOL disableProbe;
  873. gctBOOL probeMode;
  874. gctBOOL vipProbe;
  875. gctFILE file;
  876. gctCHAR* fileName;
  877. gcsCounterBuffer_PTR counterBuf;
  878. gctUINT32 bufferCount;
  879. gctBOOL perDrawMode;
  880. gctBOOL needDump;
  881. gctBOOL counterEnable;
  882. gceProfilerClient profilerClient;
  883. /*query some features from hw*/
  884. gctUINT32 coreCount;
  885. gctUINT32 shaderCoreCount;
  886. gctBOOL bHalti4;
  887. gctBOOL psRenderPixelFix;
  888. gctBOOL axiBus128bits;
  889. gctBOOL bZDP3;
  890. };
  891. typedef struct _gcsPROBESTATES
  892. {
  893. gceProbeStatus status;
  894. gctUINT32 probeAddress;
  895. }gcsPROBESTATES;
  896. typedef struct _gckPROFILER
  897. {
  898. /* Profile mode */
  899. gceProfilerMode profileMode;
  900. /* Enable profiling */
  901. gctBOOL profileEnable;
  902. /* Clear profile register or not*/
  903. gctBOOL profileCleanRegister;
  904. }gckPROFILER;
  905. /* Construct a Profiler object per context. */
  906. gceSTATUS
  907. gcoPROFILER_Construct(
  908. OUT gcoPROFILER * Profiler
  909. );
  910. gceSTATUS
  911. gcoPROFILER_Destroy(
  912. IN gcoPROFILER Profiler
  913. );
  914. gceSTATUS
  915. gcoPROFILER_Initialize(
  916. IN gcoPROFILER Profiler
  917. );
  918. gceSTATUS
  919. gcoPROFILER_Disable(
  920. void
  921. );
  922. gceSTATUS
  923. gcoPROFILER_EnableCounters(
  924. IN gcoPROFILER Profiler,
  925. IN gceCOUNTER_OPTYPE operationType
  926. );
  927. gceSTATUS
  928. gcoPROFILER_End(
  929. IN gcoPROFILER Profiler,
  930. IN gceCOUNTER_OPTYPE operationType,
  931. IN gctUINT32 OpID
  932. );
  933. gceSTATUS
  934. gcoPROFILER_Write(
  935. IN gcoPROFILER Profiler,
  936. IN gctSIZE_T ByteCount,
  937. IN gctCONST_POINTER Data
  938. );
  939. gceSTATUS
  940. gcoPROFILER_Flush(
  941. IN gcoPROFILER Profiler
  942. );
  943. gceSTATUS
  944. gcoPROFILER_GetProbeNumber(
  945. IN gcoHARDWARE Hardware,
  946. OUT gctUINT32 *TotalProbeNumber
  947. );
  948. #ifdef __cplusplus
  949. }
  950. #endif
  951. #endif /* __gc_hal_profiler_h_ */