@@ -175,9 +175,7 @@ bool AMDCounters::Init(ApiType apiType, void *pContext)
175
175
return false ;
176
176
}
177
177
178
- status = m_pGPUPerfAPI->GpaOpenContext (
179
- pContext, kGpaOpenContextHideSoftwareCountersBit | kGpaOpenContextClockModeNoneBit ,
180
- &m_gpaContextId);
178
+ status = m_pGPUPerfAPI->GpaOpenContext (pContext, kGpaOpenContextClockModeNoneBit , &m_gpaContextId);
181
179
if (AMD_FAILED (status))
182
180
{
183
181
GPA_WARNING (" Open context for counters failed" , status);
@@ -229,7 +227,17 @@ std::map<uint32_t, CounterDescription> AMDCounters::EnumerateCounters()
229
227
std::map<uint32_t , CounterDescription> counters;
230
228
231
229
GpaUInt32 num;
232
- GpaStatus status = m_pGPUPerfAPI->GpaGetNumCounters (m_gpaContextId, &num);
230
+ GpaSessionId sessionId;
231
+ GpaStatus status = m_pGPUPerfAPI->GpaCreateSession (
232
+ m_gpaContextId, kGpaSessionSampleTypeDiscreteCounter , &sessionId);
233
+
234
+ if (AMD_FAILED (status))
235
+ {
236
+ GPA_ERROR (" Unable to create GPA session for counter interrogation." , status);
237
+ return counters;
238
+ }
239
+
240
+ status = m_pGPUPerfAPI->GpaGetNumCounters (sessionId, &num);
233
241
if (AMD_FAILED (status))
234
242
{
235
243
GPA_ERROR (" Get number of counters" , status);
@@ -240,7 +248,7 @@ std::map<uint32_t, CounterDescription> AMDCounters::EnumerateCounters()
240
248
{
241
249
GpaUsageType usageType;
242
250
243
- status = m_pGPUPerfAPI->GpaGetCounterUsageType (m_gpaContextId , i, &usageType);
251
+ status = m_pGPUPerfAPI->GpaGetCounterUsageType (sessionId , i, &usageType);
244
252
if (AMD_FAILED (status))
245
253
{
246
254
GPA_ERROR (" Get counter usage type." , status);
@@ -253,14 +261,20 @@ std::map<uint32_t, CounterDescription> AMDCounters::EnumerateCounters()
253
261
continue ;
254
262
}
255
263
256
- CounterDescription desc = InternalGetCounterDescription (i);
264
+ CounterDescription desc = InternalGetCounterDescription (sessionId, i);
257
265
258
266
desc.counter = MakeAMDCounter (i);
259
267
counters[i] = desc;
260
268
261
269
m_PublicToInternalCounter[desc.counter ] = i;
262
270
}
263
271
272
+ status = m_pGPUPerfAPI->GpaDeleteSession (sessionId);
273
+ if (AMD_FAILED (status))
274
+ {
275
+ GPA_ERROR (" Unable to close the GPA session." , status);
276
+ }
277
+
264
278
return counters;
265
279
}
266
280
@@ -280,27 +294,28 @@ CounterDescription AMDCounters::GetCounterDescription(GPUCounter counter)
280
294
return m_Counters[m_PublicToInternalCounter[counter]];
281
295
}
282
296
283
- CounterDescription AMDCounters::InternalGetCounterDescription (uint32_t internalIndex)
297
+ CounterDescription AMDCounters::InternalGetCounterDescription (GpaSessionId sessionId,
298
+ uint32_t internalIndex)
284
299
{
285
300
CounterDescription desc = {};
286
301
const char *tmp = NULL ;
287
- GpaStatus status = m_pGPUPerfAPI->GpaGetCounterName (m_gpaContextId , internalIndex, &tmp);
302
+ GpaStatus status = m_pGPUPerfAPI->GpaGetCounterName (sessionId , internalIndex, &tmp);
288
303
if (AMD_FAILED (status))
289
304
{
290
305
GPA_ERROR (" Get counter name." , status);
291
306
return desc;
292
307
}
293
308
294
309
desc.name = tmp;
295
- status = m_pGPUPerfAPI->GpaGetCounterDescription (m_gpaContextId , internalIndex, &tmp);
310
+ status = m_pGPUPerfAPI->GpaGetCounterDescription (sessionId , internalIndex, &tmp);
296
311
if (AMD_FAILED (status))
297
312
{
298
313
GPA_ERROR (" Get counter description." , status);
299
314
return desc;
300
315
}
301
316
302
317
desc.description = tmp;
303
- status = m_pGPUPerfAPI->GpaGetCounterGroup (m_gpaContextId , internalIndex, &tmp);
318
+ status = m_pGPUPerfAPI->GpaGetCounterGroup (sessionId , internalIndex, &tmp);
304
319
if (AMD_FAILED (status))
305
320
{
306
321
GPA_ERROR (" Get counter category." , status);
@@ -310,7 +325,7 @@ CounterDescription AMDCounters::InternalGetCounterDescription(uint32_t internalI
310
325
desc.category = tmp;
311
326
312
327
GpaUsageType usageType;
313
- status = m_pGPUPerfAPI->GpaGetCounterUsageType (m_gpaContextId , internalIndex, &usageType);
328
+ status = m_pGPUPerfAPI->GpaGetCounterUsageType (sessionId , internalIndex, &usageType);
314
329
if (AMD_FAILED (status))
315
330
{
316
331
GPA_ERROR (" Get counter usage type." , status);
@@ -345,7 +360,7 @@ CounterDescription AMDCounters::InternalGetCounterDescription(uint32_t internalI
345
360
}
346
361
347
362
GpaDataType type;
348
- status = m_pGPUPerfAPI->GpaGetCounterDataType (m_gpaContextId , internalIndex, &type);
363
+ status = m_pGPUPerfAPI->GpaGetCounterDataType (sessionId , internalIndex, &type);
349
364
if (AMD_FAILED (status))
350
365
{
351
366
GPA_ERROR (" Get counter data type." , status);
@@ -367,7 +382,7 @@ CounterDescription AMDCounters::InternalGetCounterDescription(uint32_t internalI
367
382
}
368
383
369
384
GpaUuid gpa_uuid;
370
- status = m_pGPUPerfAPI->GpaGetCounterUuid (m_gpaContextId , internalIndex, &gpa_uuid);
385
+ status = m_pGPUPerfAPI->GpaGetCounterUuid (sessionId , internalIndex, &gpa_uuid);
371
386
if (AMD_FAILED (status))
372
387
{
373
388
GPA_ERROR (" Get counter UUID." , status);
@@ -419,9 +434,8 @@ bool AMDCounters::BeginMeasurementMode(ApiType apiType, void *pContext)
419
434
RDCASSERT (pContext);
420
435
RDCASSERT (!m_gpaContextId);
421
436
422
- GpaStatus status = m_pGPUPerfAPI->GpaOpenContext (
423
- pContext, kGpaOpenContextHideSoftwareCountersBit | kGpaOpenContextClockModePeakBit ,
424
- &m_gpaContextId);
437
+ GpaStatus status =
438
+ m_pGPUPerfAPI->GpaOpenContext (pContext, kGpaOpenContextClockModePeakBit , &m_gpaContextId);
425
439
if (AMD_FAILED (status))
426
440
{
427
441
GPA_WARNING (" Creating context for analysis failed" , status);
@@ -592,7 +606,7 @@ rdcarray<CounterResult> AMDCounters::GetCounterData(uint32_t sessionID, uint32_t
592
606
const uint32_t internalIndex = m_PublicToInternalCounter[counters[c]];
593
607
594
608
GpaUsageType usageType;
595
- status = m_pGPUPerfAPI->GpaGetCounterUsageType (m_gpaContextId , internalIndex, &usageType);
609
+ status = m_pGPUPerfAPI->GpaGetCounterUsageType (gpaSessionId , internalIndex, &usageType);
596
610
597
611
if (AMD_FAILED (status))
598
612
{
0 commit comments