mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-04 16:24:29 +01:00
[dxvk] Enable VK_EXT_line_rasterization if supported.
This commit is contained in:
parent
98f3887680
commit
228cd4c331
@ -360,12 +360,24 @@ namespace dxvk {
|
|||||||
m_deviceFeatures.extExtendedDynamicState3.extendedDynamicState3RasterizationSamples;
|
m_deviceFeatures.extExtendedDynamicState3.extendedDynamicState3RasterizationSamples;
|
||||||
enabledFeatures.extExtendedDynamicState3.extendedDynamicState3SampleMask =
|
enabledFeatures.extExtendedDynamicState3.extendedDynamicState3SampleMask =
|
||||||
m_deviceFeatures.extExtendedDynamicState3.extendedDynamicState3SampleMask;
|
m_deviceFeatures.extExtendedDynamicState3.extendedDynamicState3SampleMask;
|
||||||
|
enabledFeatures.extExtendedDynamicState3.extendedDynamicState3LineRasterizationMode =
|
||||||
|
m_deviceFeatures.extExtendedDynamicState3.extendedDynamicState3LineRasterizationMode;
|
||||||
|
|
||||||
// Used for both pNext shader module info, and fast-linking pipelines provided
|
// Used for both pNext shader module info, and fast-linking pipelines provided
|
||||||
// that graphicsPipelineLibraryIndependentInterpolationDecoration is supported
|
// that graphicsPipelineLibraryIndependentInterpolationDecoration is supported
|
||||||
enabledFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary =
|
enabledFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary =
|
||||||
m_deviceFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary;
|
m_deviceFeatures.extGraphicsPipelineLibrary.graphicsPipelineLibrary;
|
||||||
|
|
||||||
|
// Only enable non-default line rasterization features if at least wide lines
|
||||||
|
// and rectangular lines are supported. This saves us several feature checks
|
||||||
|
// in the actual code.
|
||||||
|
if (m_deviceFeatures.core.features.wideLines && m_deviceFeatures.extLineRasterization.rectangularLines) {
|
||||||
|
enabledFeatures.core.features.wideLines = VK_TRUE;
|
||||||
|
enabledFeatures.extLineRasterization.rectangularLines = VK_TRUE;
|
||||||
|
enabledFeatures.extLineRasterization.smoothLines =
|
||||||
|
m_deviceFeatures.extLineRasterization.smoothLines;
|
||||||
|
}
|
||||||
|
|
||||||
// Enable memory priority if supported to improve memory management
|
// Enable memory priority if supported to improve memory management
|
||||||
enabledFeatures.extMemoryPriority.memoryPriority =
|
enabledFeatures.extMemoryPriority.memoryPriority =
|
||||||
m_deviceFeatures.extMemoryPriority.memoryPriority;
|
m_deviceFeatures.extMemoryPriority.memoryPriority;
|
||||||
@ -546,6 +558,10 @@ namespace dxvk {
|
|||||||
enabledFeatures.extGraphicsPipelineLibrary = *reinterpret_cast<const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT*>(f);
|
enabledFeatures.extGraphicsPipelineLibrary = *reinterpret_cast<const VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT*>(f);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:
|
||||||
|
enabledFeatures.extLineRasterization = *reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(f);
|
||||||
|
break;
|
||||||
|
|
||||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:
|
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:
|
||||||
enabledFeatures.extMemoryPriority = *reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(f);
|
enabledFeatures.extMemoryPriority = *reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(f);
|
||||||
break;
|
break;
|
||||||
@ -724,6 +740,11 @@ namespace dxvk {
|
|||||||
m_deviceInfo.extGraphicsPipelineLibrary.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.extGraphicsPipelineLibrary);
|
m_deviceInfo.extGraphicsPipelineLibrary.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.extGraphicsPipelineLibrary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_deviceExtensions.supports(VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME)) {
|
||||||
|
m_deviceInfo.extLineRasterization.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT;
|
||||||
|
m_deviceInfo.extLineRasterization.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.extLineRasterization);
|
||||||
|
}
|
||||||
|
|
||||||
if (m_deviceExtensions.supports(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME)) {
|
if (m_deviceExtensions.supports(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME)) {
|
||||||
m_deviceInfo.extRobustness2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT;
|
m_deviceInfo.extRobustness2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT;
|
||||||
m_deviceInfo.extRobustness2.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.extRobustness2);
|
m_deviceInfo.extRobustness2.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.extRobustness2);
|
||||||
@ -820,6 +841,11 @@ namespace dxvk {
|
|||||||
m_deviceFeatures.extGraphicsPipelineLibrary.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extGraphicsPipelineLibrary);
|
m_deviceFeatures.extGraphicsPipelineLibrary.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extGraphicsPipelineLibrary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_deviceExtensions.supports(VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME)) {
|
||||||
|
m_deviceFeatures.extLineRasterization.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT;
|
||||||
|
m_deviceFeatures.extLineRasterization.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extLineRasterization);
|
||||||
|
}
|
||||||
|
|
||||||
if (m_deviceExtensions.supports(VK_EXT_MEMORY_BUDGET_EXTENSION_NAME))
|
if (m_deviceExtensions.supports(VK_EXT_MEMORY_BUDGET_EXTENSION_NAME))
|
||||||
m_deviceFeatures.extMemoryBudget = VK_TRUE;
|
m_deviceFeatures.extMemoryBudget = VK_TRUE;
|
||||||
|
|
||||||
@ -931,6 +957,7 @@ namespace dxvk {
|
|||||||
&devExtensions.extFullScreenExclusive,
|
&devExtensions.extFullScreenExclusive,
|
||||||
&devExtensions.extGraphicsPipelineLibrary,
|
&devExtensions.extGraphicsPipelineLibrary,
|
||||||
&devExtensions.extHdrMetadata,
|
&devExtensions.extHdrMetadata,
|
||||||
|
&devExtensions.extLineRasterization,
|
||||||
&devExtensions.extMemoryBudget,
|
&devExtensions.extMemoryBudget,
|
||||||
&devExtensions.extMemoryPriority,
|
&devExtensions.extMemoryPriority,
|
||||||
&devExtensions.extNonSeamlessCubeMap,
|
&devExtensions.extNonSeamlessCubeMap,
|
||||||
@ -1013,6 +1040,11 @@ namespace dxvk {
|
|||||||
enabledFeatures.extGraphicsPipelineLibrary.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extGraphicsPipelineLibrary);
|
enabledFeatures.extGraphicsPipelineLibrary.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extGraphicsPipelineLibrary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (devExtensions.extLineRasterization) {
|
||||||
|
enabledFeatures.extLineRasterization.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT;
|
||||||
|
enabledFeatures.extLineRasterization.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extLineRasterization);
|
||||||
|
}
|
||||||
|
|
||||||
if (devExtensions.extMemoryBudget)
|
if (devExtensions.extMemoryBudget)
|
||||||
enabledFeatures.extMemoryBudget = VK_TRUE;
|
enabledFeatures.extMemoryBudget = VK_TRUE;
|
||||||
|
|
||||||
@ -1107,6 +1139,7 @@ namespace dxvk {
|
|||||||
"\n depthBiasClamp : ", features.core.features.depthBiasClamp ? "1" : "0",
|
"\n depthBiasClamp : ", features.core.features.depthBiasClamp ? "1" : "0",
|
||||||
"\n fillModeNonSolid : ", features.core.features.fillModeNonSolid ? "1" : "0",
|
"\n fillModeNonSolid : ", features.core.features.fillModeNonSolid ? "1" : "0",
|
||||||
"\n depthBounds : ", features.core.features.depthBounds ? "1" : "0",
|
"\n depthBounds : ", features.core.features.depthBounds ? "1" : "0",
|
||||||
|
"\n wideLines : ", features.core.features.wideLines ? "1" : "0",
|
||||||
"\n multiViewport : ", features.core.features.multiViewport ? "1" : "0",
|
"\n multiViewport : ", features.core.features.multiViewport ? "1" : "0",
|
||||||
"\n samplerAnisotropy : ", features.core.features.samplerAnisotropy ? "1" : "0",
|
"\n samplerAnisotropy : ", features.core.features.samplerAnisotropy ? "1" : "0",
|
||||||
"\n textureCompressionBC : ", features.core.features.textureCompressionBC ? "1" : "0",
|
"\n textureCompressionBC : ", features.core.features.textureCompressionBC ? "1" : "0",
|
||||||
@ -1171,6 +1204,7 @@ namespace dxvk {
|
|||||||
"\n extDynamicState3DepthClipEnable : ", features.extExtendedDynamicState3.extendedDynamicState3DepthClipEnable ? "1" : "0",
|
"\n extDynamicState3DepthClipEnable : ", features.extExtendedDynamicState3.extendedDynamicState3DepthClipEnable ? "1" : "0",
|
||||||
"\n extDynamicState3RasterizationSamples : ", features.extExtendedDynamicState3.extendedDynamicState3RasterizationSamples ? "1" : "0",
|
"\n extDynamicState3RasterizationSamples : ", features.extExtendedDynamicState3.extendedDynamicState3RasterizationSamples ? "1" : "0",
|
||||||
"\n extDynamicState3SampleMask : ", features.extExtendedDynamicState3.extendedDynamicState3SampleMask ? "1" : "0",
|
"\n extDynamicState3SampleMask : ", features.extExtendedDynamicState3.extendedDynamicState3SampleMask ? "1" : "0",
|
||||||
|
"\n extDynamicState3LineRasterizationMode : ", features.extExtendedDynamicState3.extendedDynamicState3LineRasterizationMode ? "1" : "0",
|
||||||
"\n", VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME,
|
"\n", VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME,
|
||||||
"\n fragmentShaderSampleInterlock : ", features.extFragmentShaderInterlock.fragmentShaderSampleInterlock ? "1" : "0",
|
"\n fragmentShaderSampleInterlock : ", features.extFragmentShaderInterlock.fragmentShaderSampleInterlock ? "1" : "0",
|
||||||
"\n fragmentShaderPixelInterlock : ", features.extFragmentShaderInterlock.fragmentShaderPixelInterlock ? "1" : "0",
|
"\n fragmentShaderPixelInterlock : ", features.extFragmentShaderInterlock.fragmentShaderPixelInterlock ? "1" : "0",
|
||||||
@ -1178,6 +1212,9 @@ namespace dxvk {
|
|||||||
"\n extension supported : ", features.extFullScreenExclusive ? "1" : "0",
|
"\n extension supported : ", features.extFullScreenExclusive ? "1" : "0",
|
||||||
"\n", VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME,
|
"\n", VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME,
|
||||||
"\n graphicsPipelineLibrary : ", features.extGraphicsPipelineLibrary.graphicsPipelineLibrary ? "1" : "0",
|
"\n graphicsPipelineLibrary : ", features.extGraphicsPipelineLibrary.graphicsPipelineLibrary ? "1" : "0",
|
||||||
|
"\n", VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME,
|
||||||
|
"\n rectangularLines : ", features.extLineRasterization.rectangularLines ? "1" : "0",
|
||||||
|
"\n smoothLines : ", features.extLineRasterization.smoothLines ? "1" : "0",
|
||||||
"\n", VK_EXT_MEMORY_BUDGET_EXTENSION_NAME,
|
"\n", VK_EXT_MEMORY_BUDGET_EXTENSION_NAME,
|
||||||
"\n extension supported : ", features.extMemoryBudget ? "1" : "0",
|
"\n extension supported : ", features.extMemoryBudget ? "1" : "0",
|
||||||
"\n", VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME,
|
"\n", VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME,
|
||||||
|
@ -21,6 +21,7 @@ namespace dxvk {
|
|||||||
VkPhysicalDeviceCustomBorderColorPropertiesEXT extCustomBorderColor;
|
VkPhysicalDeviceCustomBorderColorPropertiesEXT extCustomBorderColor;
|
||||||
VkPhysicalDeviceExtendedDynamicState3PropertiesEXT extExtendedDynamicState3;
|
VkPhysicalDeviceExtendedDynamicState3PropertiesEXT extExtendedDynamicState3;
|
||||||
VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT extGraphicsPipelineLibrary;
|
VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT extGraphicsPipelineLibrary;
|
||||||
|
VkPhysicalDeviceLineRasterizationPropertiesEXT extLineRasterization;
|
||||||
VkPhysicalDeviceRobustness2PropertiesEXT extRobustness2;
|
VkPhysicalDeviceRobustness2PropertiesEXT extRobustness2;
|
||||||
VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback;
|
VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback;
|
||||||
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor;
|
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor;
|
||||||
@ -50,6 +51,7 @@ namespace dxvk {
|
|||||||
VkBool32 extFullScreenExclusive;
|
VkBool32 extFullScreenExclusive;
|
||||||
VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT extGraphicsPipelineLibrary;
|
VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT extGraphicsPipelineLibrary;
|
||||||
VkBool32 extHdrMetadata;
|
VkBool32 extHdrMetadata;
|
||||||
|
VkPhysicalDeviceLineRasterizationFeaturesEXT extLineRasterization;
|
||||||
VkBool32 extMemoryBudget;
|
VkBool32 extMemoryBudget;
|
||||||
VkPhysicalDeviceMemoryPriorityFeaturesEXT extMemoryPriority;
|
VkPhysicalDeviceMemoryPriorityFeaturesEXT extMemoryPriority;
|
||||||
VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT extNonSeamlessCubeMap;
|
VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT extNonSeamlessCubeMap;
|
||||||
|
@ -305,6 +305,7 @@ namespace dxvk {
|
|||||||
DxvkExt extFullScreenExclusive = { VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME, DxvkExtMode::Optional };
|
DxvkExt extFullScreenExclusive = { VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||||
DxvkExt extFragmentShaderInterlock = { VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, DxvkExtMode::Optional };
|
DxvkExt extFragmentShaderInterlock = { VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||||
DxvkExt extGraphicsPipelineLibrary = { VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME, DxvkExtMode::Optional };
|
DxvkExt extGraphicsPipelineLibrary = { VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||||
|
DxvkExt extLineRasterization = { VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, DxvkExtMode::Passive };
|
||||||
DxvkExt extMemoryBudget = { VK_EXT_MEMORY_BUDGET_EXTENSION_NAME, DxvkExtMode::Passive };
|
DxvkExt extMemoryBudget = { VK_EXT_MEMORY_BUDGET_EXTENSION_NAME, DxvkExtMode::Passive };
|
||||||
DxvkExt extMemoryPriority = { VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, DxvkExtMode::Optional };
|
DxvkExt extMemoryPriority = { VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||||
DxvkExt extNonSeamlessCubeMap = { VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME, DxvkExtMode::Optional };
|
DxvkExt extNonSeamlessCubeMap = { VK_EXT_NON_SEAMLESS_CUBE_MAP_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||||
|
@ -383,6 +383,7 @@ namespace dxvk::vk {
|
|||||||
VULKAN_FN(vkCmdSetConservativeRasterizationModeEXT);
|
VULKAN_FN(vkCmdSetConservativeRasterizationModeEXT);
|
||||||
VULKAN_FN(vkCmdSetExtraPrimitiveOverestimationSizeEXT);
|
VULKAN_FN(vkCmdSetExtraPrimitiveOverestimationSizeEXT);
|
||||||
VULKAN_FN(vkCmdSetDepthClipEnableEXT);
|
VULKAN_FN(vkCmdSetDepthClipEnableEXT);
|
||||||
|
VULKAN_FN(vkCmdSetLineRasterizationModeEXT);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef VK_EXT_full_screen_exclusive
|
#ifdef VK_EXT_full_screen_exclusive
|
||||||
|
Loading…
Reference in New Issue
Block a user