mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-13 19:29:14 +01:00
[dxvk] Replace VK_KHR_driver_properties with core feature
This commit is contained in:
parent
78c5ef88bc
commit
131af0d677
@ -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<Tristate>("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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -283,7 +283,7 @@ namespace dxvk {
|
||||
DxvkDeviceFeatures enabledFeatures) {
|
||||
DxvkDeviceExtensions devExtensions;
|
||||
|
||||
std::array<DxvkExt*, 26> devExtensionList = {{
|
||||
std::array<DxvkExt*, 25> 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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,6 @@ namespace dxvk {
|
||||
VkPhysicalDeviceRobustness2PropertiesEXT extRobustness2;
|
||||
VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback;
|
||||
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor;
|
||||
VkPhysicalDeviceDriverPropertiesKHR khrDeviceDriverProperties;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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 };
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user