Skip to content

Commit 61140c3

Browse files
committed
Updates for AMD GPA 4.0 integration
* Update AMD counter integration headers with GPA 4.0, and its License file. * Add changes to amd_counters[.h/.cpp] to accommodate GPA 4.0 backward incompatible changes.
1 parent cd2bafd commit 61140c3

12 files changed

+907
-435
lines changed

renderdoc/driver/ihv/amd/amd_counters.cpp

+31-17
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,7 @@ bool AMDCounters::Init(ApiType apiType, void *pContext)
175175
return false;
176176
}
177177

178-
status = m_pGPUPerfAPI->GpaOpenContext(
179-
pContext, kGpaOpenContextHideSoftwareCountersBit | kGpaOpenContextClockModeNoneBit,
180-
&m_gpaContextId);
178+
status = m_pGPUPerfAPI->GpaOpenContext(pContext, kGpaOpenContextClockModeNoneBit, &m_gpaContextId);
181179
if(AMD_FAILED(status))
182180
{
183181
GPA_WARNING("Open context for counters failed", status);
@@ -229,7 +227,17 @@ std::map<uint32_t, CounterDescription> AMDCounters::EnumerateCounters()
229227
std::map<uint32_t, CounterDescription> counters;
230228

231229
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);
233241
if(AMD_FAILED(status))
234242
{
235243
GPA_ERROR("Get number of counters", status);
@@ -240,7 +248,7 @@ std::map<uint32_t, CounterDescription> AMDCounters::EnumerateCounters()
240248
{
241249
GpaUsageType usageType;
242250

243-
status = m_pGPUPerfAPI->GpaGetCounterUsageType(m_gpaContextId, i, &usageType);
251+
status = m_pGPUPerfAPI->GpaGetCounterUsageType(sessionId, i, &usageType);
244252
if(AMD_FAILED(status))
245253
{
246254
GPA_ERROR("Get counter usage type.", status);
@@ -253,14 +261,20 @@ std::map<uint32_t, CounterDescription> AMDCounters::EnumerateCounters()
253261
continue;
254262
}
255263

256-
CounterDescription desc = InternalGetCounterDescription(i);
264+
CounterDescription desc = InternalGetCounterDescription(sessionId, i);
257265

258266
desc.counter = MakeAMDCounter(i);
259267
counters[i] = desc;
260268

261269
m_PublicToInternalCounter[desc.counter] = i;
262270
}
263271

272+
status = m_pGPUPerfAPI->GpaDeleteSession(sessionId);
273+
if(AMD_FAILED(status))
274+
{
275+
GPA_ERROR("Unable to close the GPA session.", status);
276+
}
277+
264278
return counters;
265279
}
266280

@@ -280,27 +294,28 @@ CounterDescription AMDCounters::GetCounterDescription(GPUCounter counter)
280294
return m_Counters[m_PublicToInternalCounter[counter]];
281295
}
282296

283-
CounterDescription AMDCounters::InternalGetCounterDescription(uint32_t internalIndex)
297+
CounterDescription AMDCounters::InternalGetCounterDescription(GpaSessionId sessionId,
298+
uint32_t internalIndex)
284299
{
285300
CounterDescription desc = {};
286301
const char *tmp = NULL;
287-
GpaStatus status = m_pGPUPerfAPI->GpaGetCounterName(m_gpaContextId, internalIndex, &tmp);
302+
GpaStatus status = m_pGPUPerfAPI->GpaGetCounterName(sessionId, internalIndex, &tmp);
288303
if(AMD_FAILED(status))
289304
{
290305
GPA_ERROR("Get counter name.", status);
291306
return desc;
292307
}
293308

294309
desc.name = tmp;
295-
status = m_pGPUPerfAPI->GpaGetCounterDescription(m_gpaContextId, internalIndex, &tmp);
310+
status = m_pGPUPerfAPI->GpaGetCounterDescription(sessionId, internalIndex, &tmp);
296311
if(AMD_FAILED(status))
297312
{
298313
GPA_ERROR("Get counter description.", status);
299314
return desc;
300315
}
301316

302317
desc.description = tmp;
303-
status = m_pGPUPerfAPI->GpaGetCounterGroup(m_gpaContextId, internalIndex, &tmp);
318+
status = m_pGPUPerfAPI->GpaGetCounterGroup(sessionId, internalIndex, &tmp);
304319
if(AMD_FAILED(status))
305320
{
306321
GPA_ERROR("Get counter category.", status);
@@ -310,7 +325,7 @@ CounterDescription AMDCounters::InternalGetCounterDescription(uint32_t internalI
310325
desc.category = tmp;
311326

312327
GpaUsageType usageType;
313-
status = m_pGPUPerfAPI->GpaGetCounterUsageType(m_gpaContextId, internalIndex, &usageType);
328+
status = m_pGPUPerfAPI->GpaGetCounterUsageType(sessionId, internalIndex, &usageType);
314329
if(AMD_FAILED(status))
315330
{
316331
GPA_ERROR("Get counter usage type.", status);
@@ -345,7 +360,7 @@ CounterDescription AMDCounters::InternalGetCounterDescription(uint32_t internalI
345360
}
346361

347362
GpaDataType type;
348-
status = m_pGPUPerfAPI->GpaGetCounterDataType(m_gpaContextId, internalIndex, &type);
363+
status = m_pGPUPerfAPI->GpaGetCounterDataType(sessionId, internalIndex, &type);
349364
if(AMD_FAILED(status))
350365
{
351366
GPA_ERROR("Get counter data type.", status);
@@ -367,7 +382,7 @@ CounterDescription AMDCounters::InternalGetCounterDescription(uint32_t internalI
367382
}
368383

369384
GpaUuid gpa_uuid;
370-
status = m_pGPUPerfAPI->GpaGetCounterUuid(m_gpaContextId, internalIndex, &gpa_uuid);
385+
status = m_pGPUPerfAPI->GpaGetCounterUuid(sessionId, internalIndex, &gpa_uuid);
371386
if(AMD_FAILED(status))
372387
{
373388
GPA_ERROR("Get counter UUID.", status);
@@ -419,9 +434,8 @@ bool AMDCounters::BeginMeasurementMode(ApiType apiType, void *pContext)
419434
RDCASSERT(pContext);
420435
RDCASSERT(!m_gpaContextId);
421436

422-
GpaStatus status = m_pGPUPerfAPI->GpaOpenContext(
423-
pContext, kGpaOpenContextHideSoftwareCountersBit | kGpaOpenContextClockModePeakBit,
424-
&m_gpaContextId);
437+
GpaStatus status =
438+
m_pGPUPerfAPI->GpaOpenContext(pContext, kGpaOpenContextClockModePeakBit, &m_gpaContextId);
425439
if(AMD_FAILED(status))
426440
{
427441
GPA_WARNING("Creating context for analysis failed", status);
@@ -592,7 +606,7 @@ rdcarray<CounterResult> AMDCounters::GetCounterData(uint32_t sessionID, uint32_t
592606
const uint32_t internalIndex = m_PublicToInternalCounter[counters[c]];
593607

594608
GpaUsageType usageType;
595-
status = m_pGPUPerfAPI->GpaGetCounterUsageType(m_gpaContextId, internalIndex, &usageType);
609+
status = m_pGPUPerfAPI->GpaGetCounterUsageType(gpaSessionId, internalIndex, &usageType);
596610

597611
if(AMD_FAILED(status))
598612
{

renderdoc/driver/ihv/amd/amd_counters.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ class AMDCounters
108108
void InitializeCmdInfo();
109109
void DeInitializeCmdInfo();
110110
void DeleteSession(uint32_t sessionId);
111-
CounterDescription InternalGetCounterDescription(uint32_t internalIndex);
111+
CounterDescription InternalGetCounterDescription(GpaSessionId sessionId, uint32_t internalIndex);
112112

113113
std::map<uint32_t, CounterDescription> EnumerateCounters();
114114
std::map<uint32_t, CounterDescription> m_Counters;

0 commit comments

Comments
 (0)