Fall back to queried version directly from adapter if not found

* This is better for WARP which will not be enumerated by setupapi as a physical
  device.
This commit is contained in:
baldurk
2024-11-11 18:17:51 +00:00
parent 46893c5d6b
commit bfa9ab1687
6 changed files with 21 additions and 10 deletions
+3 -1
View File
@@ -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());
+3 -1
View File
@@ -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());
+3 -1
View File
@@ -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());
+3 -1
View File
@@ -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());
+8 -5
View File
@@ -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;
}
+1 -1
View File
@@ -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);