mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-15 07:29:17 +01:00
[dxvk] Reintroduce VkPhysicalDeviceIDProperties
We need this to get the device LUID. Wine does not fill in the LUID properties in VkPhysicalDeviceVulkan11Properties right now. Fixes DLSS not working, as well as other potential issues.
This commit is contained in:
parent
6425d2368b
commit
6c5f73ac26
@ -702,10 +702,10 @@ namespace dxvk {
|
||||
if (pLUID == nullptr)
|
||||
return D3DERR_INVALIDCALL;
|
||||
|
||||
auto& vk11 = m_adapter->devicePropertiesExt().vk11;
|
||||
auto& deviceId = m_adapter->devicePropertiesExt().coreDeviceId;
|
||||
|
||||
if (vk11.deviceLUIDValid)
|
||||
*pLUID = bit::cast<LUID>(vk11.deviceLUID);
|
||||
if (deviceId.deviceLUIDValid)
|
||||
*pLUID = bit::cast<LUID>(deviceId.deviceLUID);
|
||||
else
|
||||
*pLUID = dxvk::GetAdapterLUID(m_ordinal);
|
||||
|
||||
|
@ -244,7 +244,7 @@ namespace dxvk {
|
||||
|
||||
auto deviceProp = m_adapter->deviceProperties();
|
||||
auto memoryProp = m_adapter->memoryProperties();
|
||||
auto vk11 = m_adapter->devicePropertiesExt().vk11;
|
||||
auto deviceId = m_adapter->devicePropertiesExt().coreDeviceId;
|
||||
|
||||
// Custom Vendor / Device ID
|
||||
if (options->customVendorId >= 0)
|
||||
@ -322,8 +322,8 @@ namespace dxvk {
|
||||
pDesc->GraphicsPreemptionGranularity = DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY;
|
||||
pDesc->ComputePreemptionGranularity = DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY;
|
||||
|
||||
if (vk11.deviceLUIDValid)
|
||||
std::memcpy(&pDesc->AdapterLuid, vk11.deviceLUID, VK_LUID_SIZE);
|
||||
if (deviceId.deviceLUIDValid)
|
||||
std::memcpy(&pDesc->AdapterLuid, deviceId.deviceLUID, VK_LUID_SIZE);
|
||||
else
|
||||
pDesc->AdapterLuid = GetAdapterLUID(m_index);
|
||||
|
||||
|
@ -611,6 +611,9 @@ namespace dxvk {
|
||||
m_deviceInfo.vk13.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES;
|
||||
m_deviceInfo.vk13.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.vk13);
|
||||
|
||||
m_deviceInfo.coreDeviceId.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES;
|
||||
m_deviceInfo.coreDeviceId.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.coreDeviceId);
|
||||
|
||||
if (m_deviceExtensions.supports(VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME)) {
|
||||
m_deviceInfo.extConservativeRasterization.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT;
|
||||
m_deviceInfo.extConservativeRasterization.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.extConservativeRasterization);
|
||||
|
@ -14,6 +14,7 @@ namespace dxvk {
|
||||
*/
|
||||
struct DxvkDeviceInfo {
|
||||
VkPhysicalDeviceProperties2 core;
|
||||
VkPhysicalDeviceIDProperties coreDeviceId;
|
||||
VkPhysicalDeviceVulkan11Properties vk11;
|
||||
VkPhysicalDeviceVulkan12Properties vk12;
|
||||
VkPhysicalDeviceVulkan13Properties vk13;
|
||||
|
@ -61,9 +61,9 @@ namespace dxvk {
|
||||
|
||||
Rc<DxvkAdapter> DxvkInstance::findAdapterByLuid(const void* luid) const {
|
||||
for (const auto& adapter : m_adapters) {
|
||||
const auto& props = adapter->devicePropertiesExt().vk11;
|
||||
const auto& deviceId = adapter->devicePropertiesExt().coreDeviceId;
|
||||
|
||||
if (props.deviceLUIDValid && !std::memcmp(luid, props.deviceLUID, VK_LUID_SIZE))
|
||||
if (deviceId.deviceLUIDValid && !std::memcmp(luid, deviceId.deviceLUID, VK_LUID_SIZE))
|
||||
return adapter;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user