1 /*---------------------------------------------------------------------------*
2
3 Copyright (C) 2010-2011 Nintendo. All rights reserved.
4
5 These coded instructions, statements, and computer programs contain
6 proprietary information of Nintendo of America Inc. and/or Nintendo
7 Company Ltd., and are protected by Federal copyright law. They may
8 not be disclosed to third parties or copied or duplicated in any form,
9 in whole or in part, without the prior written consent of Nintendo.
10
11 *---------------------------------------------------------------------------*/
12
13 // gx2Perf.h
14 //
15 // Declares GPU performance APIs for gx2 library.
16
17 #ifndef _CAFE_GX2_PERF2_H_
18 #define _CAFE_GX2_PERF2_H_
19
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23
24 #include <cafe/mem.h>
25
26 #define GX2_PERF_DATA_RESERVED_SIZE 0x8a0
27
28 /// @addtogroup GX2PerfHighStructGroup
29 /// @{
30
31 /// \brief Function to convert tag id to string
32 ///
33 typedef u32 GX2PerfTag;
34
35 typedef const char* (*GX2PerfTag2StringFunc)(GX2PerfTag tag);
36
37 /// \brief Metric result used to return values from result query calls
38 ///
39 typedef union _GX2MetricResult
40 {
41 f32 f32Result; /// < f32 result
42 u64 u64Result; /// < u64 resuls
43 } GX2MetricResult;
44
45
46 /// \brief Perf data collection.
47 ///
48 typedef struct _GX2PerfData
49 {
50 u8 reserved[GX2_PERF_DATA_RESERVED_SIZE];
51 } GX2PerfData;
52
53 #define GX2_INVALID_METRIC_NAME "invalid_metric_specified"
54
55 /// \brief Indicates the perf metric type.
56 ///
57 typedef enum _GX2PerfMetricType
58 {
59 GX2_PERF_METRICTYPE_U64,
60 GX2_PERF_METRICTYPE_F32
61 } GX2PerfMetricType;
62
63 /// @}
64 /// @addtogroup GX2PerfHighResultsGroup
65 /// @{
66
67 /// \brief This function returns a string with the name of a specified GX2 perf metric.
68 ///
69 /// \donotcall \threadsafe \devonly \enddonotcall
70 ///
GX2GetPerfMetricName(GX2PerfMetric metric)71 GX2_INLINE const char* GX2GetPerfMetricName(GX2PerfMetric metric)
72 {
73 ASSERT(metric <= GX2_PERF_LAST);
74
75 switch(metric)
76 {
77 case GX2_PERF_U64_TIME: return "GX2_PERF_U64_TIME"; // 0
78 case GX2_PERF_U64_GPU_TIME: return "GX2_PERF_U64_GPU_TIME"; // 1
79 case GX2_PERF_F32_GPU_BUSY: return "GX2_PERF_F32_GPU_BUSY"; // 2
80 case GX2_PERF_F32_SHADER_BUSY: return "GX2_PERF_F32_SHADER_BUSY"; // 3
81 case GX2_PERF_U64_REUSED_INDICES_VS: return "GX2_PERF_U64_REUSED_INDICES_VS"; // 4
82 case GX2_PERF_F32_SHADER_BUSY_VS: return "GX2_PERF_F32_SHADER_BUSY_VS"; // 5
83 case GX2_PERF_F32_SHADER_BUSY_GS: return "GX2_PERF_F32_SHADER_BUSY_GS"; // 6
84 case GX2_PERF_F32_SHADER_BUSY_PS: return "GX2_PERF_F32_SHADER_BUSY_PS"; // 7
85 case GX2_PERF_F32_ALU_BUSY: return "GX2_PERF_F32_ALU_BUSY"; // 8
86 case GX2_PERF_F32_TEX_BUSY: return "GX2_PERF_F32_TEX_BUSY"; // 9
87 case GX2_PERF_U64_VS_VERTICES_IN: return "GX2_PERF_U64_VS_VERTICES_IN"; // 10
88 case GX2_PERF_F32_VS_TEX_INST_COUNT: return "GX2_PERF_F32_VS_TEX_INST_COUNT"; // 11
89 case GX2_PERF_F32_VS_TEX_BUSY: return "GX2_PERF_F32_VS_TEX_BUSY"; // 12
90 case GX2_PERF_F32_VS_ALU_INST_COUNT: return "GX2_PERF_F32_VS_ALU_INST_COUNT"; // 13
91 case GX2_PERF_F32_VS_ALU_BUSY: return "GX2_PERF_F32_VS_ALU_BUSY"; // 14
92 case GX2_PERF_F32_VS_ALU_EFFICIENCY: return "GX2_PERF_F32_VS_ALU_EFFICIENCY"; // 15
93 case GX2_PERF_F32_VS_ALU_TEX_RATIO: return "GX2_PERF_F32_VS_ALU_TEX_RATIO"; // 16
94 case GX2_PERF_F32_GS_TEX_INST_COUNT: return "GX2_PERF_F32_GS_TEX_INST_COUNT"; // 17
95 case GX2_PERF_F32_GS_TEX_BUSY: return "GX2_PERF_F32_GS_TEX_BUSY"; // 18
96 case GX2_PERF_F32_GS_ALU_INST_COUNT: return "GX2_PERF_F32_GS_ALU_INST_COUNT"; // 19
97 case GX2_PERF_F32_GS_ALU_BUSY: return "GX2_PERF_F32_GS_ALU_BUSY"; // 20
98 case GX2_PERF_F32_GS_ALU_EFFICIENCY: return "GX2_PERF_F32_GS_ALU_EFFICIENCY"; // 21
99 case GX2_PERF_F32_GS_ALU_TEX_RATIO: return "GX2_PERF_F32_GS_ALU_TEX_RATIO"; // 22
100 case GX2_PERF_F32_PRIMITIVE_ASSEMBLY_BUSY: return "GX2_PERF_F32_PRIMITIVE_ASSEMBLY_BUSY"; // 23
101 case GX2_PERF_U64_PRIMITIVES_IN: return "GX2_PERF_U64_PRIMITIVES_IN"; // 24
102 case GX2_PERF_F32_PA_STALLED_ON_RASTERIZER: return "GX2_PERF_F32_PA_STALLED_ON_RASTERIZER"; // 25
103 case GX2_PERF_F32_INTERP_BUSY: return "GX2_PERF_F32_INTERP_BUSY"; // 26
104 case GX2_PERF_U64_PS_PIXELS_IN: return "GX2_PERF_U64_PS_PIXELS_IN"; // 27
105 case GX2_PERF_F32_PS_TEX_INST_COUNT: return "GX2_PERF_F32_PS_TEX_INST_COUNT"; // 28
106 case GX2_PERF_F32_PS_TEX_BUSY: return "GX2_PERF_F32_PS_TEX_BUSY"; // 29
107 case GX2_PERF_F32_PS_ALU_INST_COUNT: return "GX2_PERF_F32_PS_ALU_INST_COUNT"; // 30
108 case GX2_PERF_F32_PS_ALU_BUSY: return "GX2_PERF_F32_PS_ALU_BUSY"; // 31
109 case GX2_PERF_F32_PS_ALU_EFFICIENCY: return "GX2_PERF_F32_PS_ALU_EFFICIENCY"; // 32
110 case GX2_PERF_F32_PS_ALU_TEX_RATIO: return "GX2_PERF_F32_PS_ALU_TEX_RATIO"; // 33
111 case GX2_PERF_U64_PS_PIXELS_OUT: return "GX2_PERF_U64_PS_PIXELS_OUT"; // 34
112 case GX2_PERF_F32_PS_EXPORT_STALLS: return "GX2_PERF_F32_PS_EXPORT_STALLS"; // 35
113 case GX2_PERF_F32_TEX_UNIT_BUSY: return "GX2_PERF_F32_TEX_UNIT_BUSY"; // 36
114 case GX2_PERF_U64_TEXEL_FETCH_COUNT: return "GX2_PERF_U64_TEXEL_FETCH_COUNT"; // 37
115 case GX2_PERF_F32_TEX_CACHE_STALLED: return "GX2_PERF_F32_TEX_CACHE_STALLED"; // 38
116 case GX2_PERF_F32_TEX_MISS_RATE: return "GX2_PERF_F32_TEX_MISS_RATE"; // 39
117 case GX2_PERF_U64_TEX_MEM_BYTES_READ: return "GX2_PERF_U64_TEX_MEM_BYTES_READ"; // 40
118 case GX2_PERF_F32_DEPTH_STENCIL_TEST_BUSY: return "GX2_PERF_F32_DEPTH_STENCIL_TEST_BUSY"; // 41
119 case GX2_PERF_F32_HIZ_TRIVIAL_ACCEPT: return "GX2_PERF_F32_HIZ_TRIVIAL_ACCEPT"; // 42
120 case GX2_PERF_F32_HIZ_REJECT: return "GX2_PERF_F32_HIZ_REJECT"; // 43
121 case GX2_PERF_U64_PRE_Z_SAMPLES_PASSING: return "GX2_PERF_U64_PRE_Z_SAMPLES_PASSING"; // 44
122 case GX2_PERF_U64_PRE_Z_SAMPLES_FAILING_S: return "GX2_PERF_U64_PRE_Z_SAMPLES_FAILING_S"; // 45
123 case GX2_PERF_U64_PRE_Z_SAMPLES_FAILING_Z: return "GX2_PERF_U64_PRE_Z_SAMPLES_FAILING_Z"; // 46
124 case GX2_PERF_U64_POST_Z_SAMPLES_PASSING: return "GX2_PERF_U64_POST_Z_SAMPLES_PASSING"; // 47
125 case GX2_PERF_U64_POST_Z_SAMPLES_FAILING_S: return "GX2_PERF_U64_POST_Z_SAMPLES_FAILING_S"; // 48
126 case GX2_PERF_U64_POST_Z_SAMPLES_FAILING_Z: return "GX2_PERF_U64_POST_Z_SAMPLES_FAILING_Z"; // 49
127 case GX2_PERF_F32_Z_UNIT_STALLED: return "GX2_PERF_F32_Z_UNIT_STALLED"; // 50
128 case GX2_PERF_U64_PIXELS_AT_CB: return "GX2_PERF_U64_PIXELS_AT_CB"; // 51
129 case GX2_PERF_U64_PIXELS_CB_MEM_WRITTEN: return "GX2_PERF_U64_PIXELS_CB_MEM_WRITTEN"; // 52
130 case GX2_PERF_U64_IA_VERTICES: return "GX2_PERF_U64_IA_VERTICES"; // 53
131 case GX2_PERF_U64_IA_PRIMITIVES: return "GX2_PERF_U64_IA_PRIMITIVES"; // 54
132 case GX2_PERF_U64_VS_INVOCATIONS: return "GX2_PERF_U64_VS_INVOCATIONS"; // 55
133 case GX2_PERF_U64_GS_INVOCATIONS: return "GX2_PERF_U64_GS_INVOCATIONS"; // 56
134 case GX2_PERF_U64_GS_PRIMITIVES: return "GX2_PERF_U64_GS_PRIMITIVES"; // 57
135 case GX2_PERF_U64_C_INVOCATIONS: return "GX2_PERF_U64_C_INVOCATIONS"; // 58
136 case GX2_PERF_U64_C_PRIMITIVES: return "GX2_PERF_U64_C_PRIMITIVES"; // 59
137 case GX2_PERF_U64_PS_INVOCATIONS: return "GX2_PERF_U64_PS_INVOCATIONS"; // 60
138 case GX2_PERF_U64_PA_INPUT_PRIM: return "GX2_PERF_U64_PA_INPUT_PRIM"; // 61
139 default:
140 ASSERT(!"GX2 perf table is out of sync" );
141 return GX2_INVALID_METRIC_NAME;
142 }
143 }
144
145 /// \brief Returns the PerfMetric type given the PerfMetric
146 /// \param metric metric ID
147 ///
148 /// \return metric type
149 ///
150 /// \donotcall \threadsafe \devonly \enddonotcall
151 ///
152 GX2PerfMetricType GX2API GX2GetPerfMetricType(GX2PerfMetric metric);
153
154 /// \brief (deprecated) GX2 Temp API has been renamed. Use GX2GetPerfMetricType instead
155 ///
156 /// GX2TempGetPerfMetricType will be removed completely in a later SDK
157 ///
158 /// \donotcall \threadsafe \devonly \enddonotcall
159 ///
160 #define GX2TempGetPerfMetricType GX2GetPerfMetricType
161
162 /// @}
163 /// @addtogroup GX2PerfHighSetupGroup
164 /// @{
165
166 #ifndef GX2_PERFORMANCE_DISABLED
167 /// \brief Initialize a perf collection
168 ///
169 /// \param perfData Perf collection data
170 /// \param maxTags Maximum number of tags in tag list
171 /// \param pAllocator Allocation routines
172 ///
173 /// \donotcall \gx2_typical \userheap \enddonotcall
174 ///
175 void GX2API GX2PerfInit(GX2PerfData *perfData, u32 maxTags, MEMAllocator *pAllocator);
176
177 /// \brief Free all memory used by the collection (incl. tag list)
178 ///
179 /// \note You must call GX2PerfInit again after making this call
180 /// \param perfData Perf collection data
181 ///
182 /// \donotcall \gx2_typical \userheap \enddonotcall
183 ///
184 void GX2API GX2PerfFree(GX2PerfData *perfData);
185
186 /// \brief Specify how tag results are collected
187 ///
188 /// \param perfData Perf collection data
189 /// \param method Collection method
190 ///
191 /// \donotcall \threadsafe \devonly \enddonotcall
192 ///
193 void GX2API GX2PerfSetCollectionMethod(GX2PerfData *perfData, GX2PerfCollectionMethod method);
194
195 /// \brief Get current collection method
196 ///
197 /// \param perfData Perf collection data
198 /// \return Currently set collection method
199 ///
200 /// \donotcall \threadsafe \devonly \enddonotcall
201 ///
202 GX2PerfCollectionMethod GX2API GX2PerfGetCollectionMethod(GX2PerfData *perfData);
203
204 /// \brief Clear all metrics from the perf collection
205 ///
206 /// \param perfData Perf collection data
207 ///
208 /// \donotcall \threadsafe \devonly \enddonotcall
209 ///
210 void GX2API GX2PerfMetricsClear(GX2PerfData *perfData);
211
212 /// \brief Enable a desired metric
213 ///
214 /// \param perfData Perf collection data
215 /// \param type Perf type - tells api how to interpret the 'id' parameter
216 /// \param id a GX2PerfMetric if type is GX2_PERF_TYPE_GPU_METRIC or _GX2StatId if type is GX2_PERF_TYPE_GPU_STAT
217 ///
218 /// \return Returns false if metric could not be enabled when there are no available counter slots
219 ///
220 /// \donotcall \threadsafe \devonly \enddonotcall
221 ///
222 GX2Boolean GX2API GX2PerfMetricEnable(GX2PerfData *perfData, GX2PerfType type, u32 id);
223
224 /// \brief Check if a specific metric/stat is enabled
225 ///
226 /// \param perfData Perf collection data
227 /// \param type Metric type
228 /// \param metricId Metric ID
229 ///
230 /// \donotcall \threadsafe \devonly \enddonotcall
231 ///
232 GX2Boolean GX2API GX2PerfMetricIsEnabled(GX2PerfData *perfData, GX2PerfType type, u32 metricId);
233
234 /// \brief Iterate through enabled metrics
235 ///
236 /// \param perfData Perf collection data
237 /// \param index Index of the desired metric
238 /// \param type Metric type
239 /// \param metricId Metric information
240 ///
241 /// \note To iterate through all metrics, start with index zero and increment
242 /// index until the function returns GX2_FALSE
243 ///
244 /// \return Returns true if metric does not exceed number of metrics enabled
245 ///
246 /// \donotcall \threadsafe \devonly \enddonotcall
247 ///
248 GX2Boolean GX2API GX2PerfMetricGetEnabled(GX2PerfData *perfData, u32 index, GX2PerfType *type, u32 *metricId);
249
250 // -----------------
251 // Tag Initialization
252
253 /// \brief Enable a tag in the tag list
254 ///
255 /// \param perfData Perf collection data
256 /// \param tag Tag to enable
257 /// \param enable GX2_TRUE to enable, GX2_FALSE to disable
258 ///
259 /// \donotcall \threadsafe \devonly \enddonotcall
260 ///
261 void GX2API GX2PerfTagEnable(GX2PerfData *perfData, GX2PerfTag tag, GX2Boolean enable);
262
263 /// \brief Enable all tags in the tag list
264 ///
265 /// \param perfData Perf collection data
266 ///
267 /// \donotcall \threadsafe \devonly \enddonotcall
268 ///
269 void GX2API GX2PerfTagEnableAll(GX2PerfData *perfData);
270
271 /// \brief Disable all tags in the tag list
272 ///
273 /// \param perfData Perf collection data
274 ///
275 /// \donotcall \threadsafe \devonly \enddonotcall
276 ///
277 void GX2API GX2PerfTagDisableAll(GX2PerfData *perfData);
278
279 /// \brief Check if a tag is enabled in a tag list
280 ///
281 /// \param perfData Perf collection data
282 /// \param tag Tag to check
283 ///
284 /// \donotcall \threadsafe \devonly \enddonotcall
285 ///
286 GX2Boolean GX2API GX2PerfTagIsEnabled(GX2PerfData *perfData, GX2PerfTag tag);
287
288 /// @}
289 /// @addtogroup GX2PerfHighCaptureGroup
290 /// @{
291
292 // -----------------
293 // Run-time Frame Captures
294
295 /// \brief Identify beginning of frame
296 ///
297 /// \note Once you call GX2PerfFrameStart, then you cannot change
298 /// the enabled metrics or stats until after you call GX2PerfFrameEnd.
299 /// Otherwise, the result size and offsets will not make any sense with the results.
300 ///
301 /// \param perfData Perf collection data
302 ///
303 /// \donotcall \gx2_typical \userheap \enddonotcall
304 ///
305 void GX2API GX2PerfFrameStart(GX2PerfData *perfData);
306
307 /// \brief Identify end of frame
308 ///
309 /// \param perfData Perf collection data
310 ///
311 /// \donotcall \threadsafe \devonly \enddonotcall
312 ///
313 void GX2API GX2PerfFrameEnd(GX2PerfData *perfData);
314
315 /// \brief Get the number of passes needed based on the metrics which are enabled
316 ///
317 /// \param perfData Perf collection data
318 ///
319 /// \return Number of passes needed
320 ///
321 /// \donotcall \threadsafe \devonly \enddonotcall
322 ///
323 u32 GX2API GX2PerfGetNumPasses(GX2PerfData *perfData);
324
325 /// \brief Configure counters for the current pass
326 ///
327 /// \param perfData Perf collection data
328 ///
329 /// \donotcall \gx2_typical \enddonotcall
330 ///
331 /// \writesgpu
332 /// \alwayswritesgpu
333 ///
334 void GX2API GX2PerfPassStart(GX2PerfData *perfData);
335
336 /// \brief Needs to be called at the end of a pass
337 ///
338 /// \param perfData Perf collection data
339 ///
340 ///
341 /// \donotcall \gx2_typical \userheap \enddonotcall
342 ///
343 void GX2API GX2PerfPassEnd(GX2PerfData *perfData);
344
345 /// \brief Mark the start of a user-defined section
346 ///
347 /// \param perfData Perf collection data
348 /// \param tag Section tag
349 ///
350 /// \donotcall \gx2_typical \userheap \enddonotcall
351 ///
352 /// \writesgpu
353 /// \alwayswritesgpu
354 ///
355 void GX2API GX2PerfTagStart(GX2PerfData *perfData, GX2PerfTag tag);
356
357 /// \brief Mark the end of a user-defined section
358 ///
359 /// \param perfData Perf collection data
360 /// \param tag Section tag
361 ///
362 /// \donotcall \gx2_typical \userheap \enddonotcall
363 ///
364 /// \writesgpu
365 /// \alwayswritesgpu
366 ///
367 void GX2API GX2PerfTagEnd(GX2PerfData *perfData, GX2PerfTag tag);
368
369 /// @}
370 /// @addtogroup GX2PerfHighResultsGroup
371 /// @{
372
373 // -----------------
374 // Results
375 ///
376 /// \brief Get a single per-frame metric result
377 ///
378 /// \param perfData Perf collection data
379 /// \param type type of id (stat or metric)
380 /// \param id Metric or Stat id
381 /// \param pResult result
382 ///
383 /// \return Returns false if that metric was not enabled
384 ///
385 /// \donotcall \threadsafe \devonly \enddonotcall
386 ///
387 GX2Boolean GX2API GX2PerfGetResultByFrame(GX2PerfData *perfData, GX2PerfType type, u32 id, GX2MetricResult *pResult);
388
389 ///
390 /// \brief Get a single per-tag metric result, by specifying the tag info.
391 ///
392 /// \param perfData Perf collection data
393 /// \param type Metric type
394 /// \param id Metric id
395 /// \param tag Tag id
396 /// \param number Number of tag occurrence
397 /// \param pResult Results
398 ///
399 /// \return Returns false if that metric was not enabled
400 ///
401 /// \donotcall \threadsafe \devonly \enddonotcall
402 ///
403 GX2Boolean GX2API GX2PerfGetResultByTagId(GX2PerfData *perfData, GX2PerfType type, u32 id,
404 u32 tag, u32 number, GX2MetricResult *pResult);
405
406 ///
407 /// \brief Get a single per-tag metric result, by specifying the sequence #.
408 ///
409 /// \param perfData Perf collection data
410 /// \param type Metric type
411 /// \param id Metric id
412 /// \param sequence Sequence number (0 = first tag result, 1 = second, and so on)
413 /// \param tag Tag id
414 /// \param number Number of metric
415 /// \param depth Depth
416 /// \param pResult Results
417 ///
418 /// \return Returns false if that metric was not enabled or if sequence # is beyond max
419 ///
420 /// \donotcall \threadsafe \devonly \enddonotcall
421 ///
422 GX2Boolean GX2API GX2PerfGetResultByTagSequence(GX2PerfData *perfData, GX2PerfType type, u32 id,
423 u32 sequence, u32 *tag, u32 *number, u32 *depth, GX2MetricResult *pResult);
424
425 /// \brief Convenience function to print results by frame
426 ///
427 /// \param perfData Perf collection data
428 ///
429 /// \donotcall \threadsafe \devonly \enddonotcall
430 ///
431 void GX2API GX2PerfPrintFrameResults(GX2PerfData *perfData);
432
433 /// \brief Convenience function to print results by tags
434 ///
435 /// \param perfData Perf collection data
436 /// \param func Pointer to function that will convert tags to strings
437 /// If func==NULL, just print tag numbers
438 ///
439 /// \donotcall \threadsafe \devonly \enddonotcall
440 ///
441 void GX2API GX2PerfPrintTagResults(GX2PerfData *perfData, GX2PerfTag2StringFunc func);
442
443 /// \brief Enable or disable the pass coherency checking. By default, pass coherency checking
444 /// is disabled.
445 ///
446 /// \param perfData Perf collection data
447 /// \param enable GX2_TRUE to enable, GX2_FALSE to disable
448 ///
449 /// \donotcall \threadsafe \devonly \enddonotcall
450 ///
451 void GX2API GX2PerfSetPassCoherEnable(GX2PerfData *perfData, GX2Boolean enable);
452
453 /// \brief Get the state of pass coherency checking
454 ///
455 /// \param perfData Perf collection data
456 ///
457 /// \return GX2_TRUE is enabled, GX2_FALSE if disabled
458 ///
459 /// \donotcall \threadsafe \devonly \enddonotcall
460 ///
461 GX2Boolean GX2API GX2PerfGetPassCoherEnable(GX2PerfData *perfData);
462 #else
GX2PerfInit(GX2PerfData * perfData,u32 maxTags,MEMAllocator * pAllocator)463 GX2_INLINE void GX2PerfInit(GX2PerfData *perfData, u32 maxTags, MEMAllocator *pAllocator){ return; }
GX2PerfFree(GX2PerfData * perfData)464 GX2_INLINE void GX2PerfFree(GX2PerfData *perfData){ return; }
GX2PerfSetCollectionMethod(GX2PerfData * perfData,GX2PerfCollectionMethod method)465 GX2_INLINE void GX2PerfSetCollectionMethod(GX2PerfData *perfData, GX2PerfCollectionMethod method){ return; }
GX2PerfGetCollectionMethod(GX2PerfData * perfData)466 GX2_INLINE GX2PerfCollectionMethod GX2PerfGetCollectionMethod(GX2PerfData *perfData){ return GX2_PERF_COLLECT_NONE; }
GX2PerfMetricsClear(GX2PerfData * perfData)467 GX2_INLINE void GX2PerfMetricsClear(GX2PerfData *perfData){ return; }
GX2PerfMetricEnable(GX2PerfData * perfData,GX2PerfType type,u32 id)468 GX2_INLINE GX2Boolean GX2PerfMetricEnable(GX2PerfData *perfData, GX2PerfType type, u32 id){ return GX2_TRUE; }
GX2PerfMetricIsEnabled(GX2PerfData * perfData,GX2PerfType type,u32 metricId)469 GX2_INLINE GX2Boolean GX2PerfMetricIsEnabled(GX2PerfData *perfData, GX2PerfType type, u32 metricId){ return GX2_FALSE; }
GX2PerfMetricGetEnabled(GX2PerfData * perfData,u32 index,GX2PerfType * type,u32 * metricId)470 GX2_INLINE GX2Boolean GX2PerfMetricGetEnabled(GX2PerfData *perfData, u32 index, GX2PerfType *type, u32 *metricId){ return GX2_FALSE; }
GX2PerfTagEnable(GX2PerfData * perfData,GX2PerfTag tag,GX2Boolean enable)471 GX2_INLINE void GX2PerfTagEnable(GX2PerfData *perfData, GX2PerfTag tag, GX2Boolean enable){ return; }
GX2PerfTagEnableAll(GX2PerfData * perfData)472 GX2_INLINE void GX2PerfTagEnableAll(GX2PerfData *perfData){ return; }
GX2PerfTagDisableAll(GX2PerfData * perfData)473 GX2_INLINE void GX2PerfTagDisableAll(GX2PerfData *perfData){ return; }
GX2PerfTagIsEnabled(GX2PerfData * perfData,GX2PerfTag tag)474 GX2_INLINE GX2Boolean GX2PerfTagIsEnabled(GX2PerfData *perfData, GX2PerfTag tag){ return GX2_FALSE; }
GX2PerfFrameStart(GX2PerfData * perfData)475 GX2_INLINE void GX2PerfFrameStart(GX2PerfData *perfData){ return; }
GX2PerfFrameEnd(GX2PerfData * perfData)476 GX2_INLINE void GX2PerfFrameEnd(GX2PerfData *perfData){ return; }
GX2PerfGetNumPasses(GX2PerfData * perfData)477 GX2_INLINE u32 GX2PerfGetNumPasses(GX2PerfData *perfData){ return 0; }
GX2PerfPassStart(GX2PerfData * perfData)478 GX2_INLINE void GX2PerfPassStart(GX2PerfData *perfData){ return; }
GX2PerfPassEnd(GX2PerfData * perfData)479 GX2_INLINE void GX2PerfPassEnd(GX2PerfData *perfData){ return; }
GX2PerfTagStart(GX2PerfData * perfData,GX2PerfTag tag)480 GX2_INLINE void GX2PerfTagStart(GX2PerfData *perfData, GX2PerfTag tag){ return; }
GX2PerfTagEnd(GX2PerfData * perfData,GX2PerfTag tag)481 GX2_INLINE void GX2PerfTagEnd(GX2PerfData *perfData, GX2PerfTag tag){ return; }
GX2PerfGetResultByFrame(GX2PerfData * perfData,GX2PerfType type,u32 id,GX2MetricResult * pResult)482 GX2_INLINE GX2Boolean GX2PerfGetResultByFrame(GX2PerfData *perfData, GX2PerfType type, u32 id, GX2MetricResult *pResult){ return GX2_FALSE; }
GX2PerfGetResultByTagId(GX2PerfData * perfData,GX2PerfType type,u32 id,u32 tag,u32 number,GX2MetricResult * pResult)483 GX2_INLINE GX2Boolean GX2PerfGetResultByTagId(GX2PerfData *perfData, GX2PerfType type, u32 id, u32 tag, u32 number, GX2MetricResult *pResult){ return GX2_FALSE; }
GX2PerfGetResultByTagSequence(GX2PerfData * perfData,GX2PerfType type,u32 id,u32 sequence,u32 * tag,u32 * number,u32 * depth,GX2MetricResult * pResult)484 GX2_INLINE GX2Boolean GX2PerfGetResultByTagSequence(GX2PerfData *perfData, GX2PerfType type, u32 id, u32 sequence, u32 *tag, u32 *number, u32 *depth, GX2MetricResult *pResult){ return GX2_FALSE; }
GX2PerfPrintFrameResults(GX2PerfData * perfData)485 GX2_INLINE void GX2PerfPrintFrameResults(GX2PerfData *perfData){ return; }
GX2PerfPrintTagResults(GX2PerfData * perfData,GX2PerfTag2StringFunc func)486 GX2_INLINE void GX2PerfPrintTagResults(GX2PerfData *perfData, GX2PerfTag2StringFunc func){ return; }
GX2PerfSetPassCoherEnable(GX2PerfData * perfData,GX2Boolean enable)487 GX2_INLINE void GX2PerfSetPassCoherEnable(GX2PerfData *perfData, GX2Boolean enable){ return; }
GX2PerfGetPassCoherEnable(GX2PerfData * perfData)488 GX2_INLINE GX2Boolean GX2PerfGetPassCoherEnable(GX2PerfData *perfData) { return GX2_FALSE; }
489 #endif
490 /// @}
491
492 #ifdef __cplusplus
493 }
494 #endif
495
496 #endif /// _CAFE_GX2_PERF2_H_
497