1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-14 22:29:15 +01:00

[dxvk] Replace VK_KHR_driver_properties with core feature

This commit is contained in:
Philip Rebohle 2022-07-14 20:24:33 +02:00
parent 78c5ef88bc
commit 131af0d677
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
9 changed files with 15 additions and 31 deletions

View File

@ -78,7 +78,6 @@ namespace dxvk {
// If we are not Nvidia, enable general hazards. // If we are not Nvidia, enable general hazards.
this->generalHazards = adapter != nullptr this->generalHazards = adapter != nullptr
&& !adapter->matchesDriver( && !adapter->matchesDriver(
DxvkGpuVendor::Nvidia,
VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR,
0, 0); 0, 0);
applyTristate(this->generalHazards, config.getOption<Tristate>("d3d9.generalHazards", Tristate::Auto)); applyTristate(this->generalHazards, config.getOption<Tristate>("d3d9.generalHazards", Tristate::Auto));
@ -92,8 +91,7 @@ namespace dxvk {
d3d9FloatEmulation = D3D9FloatEmulation::Enabled; d3d9FloatEmulation = D3D9FloatEmulation::Enabled;
} else { } else {
bool hasMulz = adapter != nullptr bool hasMulz = adapter != nullptr
&& adapter->matchesDriver(DxvkGpuVendor::Amd, && adapter->matchesDriver(VK_DRIVER_ID_MESA_RADV,
VK_DRIVER_ID_MESA_RADV,
VK_MAKE_VERSION(21, 99, 99), VK_MAKE_VERSION(21, 99, 99),
0); 0);
d3d9FloatEmulation = hasMulz ? D3D9FloatEmulation::Strict : D3D9FloatEmulation::Enabled; d3d9FloatEmulation = hasMulz ? D3D9FloatEmulation::Strict : D3D9FloatEmulation::Enabled;

View File

@ -29,7 +29,7 @@ namespace dxvk {
&& (devInfo.vk11.subgroupSupportedStages & VK_SHADER_STAGE_FRAGMENT_BIT) && (devInfo.vk11.subgroupSupportedStages & VK_SHADER_STAGE_FRAGMENT_BIT)
&& (devInfo.vk11.subgroupSupportedOperations & VK_SUBGROUP_FEATURE_BALLOT_BIT); && (devInfo.vk11.subgroupSupportedOperations & VK_SUBGROUP_FEATURE_BALLOT_BIT);
useSdivForBufferIndex 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) { switch (device->config().useRawSsbo) {
case Tristate::Auto: minSsboAlignment = devInfo.core.properties.limits.minStorageBufferOffsetAlignment; break; case Tristate::Auto: minSsboAlignment = devInfo.core.properties.limits.minStorageBufferOffsetAlignment; break;
@ -44,7 +44,7 @@ namespace dxvk {
disableMsaa = options.disableMsaa; disableMsaa = options.disableMsaa;
// Disable subgroup early discard on Nvidia because it may hurt performance // 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; useSubgroupOpsForEarlyDiscard = false;
// Figure out float control flags to match D3D11 rules // Figure out float control flags to match D3D11 rules
@ -63,7 +63,7 @@ namespace dxvk {
} }
if (!devInfo.vk12.shaderSignedZeroInfNanPreserveFloat32 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; enableRtOutputNanFixup = true;
} }

View File

@ -23,7 +23,7 @@ namespace dxvk {
&& (devInfo.vk11.subgroupSupportedOperations & VK_SUBGROUP_FEATURE_BALLOT_BIT); && (devInfo.vk11.subgroupSupportedOperations & VK_SUBGROUP_FEATURE_BALLOT_BIT);
// Disable early discard on Nvidia because it may hurt performance // 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; useSubgroupOpsForEarlyDiscard = false;
// Apply shader-related options // Apply shader-related options

View File

@ -283,7 +283,7 @@ namespace dxvk {
DxvkDeviceFeatures enabledFeatures) { DxvkDeviceFeatures enabledFeatures) {
DxvkDeviceExtensions devExtensions; DxvkDeviceExtensions devExtensions;
std::array<DxvkExt*, 26> devExtensionList = {{ std::array<DxvkExt*, 25> devExtensionList = {{
&devExtensions.amdMemoryOverallocationBehaviour, &devExtensions.amdMemoryOverallocationBehaviour,
&devExtensions.amdShaderFragmentMask, &devExtensions.amdShaderFragmentMask,
&devExtensions.ext4444Formats, &devExtensions.ext4444Formats,
@ -303,7 +303,6 @@ namespace dxvk {
&devExtensions.extShaderStencilExport, &devExtensions.extShaderStencilExport,
&devExtensions.extTransformFeedback, &devExtensions.extTransformFeedback,
&devExtensions.extVertexAttributeDivisor, &devExtensions.extVertexAttributeDivisor,
&devExtensions.khrDriverProperties,
&devExtensions.khrDynamicRendering, &devExtensions.khrDynamicRendering,
&devExtensions.khrExternalMemoryWin32, &devExtensions.khrExternalMemoryWin32,
&devExtensions.khrPipelineLibrary, &devExtensions.khrPipelineLibrary,
@ -546,13 +545,10 @@ namespace dxvk {
bool DxvkAdapter::matchesDriver( bool DxvkAdapter::matchesDriver(
DxvkGpuVendor vendor,
VkDriverIdKHR driver, VkDriverIdKHR driver,
uint32_t minVer, uint32_t minVer,
uint32_t maxVer) const { uint32_t maxVer) const {
bool driverMatches = m_deviceInfo.khrDeviceDriverProperties.driverID bool driverMatches = driver == m_deviceInfo.vk12.driverID;
? driver == m_deviceInfo.khrDeviceDriverProperties.driverID
: vendor == DxvkGpuVendor(m_deviceInfo.core.properties.vendorID);
if (minVer) driverMatches &= m_deviceInfo.core.properties.driverVersion >= minVer; if (minVer) driverMatches &= m_deviceInfo.core.properties.driverVersion >= minVer;
if (maxVer) driverMatches &= m_deviceInfo.core.properties.driverVersion < maxVer; 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); 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 // Query full device properties for all enabled extensions
m_vki->vkGetPhysicalDeviceProperties2(m_handle, &m_deviceInfo.core); m_vki->vkGetPhysicalDeviceProperties2(m_handle, &m_deviceInfo.core);
// Some drivers reports the driver version in a slightly different format // 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: case VK_DRIVER_ID_NVIDIA_PROPRIETARY:
m_deviceInfo.core.properties.driverVersion = VK_MAKE_VERSION( m_deviceInfo.core.properties.driverVersion = VK_MAKE_VERSION(
(m_deviceInfo.core.properties.driverVersion >> 22) & 0x3ff, (m_deviceInfo.core.properties.driverVersion >> 22) & 0x3ff,

View File

@ -226,15 +226,12 @@ namespace dxvk {
/** /**
* \brief Tests if the driver matches certain criteria * \brief Tests if the driver matches certain criteria
* *
* \param [in] vendor GPU vendor * \param [in] driver Driver ID
* \param [in] driver Driver. Ignored when the
* driver properties extension is not supported.
* \param [in] minVer Match versions starting with this one * \param [in] minVer Match versions starting with this one
* \param [in] maxVer Match versions lower than this one * \param [in] maxVer Match versions lower than this one
* \returns \c True if the driver matches these criteria * \returns \c True if the driver matches these criteria
*/ */
bool matchesDriver( bool matchesDriver(
DxvkGpuVendor vendor,
VkDriverIdKHR driver, VkDriverIdKHR driver,
uint32_t minVer, uint32_t minVer,
uint32_t maxVer) const; uint32_t maxVer) const;

View File

@ -271,12 +271,12 @@ namespace dxvk {
DxvkDevicePerfHints DxvkDevice::getPerfHints() { DxvkDevicePerfHints DxvkDevice::getPerfHints() {
DxvkDevicePerfHints hints; DxvkDevicePerfHints hints;
hints.preferFbDepthStencilCopy = m_extensions.extShaderStencilExport hints.preferFbDepthStencilCopy = m_extensions.extShaderStencilExport
&& (m_adapter->matchesDriver(DxvkGpuVendor::Amd, VK_DRIVER_ID_MESA_RADV_KHR, 0, 0) && (m_adapter->matchesDriver(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(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_PROPRIETARY_KHR, 0, 0));
hints.preferFbResolve = m_extensions.amdShaderFragmentMask hints.preferFbResolve = m_extensions.amdShaderFragmentMask
&& (m_adapter->matchesDriver(DxvkGpuVendor::Amd, VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR, 0, 0) && (m_adapter->matchesDriver(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_PROPRIETARY_KHR, 0, 0));
return hints; return hints;
} }

View File

@ -22,7 +22,6 @@ namespace dxvk {
VkPhysicalDeviceRobustness2PropertiesEXT extRobustness2; VkPhysicalDeviceRobustness2PropertiesEXT extRobustness2;
VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback; VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback;
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor; VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor;
VkPhysicalDeviceDriverPropertiesKHR khrDeviceDriverProperties;
}; };

View File

@ -295,7 +295,6 @@ namespace dxvk {
DxvkExt extShaderStencilExport = { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extShaderStencilExport = { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extTransformFeedback = { VK_EXT_TRANSFORM_FEEDBACK_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 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 khrDynamicRendering = { VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, DxvkExtMode::Required };
DxvkExt khrExternalMemoryWin32 = { VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrExternalMemoryWin32 = { VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrPipelineLibrary = { VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrPipelineLibrary = { VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME, DxvkExtMode::Optional };

View File

@ -217,7 +217,7 @@ namespace dxvk {
/* Work around an issue on Nvidia drivers where using the entire /* Work around an issue on Nvidia drivers where using the entire
* device_local | host_visible heap can cause crashes or slowdowns */ * device_local | host_visible heap can cause crashes or slowdowns */
if (m_device->properties().core.properties.vendorID == uint16_t(DxvkGpuVendor::Nvidia)) { 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)); VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR, 0, VK_MAKE_VERSION(465, 0, 0));
applyTristate(shrinkNvidiaHvvHeap, device->config().shrinkNvidiaHvvHeap); applyTristate(shrinkNvidiaHvvHeap, device->config().shrinkNvidiaHvvHeap);