diff --git a/renderdoc/driver/d3d11/d3d11_device.cpp b/renderdoc/driver/d3d11/d3d11_device.cpp index 67ebb7472..c6ae0e19e 100644 --- a/renderdoc/driver/d3d11/d3d11_device.cpp +++ b/renderdoc/driver/d3d11/d3d11_device.cpp @@ -152,11 +152,13 @@ WrappedID3D11Device::WrappedID3D11Device(ID3D11Device *realDevice, D3D11InitPara { DXGI_ADAPTER_DESC desc = {}; pDXGIAdapter->GetDesc(&desc); + LARGE_INTEGER version = {}; + pDXGIAdapter->CheckInterfaceSupport(__uuidof(IDXGIDevice), &version); m_InitParams.AdapterDesc = desc; GPUVendor vendor = GPUVendorFromPCIVendor(desc.VendorId); - rdcstr descString = GetDriverVersion(desc); + rdcstr descString = GetDriverVersion(desc, version); RDCLOG("New D3D11 device created: %s / %s", ToStr(vendor).c_str(), descString.c_str()); diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 0486faed9..17ac4774d 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -134,12 +134,14 @@ void D3D11Replay::CreateResources(IDXGIFactory *factory) { DXGI_ADAPTER_DESC desc = {}; pDXGIAdapter->GetDesc(&desc); + LARGE_INTEGER version = {}; + pDXGIAdapter->CheckInterfaceSupport(__uuidof(IDXGIDevice), &version); RDCEraseEl(m_DriverInfo); m_DriverInfo.vendor = GPUVendorFromPCIVendor(desc.VendorId); - rdcstr descString = GetDriverVersion(desc); + rdcstr descString = GetDriverVersion(desc, version); descString.resize(RDCMIN(descString.size(), ARRAY_COUNT(m_DriverInfo.version) - 1)); memcpy(m_DriverInfo.version, descString.c_str(), descString.size()); diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index ded4cf66e..d3d9c28d5 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -743,11 +743,13 @@ WrappedID3D12Device::WrappedID3D12Device(ID3D12Device *realDevice, D3D12InitPara { DXGI_ADAPTER_DESC desc = {}; pDXGIAdapter->GetDesc(&desc); + LARGE_INTEGER version = {}; + pDXGIAdapter->CheckInterfaceSupport(__uuidof(IDXGIDevice), &version); m_InitParams.AdapterDesc = desc; GPUVendor vendor = GPUVendorFromPCIVendor(desc.VendorId); - rdcstr descString = GetDriverVersion(desc); + rdcstr descString = GetDriverVersion(desc, version); RDCLOG("New D3D12 device created: %s / %s", ToStr(vendor).c_str(), descString.c_str()); diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index c8b84d657..3184f46c4 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -132,10 +132,12 @@ void D3D12Replay::Initialise(IDXGIFactory1 *factory, D3D12DevConfiguration *conf { DXGI_ADAPTER_DESC desc = {}; pDXGIAdapter->GetDesc(&desc); + LARGE_INTEGER version = {}; + pDXGIAdapter->CheckInterfaceSupport(__uuidof(IDXGIDevice), &version); m_DriverInfo.vendor = GPUVendorFromPCIVendor(desc.VendorId); - rdcstr descString = GetDriverVersion(desc); + rdcstr descString = GetDriverVersion(desc, version); descString.resize(RDCMIN(descString.size(), ARRAY_COUNT(m_DriverInfo.version) - 1)); memcpy(m_DriverInfo.version, descString.c_str(), descString.size()); diff --git a/renderdoc/driver/dxgi/dxgi_common.cpp b/renderdoc/driver/dxgi/dxgi_common.cpp index dc10ca749..692da1c27 100644 --- a/renderdoc/driver/dxgi/dxgi_common.cpp +++ b/renderdoc/driver/dxgi/dxgi_common.cpp @@ -1833,7 +1833,7 @@ static uint32_t HexToInt(char hex) return 0; } -rdcstr GetDriverVersion(DXGI_ADAPTER_DESC &desc) +rdcstr GetDriverVersion(DXGI_ADAPTER_DESC &desc, LARGE_INTEGER adapterQueryVersion) { rdcstr device = StringFormat::Wide2UTF8(rdcwstr(desc.Description)); @@ -1864,10 +1864,6 @@ rdcstr GetDriverVersion(DXGI_ADAPTER_DESC &desc) return device; } - // if we got a version, and didn't have one yet, set it - if(driverVersion.empty()) - driverVersion = version; - rdcstr pciid = GetDeviceProperty(devs, &data, &DEVPKEY_Device_MatchingDeviceId); if(pciid.empty()) @@ -1908,6 +1904,13 @@ rdcstr GetDriverVersion(DXGI_ADAPTER_DESC &desc) idx++; } + if(driverVersion.empty()) + { + driverVersion = StringFormat::Fmt( + "%u.%u.%u.%u", adapterQueryVersion.HighPart >> 16, adapterQueryVersion.HighPart & 0xffff, + adapterQueryVersion.LowPart >> 16, adapterQueryVersion.LowPart & 0xffff); + } + SetupDiDestroyDeviceInfoList(devs); return device + " " + driverVersion; } diff --git a/renderdoc/driver/dxgi/dxgi_common.h b/renderdoc/driver/dxgi/dxgi_common.h index 886ffe286..75e628d30 100644 --- a/renderdoc/driver/dxgi/dxgi_common.h +++ b/renderdoc/driver/dxgi/dxgi_common.h @@ -74,7 +74,7 @@ void WarnUnknownGUID(const char *name, REFIID riid); struct ReplayOptions; -rdcstr GetDriverVersion(DXGI_ADAPTER_DESC &desc); +rdcstr GetDriverVersion(DXGI_ADAPTER_DESC &desc, LARGE_INTEGER adapterQueryVersion); void ChooseBestMatchingAdapter(GraphicsAPI api, IDXGIFactory *factory, const DXGI_ADAPTER_DESC &AdapterDesc, const ReplayOptions &opts, bool *useWarp, IDXGIAdapter **adapter);