From 131af0d677d9d4dbbaa6495d052ac279d22bdbcb Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 14 Jul 2022 20:24:33 +0200 Subject: [PATCH] [dxvk] Replace VK_KHR_driver_properties with core feature --- src/d3d9/d3d9_options.cpp | 4 +--- src/dxbc/dxbc_options.cpp | 6 +++--- src/dxso/dxso_options.cpp | 2 +- src/dxvk/dxvk_adapter.cpp | 15 +++------------ src/dxvk/dxvk_adapter.h | 5 +---- src/dxvk/dxvk_device.cpp | 10 +++++----- src/dxvk/dxvk_device_info.h | 1 - src/dxvk/dxvk_extensions.h | 1 - src/dxvk/dxvk_memory.cpp | 2 +- 9 files changed, 15 insertions(+), 31 deletions(-) diff --git a/src/d3d9/d3d9_options.cpp b/src/d3d9/d3d9_options.cpp index 29d2c60a6..e038bf215 100644 --- a/src/d3d9/d3d9_options.cpp +++ b/src/d3d9/d3d9_options.cpp @@ -78,7 +78,6 @@ namespace dxvk { // If we are not Nvidia, enable general hazards. this->generalHazards = adapter != nullptr && !adapter->matchesDriver( - DxvkGpuVendor::Nvidia, VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, 0, 0); applyTristate(this->generalHazards, config.getOption("d3d9.generalHazards", Tristate::Auto)); @@ -92,8 +91,7 @@ namespace dxvk { d3d9FloatEmulation = D3D9FloatEmulation::Enabled; } else { bool hasMulz = adapter != nullptr - && adapter->matchesDriver(DxvkGpuVendor::Amd, - VK_DRIVER_ID_MESA_RADV, + && adapter->matchesDriver(VK_DRIVER_ID_MESA_RADV, VK_MAKE_VERSION(21, 99, 99), 0); d3d9FloatEmulation = hasMulz ? D3D9FloatEmulation::Strict : D3D9FloatEmulation::Enabled; diff --git a/src/dxbc/dxbc_options.cpp b/src/dxbc/dxbc_options.cpp index 1bf7e4639..17b239775 100644 --- a/src/dxbc/dxbc_options.cpp +++ b/src/dxbc/dxbc_options.cpp @@ -29,7 +29,7 @@ namespace dxvk { && (devInfo.vk11.subgroupSupportedStages & VK_SHADER_STAGE_FRAGMENT_BIT) && (devInfo.vk11.subgroupSupportedOperations & VK_SUBGROUP_FEATURE_BALLOT_BIT); useSdivForBufferIndex - = adapter->matchesDriver(DxvkGpuVendor::Nvidia, VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, 0, 0); + = adapter->matchesDriver(VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, 0, 0); switch (device->config().useRawSsbo) { case Tristate::Auto: minSsboAlignment = devInfo.core.properties.limits.minStorageBufferOffsetAlignment; break; @@ -44,7 +44,7 @@ namespace dxvk { disableMsaa = options.disableMsaa; // Disable subgroup early discard on Nvidia because it may hurt performance - if (adapter->matchesDriver(DxvkGpuVendor::Nvidia, VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, 0, 0)) + if (adapter->matchesDriver(VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, 0, 0)) useSubgroupOpsForEarlyDiscard = false; // Figure out float control flags to match D3D11 rules @@ -63,7 +63,7 @@ namespace dxvk { } if (!devInfo.vk12.shaderSignedZeroInfNanPreserveFloat32 - || adapter->matchesDriver(DxvkGpuVendor::Amd, VK_DRIVER_ID_MESA_RADV_KHR, 0, VK_MAKE_VERSION(20, 3, 0))) + || adapter->matchesDriver(VK_DRIVER_ID_MESA_RADV_KHR, 0, VK_MAKE_VERSION(20, 3, 0))) enableRtOutputNanFixup = true; } diff --git a/src/dxso/dxso_options.cpp b/src/dxso/dxso_options.cpp index e7c94e589..71e47613e 100644 --- a/src/dxso/dxso_options.cpp +++ b/src/dxso/dxso_options.cpp @@ -23,7 +23,7 @@ namespace dxvk { && (devInfo.vk11.subgroupSupportedOperations & VK_SUBGROUP_FEATURE_BALLOT_BIT); // Disable early discard on Nvidia because it may hurt performance - if (adapter->matchesDriver(DxvkGpuVendor::Nvidia, VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, 0, 0)) + if (adapter->matchesDriver(VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, 0, 0)) useSubgroupOpsForEarlyDiscard = false; // Apply shader-related options diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index c9027f18b..e66d5c9b3 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -283,7 +283,7 @@ namespace dxvk { DxvkDeviceFeatures enabledFeatures) { DxvkDeviceExtensions devExtensions; - std::array devExtensionList = {{ + std::array devExtensionList = {{ &devExtensions.amdMemoryOverallocationBehaviour, &devExtensions.amdShaderFragmentMask, &devExtensions.ext4444Formats, @@ -303,7 +303,6 @@ namespace dxvk { &devExtensions.extShaderStencilExport, &devExtensions.extTransformFeedback, &devExtensions.extVertexAttributeDivisor, - &devExtensions.khrDriverProperties, &devExtensions.khrDynamicRendering, &devExtensions.khrExternalMemoryWin32, &devExtensions.khrPipelineLibrary, @@ -546,13 +545,10 @@ namespace dxvk { bool DxvkAdapter::matchesDriver( - DxvkGpuVendor vendor, VkDriverIdKHR driver, uint32_t minVer, uint32_t maxVer) const { - bool driverMatches = m_deviceInfo.khrDeviceDriverProperties.driverID - ? driver == m_deviceInfo.khrDeviceDriverProperties.driverID - : vendor == DxvkGpuVendor(m_deviceInfo.core.properties.vendorID); + bool driverMatches = driver == m_deviceInfo.vk12.driverID; if (minVer) driverMatches &= m_deviceInfo.core.properties.driverVersion >= minVer; if (maxVer) driverMatches &= m_deviceInfo.core.properties.driverVersion < maxVer; @@ -659,16 +655,11 @@ namespace dxvk { m_deviceInfo.extVertexAttributeDivisor.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.extVertexAttributeDivisor); } - if (m_deviceExtensions.supports(VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME)) { - m_deviceInfo.khrDeviceDriverProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR; - m_deviceInfo.khrDeviceDriverProperties.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.khrDeviceDriverProperties); - } - // Query full device properties for all enabled extensions m_vki->vkGetPhysicalDeviceProperties2(m_handle, &m_deviceInfo.core); // Some drivers reports the driver version in a slightly different format - switch (m_deviceInfo.khrDeviceDriverProperties.driverID) { + switch (m_deviceInfo.vk12.driverID) { case VK_DRIVER_ID_NVIDIA_PROPRIETARY: m_deviceInfo.core.properties.driverVersion = VK_MAKE_VERSION( (m_deviceInfo.core.properties.driverVersion >> 22) & 0x3ff, diff --git a/src/dxvk/dxvk_adapter.h b/src/dxvk/dxvk_adapter.h index f2fb1f0af..42af9d153 100644 --- a/src/dxvk/dxvk_adapter.h +++ b/src/dxvk/dxvk_adapter.h @@ -226,15 +226,12 @@ namespace dxvk { /** * \brief Tests if the driver matches certain criteria * - * \param [in] vendor GPU vendor - * \param [in] driver Driver. Ignored when the - * driver properties extension is not supported. + * \param [in] driver Driver ID * \param [in] minVer Match versions starting with this one * \param [in] maxVer Match versions lower than this one * \returns \c True if the driver matches these criteria */ bool matchesDriver( - DxvkGpuVendor vendor, VkDriverIdKHR driver, uint32_t minVer, uint32_t maxVer) const; diff --git a/src/dxvk/dxvk_device.cpp b/src/dxvk/dxvk_device.cpp index 979e1623a..2bae86395 100644 --- a/src/dxvk/dxvk_device.cpp +++ b/src/dxvk/dxvk_device.cpp @@ -271,12 +271,12 @@ namespace dxvk { DxvkDevicePerfHints DxvkDevice::getPerfHints() { DxvkDevicePerfHints hints; hints.preferFbDepthStencilCopy = m_extensions.extShaderStencilExport - && (m_adapter->matchesDriver(DxvkGpuVendor::Amd, VK_DRIVER_ID_MESA_RADV_KHR, 0, 0) - || m_adapter->matchesDriver(DxvkGpuVendor::Amd, VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR, 0, 0) - || m_adapter->matchesDriver(DxvkGpuVendor::Amd, VK_DRIVER_ID_AMD_PROPRIETARY_KHR, 0, 0)); + && (m_adapter->matchesDriver(VK_DRIVER_ID_MESA_RADV_KHR, 0, 0) + || m_adapter->matchesDriver(VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR, 0, 0) + || m_adapter->matchesDriver(VK_DRIVER_ID_AMD_PROPRIETARY_KHR, 0, 0)); hints.preferFbResolve = m_extensions.amdShaderFragmentMask - && (m_adapter->matchesDriver(DxvkGpuVendor::Amd, VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR, 0, 0) - || m_adapter->matchesDriver(DxvkGpuVendor::Amd, VK_DRIVER_ID_AMD_PROPRIETARY_KHR, 0, 0)); + && (m_adapter->matchesDriver(VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR, 0, 0) + || m_adapter->matchesDriver(VK_DRIVER_ID_AMD_PROPRIETARY_KHR, 0, 0)); return hints; } diff --git a/src/dxvk/dxvk_device_info.h b/src/dxvk/dxvk_device_info.h index fad5ed454..68f558641 100644 --- a/src/dxvk/dxvk_device_info.h +++ b/src/dxvk/dxvk_device_info.h @@ -22,7 +22,6 @@ namespace dxvk { VkPhysicalDeviceRobustness2PropertiesEXT extRobustness2; VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback; VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor; - VkPhysicalDeviceDriverPropertiesKHR khrDeviceDriverProperties; }; diff --git a/src/dxvk/dxvk_extensions.h b/src/dxvk/dxvk_extensions.h index cc90e9b78..f88a8998a 100644 --- a/src/dxvk/dxvk_extensions.h +++ b/src/dxvk/dxvk_extensions.h @@ -295,7 +295,6 @@ namespace dxvk { DxvkExt extShaderStencilExport = { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extTransformFeedback = { VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extVertexAttributeDivisor = { VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME, DxvkExtMode::Optional }; - DxvkExt khrDriverProperties = { VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrDynamicRendering = { VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, DxvkExtMode::Required }; DxvkExt khrExternalMemoryWin32 = { VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrPipelineLibrary = { VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME, DxvkExtMode::Optional }; diff --git a/src/dxvk/dxvk_memory.cpp b/src/dxvk/dxvk_memory.cpp index a33772c70..fdbb0d4c7 100644 --- a/src/dxvk/dxvk_memory.cpp +++ b/src/dxvk/dxvk_memory.cpp @@ -217,7 +217,7 @@ namespace dxvk { /* Work around an issue on Nvidia drivers where using the entire * device_local | host_visible heap can cause crashes or slowdowns */ if (m_device->properties().core.properties.vendorID == uint16_t(DxvkGpuVendor::Nvidia)) { - bool shrinkNvidiaHvvHeap = device->adapter()->matchesDriver(DxvkGpuVendor::Nvidia, + bool shrinkNvidiaHvvHeap = device->adapter()->matchesDriver( VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, 0, VK_MAKE_VERSION(465, 0, 0)); applyTristate(shrinkNvidiaHvvHeap, device->config().shrinkNvidiaHvvHeap);