diff --git a/renderdoc/driver/d3d12/d3d12_common.cpp b/renderdoc/driver/d3d12/d3d12_common.cpp index 376ca56db..3dc4f1dc0 100644 --- a/renderdoc/driver/d3d12/d3d12_common.cpp +++ b/renderdoc/driver/d3d12/d3d12_common.cpp @@ -227,6 +227,10 @@ bool D3D12InitParams::IsSupportedVersion(uint64_t ver) if(ver == 0xA) return true; + // 0xB -> 0xC - Serialised D3D12 SDK version + if(ver == 0xB) + return true; + return false; } @@ -261,6 +265,15 @@ void DoSerialise(SerialiserType &ser, D3D12InitParams &el) el.VendorUAV = ~0U; el.VendorUAVSpace = ~0U; } + + if(ser.VersionAtLeast(0xC)) + { + SERIALISE_MEMBER(SDKVersion); + } + else + { + el.SDKVersion = 0; + } } INSTANTIATE_SERIALISE_TYPE(D3D12InitParams); diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index 6ef78f66d..d6b35af47 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -2508,6 +2508,13 @@ bool WrappedID3D12Device::EndFrameCapture(void *dev, void *wnd) m_InitParams.usedDXIL = m_UsedDXIL; + HMODULE D3D12Core = GetModuleHandleA("D3D12Core.dll"); + if(D3D12Core) + { + m_InitParams.SDKVersion = *(DWORD *)GetProcAddress(D3D12Core, "D3D12SDKVersion"); + FreeLibrary(D3D12Core); + } + if(m_UsedDXIL) { RDCLOG("Capture used DXIL"); diff --git a/renderdoc/driver/d3d12/d3d12_device.h b/renderdoc/driver/d3d12/d3d12_device.h index 7da6c7ad9..acdd00ee6 100644 --- a/renderdoc/driver/d3d12/d3d12_device.h +++ b/renderdoc/driver/d3d12/d3d12_device.h @@ -51,8 +51,10 @@ struct D3D12InitParams uint32_t VendorUAV = ~0U; uint32_t VendorUAVSpace = ~0U; + UINT SDKVersion = 0; + // check if a frame capture section version is supported - static const uint64_t CurrentVersion = 0xB; + static const uint64_t CurrentVersion = 0xC; static bool IsSupportedVersion(uint64_t ver); };