From c3ca732ab9d49d710922ce0243e7bd7b404415d1 Mon Sep 17 00:00:00 2001 From: Volkan Ilbeyli Date: Tue, 6 Apr 2021 11:58:29 -0400 Subject: [PATCH] Fix a crash & a replay issue when AMD AGS DX12 CreateDevice() is called --- renderdoc/driver/d3d12/d3d12_device.cpp | 6 ++++++ renderdoc/driver/ihv/amd/ags_wrapper.cpp | 2 +- renderdoc/driver/ihv/amd/amd_hooks.cpp | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index 452be68ff..933c822d3 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -1110,6 +1110,12 @@ HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject) *ppvObject = (INVAPID3DDevice *)&m_WrappedNVAPI; return S_OK; } + else if(riid == __uuidof(IAGSD3DDevice)) + { + // don't addref, this is an internal interface so we just don't addref at all + *ppvObject = (IAGSD3DDevice *)&m_WrappedAGS; + return S_OK; + } else if(riid == __uuidof(ID3D12DebugDevice)) { // we queryinterface for this at startup, so if it's present we can diff --git a/renderdoc/driver/ihv/amd/ags_wrapper.cpp b/renderdoc/driver/ihv/amd/ags_wrapper.cpp index 93d5c029f..ecd325b0e 100644 --- a/renderdoc/driver/ihv/amd/ags_wrapper.cpp +++ b/renderdoc/driver/ihv/amd/ags_wrapper.cpp @@ -192,7 +192,7 @@ public: // this doesn't catch the case where some intrinsics are used on replay that are newer. We don't // store that fine-grained information about which intrinsics are used. if(device12) - return extensionsSupported11.intrinsics16; + return extensionsSupported12.intrinsics16; else if(device11) return extensionsSupported11.intrinsics16; else diff --git a/renderdoc/driver/ihv/amd/amd_hooks.cpp b/renderdoc/driver/ihv/amd/amd_hooks.cpp index b3b0febc0..d07159eb1 100644 --- a/renderdoc/driver/ihv/amd/amd_hooks.cpp +++ b/renderdoc/driver/ihv/amd/amd_hooks.cpp @@ -317,6 +317,9 @@ private: // de-refcount our device. returnedParams->pDevice->AddRef(); + if(ppDevice) + *ppDevice = returnedParams->pDevice; + return S_OK; }, creationParams->pAdapter, creationParams->FeatureLevel, __uuidof(ID3D12Device),