Skip to content

Commit 297d2a7

Browse files
committed
GPA 3.4.1 release
1 parent 7c28a0c commit 297d2a7

24 files changed

+160
-69
lines changed

README.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ Prebuilt binaries can be downloaded from the Releases page: https://github.com/G
5151

5252
## System Requirements
5353
* An AMD Radeon GPU or APU based on Graphics IP version 8 and newer.
54-
* Windows: Radeon Software Adrenaline 2019 Edition 19.7.1 or later (Driver Packaging Version 19.30 or later).
54+
* Windows: Radeon Software Adrenaline 2019 Edition 19.7.3 or later (Driver Packaging Version 19.30 or later).
5555
* Linux: Radeon Software for Linux Revision 19.20 or later (19.30 required for AMD Radeon 5700 Series GPUs).
5656
* HSA/ROCm version requires ROCm 2.0 or newer.
5757
* For use with ROCm, please make sure that the optional ROCm package "rocprofiler-dev" is installed.
5858
* Ubuntu: sudo apt install rocprofiler-dev
5959
* CentOS: sudo yum install rocprofiler-dev
60-
* Radeon GPUs or APUs based on Graphics IP version 6 and 7 are no longer supported by GPUPerfAPI. Please use an older version (([3.3](https://github.com/GPUOpen-Tools/GPA/releases/tag/v3.3))) with older hardware.
60+
* Radeon GPUs or APUs based on Graphics IP version 6 and 7 are no longer supported by GPUPerfAPI. Please use an older version ([3.3](https://github.com/GPUOpen-Tools/GPA/releases/tag/v3.3)) with older hardware.
6161
* Windows 7, 8.1, and 10.
6262
* Ubuntu (16.04 and later) and CentOS/RHEL (7 and later) distributions.
6363

@@ -110,13 +110,11 @@ build of GPUPerfAPI that also exposes the raw hardware counters, but that is a d
110110
* sudo chmod ugo+w /sys/class/drm/card0/device/power_dpm_force_performance_level
111111
* The following performance counter values may not be accurate for DirectX 11 applications running on a Radeon 5700 Series GPU. This is expected to be addressed in a future
112112
driver release:
113-
* VSVerticesIn, HSPatches, DSVerticesIn: These may incorrectly report zero values.
114113
* VALUInstCount, SALUInstCount, VALUBusy, SALUBusy for all shader stages: These values should be representative of performance, but may not be 100% accurate.
115114
* Most of the ComputeShader counters (all except the MemUnit and WriteUnit counters): These values should be representative of performance, but may not be 100% accurate.
116115
* The following performance counter values may not be accurate for OpenGL applications running on a Radeon 5700 Series GPU. This is expected to be addressed in a future
117116
driver release:
118117
* VALUInstCount, SALUInstCount, VALUBusy, SALUBusy for all shader stages: These values should be representative of performance, but may not be 100% accurate.
119118
* Most of the ComputeShader counters (all except the MemUnit and WriteUnit counters): These values should be representative of performance, but may not be 100% accurate.
120-
* MemUnit counters (in ComputeShader and GlobalMemory groups), TextureUnit counters and L0Cache counters will be incorrect.
121-
* Setting the GPU clock mode is not working correctly for Radeon 5700 Series GPUs, potentially leading to some inconsistencies in counter values from one run to the next.
122-
This is expected to be addressed in a future driver release.
119+
* On Linux, setting the GPU clock mode is not working correctly for Radeon 5700 Series GPUs, potentially leading to some inconsistencies in counter values from one run to the
120+
next. This is expected to be addressed in a future driver release.

Src/Examples/Vulkan/VkColorCube/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ if(WIN32)
3535
COMMAND CompileShaders.bat ${GPA_OUTPUT_DIR}/$<CONFIG>/
3636
BYPRODUCTS vkcolorcubeshader.vert.spv vkcolorcubeshader.frag.spv
3737
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
38-
COMMENT "Compiling Vulkan Shaders vkcolorcubeshader.vert vkcolorcubeshader.frag")
38+
COMMENT "Compiling Vulkan Shaders vkcolorcubeshader.vert vkcolorcubeshader.frag vkcolorcubewireframeshader.frag")
3939
else()
4040
add_custom_command(TARGET ${GPA_PROJECT_NAME} PRE_BUILD
4141
COMMAND ${CMAKE_CURRENT_LIST_DIR}/CompileShaders.sh ${GPA_OUTPUT_DIR}/$<CONFIG>/ ${VK_TOOLS_DIR}
4242
BYPRODUCTS vkcolorcubeshader.vert.spv vkcolorcubeshader.frag.spv
4343
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
44-
COMMENT "Compiling Vulkan Shaders vkcolorcubeshader.vert vkcolorcubeshader.frag")
44+
COMMENT "Compiling Vulkan Shaders vkcolorcubeshader.vert vkcolorcubeshader.frag vkcolorcubewireframeshader.frag")
4545
endif()
4646

4747
set_target_properties(${GPA_PROJECT_NAME} PROPERTIES FOLDER "Examples/Vulkan")

Src/Examples/Vulkan/VkColorCube/vkcolorcube.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,8 @@ AMDVulkanDemo::AMDVulkanDemo()
158158
#endif
159159
};
160160

161-
m_requiredDeviceExtensions = {VK_KHR_SWAPCHAIN_EXTENSION_NAME, AMD_GPA_REQUIRED_DEVICE_EXTENSION_NAME_LIST};
161+
m_requiredDeviceExtensions = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, AMD_GPA_REQUIRED_DEVICE_EXTENSION_NAME_LIST };
162+
m_optionalDeviceExtensions = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, AMD_GPA_REQUIRED_DEVICE_EXTENSION_NAME_LIST, AMD_GPA_OPTIONAL_DEVICE_EXTENSION_NAME_LIST };
162163
}
163164

164165
AMDVulkanDemo::~AMDVulkanDemo()
@@ -773,12 +774,21 @@ bool AMDVulkanDemo::InitializeVulkan()
773774
deviceCreateInfo.pQueueCreateInfos = &deviceQueueCreateInfo;
774775
deviceCreateInfo.enabledLayerCount = 0;
775776
deviceCreateInfo.ppEnabledLayerNames = nullptr;
776-
deviceCreateInfo.enabledExtensionCount = static_cast<uint32_t>(m_requiredDeviceExtensions.size());
777-
deviceCreateInfo.ppEnabledExtensionNames = m_requiredDeviceExtensions.data();
777+
deviceCreateInfo.enabledExtensionCount = static_cast<uint32_t>(m_optionalDeviceExtensions.size());
778+
deviceCreateInfo.ppEnabledExtensionNames = m_optionalDeviceExtensions.data();
778779
deviceCreateInfo.pEnabledFeatures = &m_vkPhysicalDeviceFeatures;
779780

780781
VkResult resultCreateDevice = vkCreateDevice(m_vkPhysicalDevice, &deviceCreateInfo, nullptr, &m_vkDevice);
781782

783+
if (resultCreateDevice == VK_ERROR_EXTENSION_NOT_PRESENT)
784+
{
785+
// try again with only required extensions
786+
deviceCreateInfo.enabledExtensionCount = static_cast<uint32_t>(m_requiredDeviceExtensions.size());
787+
deviceCreateInfo.ppEnabledExtensionNames = m_requiredDeviceExtensions.data();
788+
789+
resultCreateDevice = vkCreateDevice(m_vkPhysicalDevice, &deviceCreateInfo, nullptr, &m_vkDevice);
790+
}
791+
782792
if (resultCreateDevice != VK_SUCCESS)
783793
{
784794
std::cout << "ERROR: Failed to create device\n." << std::endl;

Src/Examples/Vulkan/VkColorCube/vkcolorcube.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ class AMDVulkanDemo
159159
/// List of device extension names that are required by this demo.
160160
std::vector<const char*> m_requiredDeviceExtensions;
161161

162+
/// List of device extension names that are optional for this demo.
163+
std::vector<const char*> m_optionalDeviceExtensions;
164+
162165
#if defined(VK_USE_PLATFORM_WIN32_KHR)
163166
/// Application windowing instance
164167
HINSTANCE m_hInstance;

Src/GPUPerfAPI-Common/GPAVersion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
// Make sure to increment GPA_FUNCTION_TABLE_MAJOR_VERSION_NUMBER anytime GPA_MAJOR_VERSION is incremented
1212
#define GPA_MAJOR_VERSION 3 ///< Macro for GPA major version
1313
#define GPA_MINOR_VERSION 4 ///< Macro for GPA minor version
14-
#define GPA_UPDATE_VERSION 0 ///< Macro for GPA update version
14+
#define GPA_UPDATE_VERSION 1 ///< Macro for GPA update version
1515

1616
/// Macro for GPA build number
1717
#define GPA_BUILD_NUMBER 0

Src/GPUPerfAPI-Common/GPUPerfAPI-VK.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,18 @@
1717
/// Define the AMD shader core properties extension name
1818
#define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties"
1919

20+
/// Define the AMD shader core properties 2 extension name
21+
#define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME2 "VK_AMD_shader_core_properties2"
22+
2023
/// Define a macro to help developers include all instance-level extensions required to support the AMD GPA Interface.
2124
#define AMD_GPA_REQUIRED_INSTANCE_EXTENSION_NAME_LIST VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
2225

2326
/// Define a macro to help developers include all device-level extensions required to support the AMD GPA Interface.
2427
#define AMD_GPA_REQUIRED_DEVICE_EXTENSION_NAME_LIST VK_AMD_GPA_INTERFACE_EXTENSION_NAME, VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME
2528

29+
/// Define a macro to help developers include optional device-level extensions to support the AMD GPA Interface.
30+
#define AMD_GPA_OPTIONAL_DEVICE_EXTENSION_NAME_LIST VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME2
31+
2632
/// The struct that should be supplied to GPA_OpenContext().
2733
/// The instance, physicalDevice, and device should be set prior to
2834
/// calling OpenContext() to reflect the Vulkan objects on which profiling

Src/GPUPerfAPI-Common/GPUPerfAPITypes.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,8 @@ typedef enum
194194
{
195195
GPA_OPENCONTEXT_DEFAULT_BIT =
196196
0, ///< Open contexts using all default options (all counters exposed, clocks are set to stable frequencies which are known to be power and thermal sustainable. The ratio between the engine and memory clock frequencies will be kept the same as much as possible)
197-
GPA_OPENCONTEXT_HIDE_PUBLIC_COUNTERS_BIT = 0x01, ///< Prevent the public counters from being exposed
197+
GPA_OPENCONTEXT_HIDE_DERIVED_COUNTERS_BIT = 0x01, ///< Prevent the derived counters from being exposed
198+
GPA_OPENCONTEXT_HIDE_PUBLIC_COUNTERS_BIT = GPA_OPENCONTEXT_HIDE_DERIVED_COUNTERS_BIT, ///< For backwards compatibility
198199
GPA_OPENCONTEXT_HIDE_SOFTWARE_COUNTERS_BIT = 0x02, ///< Prevent the software counters from being exposed
199200
GPA_OPENCONTEXT_HIDE_HARDWARE_COUNTERS_BIT = 0x04, ///< Prevent the hardware counters from being exposed
200201
GPA_OPENCONTEXT_CLOCK_MODE_NONE_BIT =

Src/GPUPerfAPI-Common/IGPAContext.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,11 @@ class IGPAContext : public IGPAInterfaceTrait
179179
/// Returns the active session for the context
180180
/// \return active session if any session is active otherwise nullptr
181181
virtual const IGPASession* GetActiveSession() const = 0;
182+
183+
/// Enable/disable the stable power state, using the stable clock mode specified when opening the context
184+
/// \param[in] useProfilingClocks true to use GPU clocks for profiling, false to use default clock mode
185+
/// \return GPA_STATUS_OK on success
186+
virtual GPA_Status SetStableClocks(bool useProfilingClocks) = 0;
182187
};
183188

184189
#endif // _I_GPA_CONTEXT_H_

Src/GPUPerfAPICL/CLGPAContext.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,8 @@ class CLGPAContext : public GPAContext
5252
/// \return the CL command queue
5353
const cl_command_queue& GetCLCommandQueue() const;
5454

55-
/// Enable/disable the stable power state, using the stable clock mode specified when opening the context
56-
/// \param[in] useProfilingClocks true to use GPU clocks for profiling, false to use default clock mode
57-
/// \return GPA_STATUS_OK on success
58-
GPA_Status SetStableClocks(bool useProfilingClocks);
55+
/// \copydoc IGPAContext::SetStableClocks()
56+
GPA_Status SetStableClocks(bool useProfilingClocks) override;
5957

6058
private:
6159
/// Parses a version number returned from clGetDeviceInfo(CL_DRIVER_VERSION)

Src/GPUPerfAPIDX11/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ set(AMD_DX_EXT_HEADERS ${AMD_DX_EXT_DIR}/AmdDxExt.h
2626
${AMD_DX_EXT_DIR}/AmdDxExtApi.h
2727
${AMD_DX_EXT_DIR}/AmdDxExtIface.h
2828
${AMD_DX_EXT_DIR}/AmdDxExtPerfProfile.h
29-
${AMD_DX_EXT_DIR}/AmdDxExtPerfProfileApi.h)
29+
${AMD_DX_EXT_DIR}/AmdDxExtPerfProfileApi.h
30+
${AMD_DX_EXT_DIR}/AmdDxExtASICInfo.h
31+
${AMD_DX_EXT_DIR}/AmdDxExtASICInfoApi.h)
3032

3133
set(HEADER_FILES ${AMD_DX_EXT_HEADERS}
3234
${GPA_SRC_COMMON}/DXGetAMDDeviceInfo.h
@@ -63,7 +65,7 @@ target_link_libraries(${GPA_PROJECT_NAME}
6365
GPUPerfAPICounterGenerator)
6466

6567
if(${GPA_ALL_OPEN_SOURCE})
66-
set(GPA_DX11_GET_DEVICE_INFO ${COMMON_DIR_LIB}/AMD/GPUPerfAPI/3_2/Bin/${AMDTPlatform}/GPUPerfAPIDXGetAMDDeviceInfo)
68+
set(GPA_DX11_GET_DEVICE_INFO ${COMMON_DIR_LIB}/AMD/GPUPerfAPI/3_4/Bin/${AMDTPlatform}/GPUPerfAPIDXGetAMDDeviceInfo)
6769
add_custom_command(TARGET ${GPA_PROJECT_NAME} POST_BUILD
6870
COMMAND ${CMAKE_COMMAND} -E copy ${GPA_DX11_GET_DEVICE_INFO}${AMDTPlatformSuffix}.dll ${CMAKE_CURRENT_LIST_DIR}/${DEPTH}/Output/$<CONFIG> VERBATIM
6971
COMMENT "Copying GPUPerfAPIDXGetDeviceInfo to output folder...")

Src/GPUPerfAPIDX11/DX11GPAContext.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,8 @@ class DX11GPAContext : public GPAContext
8080
/// \return the max event id of the specified block. Could be zero if block does not exist
8181
gpa_uint32 GetMaxEventIdCount(PE_BLOCK_ID block) const;
8282

83-
/// Enable/disable the stable power state, using the stable clock mode specified when opening the context
84-
/// \param[in] useProfilingClocks true to use GPU clocks for profiling, false to use default clock mode
85-
/// \return GPA_STATUS_OK on success
86-
GPA_Status SetStableClocks(bool useProfilingClocks);
83+
/// \copydoc IGPAContext::SetStableClocks()
84+
GPA_Status SetStableClocks(bool useProfilingClocks) override;
8785

8886
private:
8987
/// Initializes the AMD extensions

Src/GPUPerfAPIDX11/DX11GPAImplementor.cpp

Lines changed: 55 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616
#include "DXGetAMDDeviceInfo.h"
1717
#include "GPACustomHWValidationManager.h"
1818
#include "GPACommonDefs.h"
19-
20-
#include <AmdDxExtPerfProfileApi.h>
19+
#include "DX11Include.h"
2120

2221
IGPAImplementor* s_pGpaImp = DX11GPAImplementor::Instance();
2322

@@ -268,16 +267,6 @@ bool DX11GPAImplementor::GetAmdHwInfo(ID3D11Device* pD3D11Device,
268267

269268
hwInfo.SetGpuIndex(static_cast<unsigned int>(gpuIndex));
270269

271-
if (nullptr != pExtPerfProfile)
272-
{
273-
pExtPerfProfile->Release();
274-
}
275-
276-
if (nullptr != pExt)
277-
{
278-
pExt->Release();
279-
}
280-
281270
std::string strDLLName;
282271

283272
if (GPAUtil::GetCurrentModulePath(strDLLName))
@@ -361,6 +350,50 @@ bool DX11GPAImplementor::GetAmdHwInfo(ID3D11Device* pD3D11Device,
361350
hwInfo.SetTimeStampFrequency(deviceFrequency);
362351
}
363352

353+
unsigned int majorVer = 0;
354+
unsigned int minorVer = 0;
355+
unsigned int subMinorVer = 0;
356+
ADLUtil_Result adlResult = AMDTADLUtils::Instance()->GetDriverVersion(majorVer, minorVer, subMinorVer);
357+
358+
static const unsigned int MIN_MAJOR_VER = 19;
359+
static const unsigned int MIN_MINOR_VER_FOR_30 = 30;
360+
361+
if ((ADL_SUCCESS == adlResult || ADL_WARNING == adlResult))
362+
{
363+
if (majorVer >= MIN_MAJOR_VER && minorVer >= MIN_MINOR_VER_FOR_30)
364+
{
365+
if (nullptr != pExt)
366+
{
367+
IAmdDxExtASICInfo* pExtAsicInfo = reinterpret_cast<IAmdDxExtASICInfo*>(pExt->GetExtInterface(AmdDxExtASICInfoID));
368+
369+
if (nullptr != pExtAsicInfo)
370+
{
371+
AmdDxASICInfoParam infoParam = {};
372+
AmdDxASICInfo* pNewAsicInfo = new (std::nothrow) AmdDxASICInfo();
373+
374+
if (nullptr != pNewAsicInfo)
375+
{
376+
infoParam.pASICInfo = pNewAsicInfo;
377+
pExtAsicInfo->GetInfoData(&infoParam);
378+
379+
if (nullptr != infoParam.pASICInfo && gpuIndex < infoParam.pASICInfo->gpuCount)
380+
{
381+
AmdDxASICInfoHWInfo asicInfo = infoParam.pASICInfo->hwInfo[gpuIndex];
382+
hwInfo.SetNumberCUs(asicInfo.totalCU);
383+
hwInfo.SetNumberShaderEngines(asicInfo.numShaderEngines);
384+
hwInfo.SetNumberShaderArrays(asicInfo.numShaderArraysPerSE);
385+
hwInfo.SetNumberSIMDs(asicInfo.totalCU * asicInfo.numSimdsPerCU);
386+
}
387+
388+
delete pNewAsicInfo;
389+
}
390+
391+
pExtAsicInfo->Release();
392+
}
393+
}
394+
}
395+
}
396+
364397
success = true;
365398
break;
366399
}
@@ -370,6 +403,16 @@ bool DX11GPAImplementor::GetAmdHwInfo(ID3D11Device* pD3D11Device,
370403
{
371404
GPA_LogError("Unable to get the module path.");
372405
}
406+
407+
if (nullptr != pExtPerfProfile)
408+
{
409+
pExtPerfProfile->Release();
410+
}
411+
412+
if (nullptr != pExt)
413+
{
414+
pExt->Release();
415+
}
373416
}
374417
else
375418
{

Src/GPUPerfAPIDX11/DX11Include.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#include <d3d11.h>
1212
#include <d3dcommon.h>
1313
#include "GPACommonDefs.h"
14+
#include "AmdDxExtASICInfo.h"
15+
#include "AmdDxExtASICInfoApi.h"
1416
#include "AmdDxExtPerfProfileApi.h"
1517

1618
#define PE_BLOCK_ID_MAX PE_BLOCK_MAX_GFX10 /// macro for count of DX11 block id, notably we need to update this with every next generation

Src/GPUPerfAPIDX12/DX12GPAContext.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,6 @@ void DX12GPAContext::CleanUp()
229229
{
230230
std::lock_guard<std::mutex> lockContextResources(m_dx12GpaContextMutex);
231231

232-
SetStableClocks(false);
233-
234232
// Release Device
235233
if (nullptr != m_pD3D12Device)
236234
{
@@ -267,7 +265,7 @@ void DX12GPAContext::CleanUp()
267265
}
268266
}
269267

270-
void DX12GPAContext::SetStableClocks(bool useProfilingClocks)
268+
GPA_Status DX12GPAContext::SetStableClocks(bool useProfilingClocks)
271269
{
272270
if (nullptr != m_pGpaInterface)
273271
{
@@ -311,4 +309,6 @@ void DX12GPAContext::SetStableClocks(bool useProfilingClocks)
311309
m_pGpaInterface->SetClockMode(m_clockMode, nullptr);
312310
}
313311
}
312+
313+
return GPA_STATUS_OK;
314314
}

Src/GPUPerfAPIDX12/DX12GPAContext.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,17 +67,16 @@ class GPA_THREAD_SAFE_OBJECT DX12GPAContext : public GPAContext
6767
/// \return ID3D12Device pointer
6868
ID3D12Device* GetD3D12Device() const;
6969

70-
/// Destroys all the allocated resources for the context
71-
void CleanUp();
70+
/// \copydoc IGPAContext::SetStableClocks()
71+
GPA_Status SetStableClocks(bool useProfilingClocks) override;
7272

7373
private:
7474
/// Initializes the AMD Driver extension objects for the context
7575
/// \return true upon successful initialization otherwise false
7676
bool InitializeAMDExtension();
7777

78-
/// Enable/disable the stable power state, using the stable clock mode specified when opening the context
79-
/// \param[in] useProfilingClocks true to use GPU clocks for profiling, false to use default clock mode
80-
void SetStableClocks(bool useProfilingClocks);
78+
/// Destroys all the allocated resources for the context
79+
void CleanUp();
8180

8281
mutable std::mutex m_dx12GpaContextMutex; ///< Mutex for DX12 GPA Context
8382
ID3D12Device* m_pD3D12Device; ///< D3D12Device pointer

Src/GPUPerfAPIDX12/DX12GPAImplementor.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,12 @@ bool DX12GPAImplementor::CloseAPIContext(GPADeviceIdentifier pDeviceIdentifier,
166166
if (nullptr != pContext)
167167
{
168168
DX12GPAContext* pDx12GpaContext = reinterpret_cast<DX12GPAContext*>(pContext);
169-
pDx12GpaContext->CleanUp();
169+
/*
170+
* Deleting the context resources at this point is causing
171+
* some issue in driver as some of the resources are still in use on factory object
172+
* We will defer the release of driver extension resources at time of destroying the GPA
173+
*/
174+
pDx12GpaContext->SetStableClocks(false);
170175
m_dx12GpaContextList.push_back(pDx12GpaContext);
171176
}
172177

0 commit comments

Comments
 (0)