diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index 443215d1..45d39552 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -263,10 +263,11 @@ namespace dxvk { DxvkDeviceFeatures enabledFeatures) { DxvkDeviceExtensions devExtensions; - std::array devExtensionList = {{ + std::array devExtensionList = {{ &devExtensions.amdMemoryOverallocationBehaviour, &devExtensions.amdShaderFragmentMask, &devExtensions.ext4444Formats, + &devExtensions.extConservativeRasterization, &devExtensions.extCustomBorderColor, &devExtensions.extDepthClipEnable, &devExtensions.extExtendedDynamicState, @@ -521,6 +522,11 @@ namespace dxvk { m_deviceInfo.coreSubgroup.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES; m_deviceInfo.coreSubgroup.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.coreSubgroup); + 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); + } + if (m_deviceExtensions.supports(VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME)) { m_deviceInfo.extCustomBorderColor.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT; m_deviceInfo.extCustomBorderColor.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.extCustomBorderColor); diff --git a/src/dxvk/dxvk_device_info.h b/src/dxvk/dxvk_device_info.h index 55482b26..c7718ae9 100644 --- a/src/dxvk/dxvk_device_info.h +++ b/src/dxvk/dxvk_device_info.h @@ -13,16 +13,17 @@ namespace dxvk { * so before using them, check whether they are supported. */ struct DxvkDeviceInfo { - VkPhysicalDeviceProperties2 core; - VkPhysicalDeviceIDProperties coreDeviceId; - VkPhysicalDeviceSubgroupProperties coreSubgroup; - VkPhysicalDeviceCustomBorderColorPropertiesEXT extCustomBorderColor; - VkPhysicalDeviceRobustness2PropertiesEXT extRobustness2; - VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback; - VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor; - VkPhysicalDeviceDepthStencilResolvePropertiesKHR khrDepthStencilResolve; - VkPhysicalDeviceDriverPropertiesKHR khrDeviceDriverProperties; - VkPhysicalDeviceFloatControlsPropertiesKHR khrShaderFloatControls; + VkPhysicalDeviceProperties2 core; + VkPhysicalDeviceIDProperties coreDeviceId; + VkPhysicalDeviceSubgroupProperties coreSubgroup; + VkPhysicalDeviceConservativeRasterizationPropertiesEXT extConservativeRasterization; + VkPhysicalDeviceCustomBorderColorPropertiesEXT extCustomBorderColor; + VkPhysicalDeviceRobustness2PropertiesEXT extRobustness2; + VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback; + VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor; + VkPhysicalDeviceDepthStencilResolvePropertiesKHR khrDepthStencilResolve; + VkPhysicalDeviceDriverPropertiesKHR khrDeviceDriverProperties; + VkPhysicalDeviceFloatControlsPropertiesKHR khrShaderFloatControls; }; diff --git a/src/dxvk/dxvk_extensions.h b/src/dxvk/dxvk_extensions.h index afe12563..0a21a6cb 100644 --- a/src/dxvk/dxvk_extensions.h +++ b/src/dxvk/dxvk_extensions.h @@ -261,6 +261,7 @@ namespace dxvk { DxvkExt amdMemoryOverallocationBehaviour = { VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt amdShaderFragmentMask = { VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt ext4444Formats = { VK_EXT_4444_FORMATS_EXTENSION_NAME, DxvkExtMode::Optional }; + DxvkExt extConservativeRasterization = { VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extCustomBorderColor = { VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extDepthClipEnable = { VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extExtendedDynamicState = { VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, DxvkExtMode::Optional };