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

[dxvk] Enable VK_EXT_swapchain_maintenance1 and surface_maintenance1

This commit is contained in:
Philip Rebohle 2023-05-29 11:23:02 +02:00
parent 0543956ea0
commit be875cd7e6
5 changed files with 32 additions and 1 deletions

View File

@ -254,6 +254,7 @@ namespace dxvk {
&& CHECK_FEATURE_NEED(extShaderModuleIdentifier.shaderModuleIdentifier) && CHECK_FEATURE_NEED(extShaderModuleIdentifier.shaderModuleIdentifier)
&& CHECK_FEATURE_NEED(extShaderStencilExport) && CHECK_FEATURE_NEED(extShaderStencilExport)
&& CHECK_FEATURE_NEED(extSwapchainColorSpace) && CHECK_FEATURE_NEED(extSwapchainColorSpace)
&& CHECK_FEATURE_NEED(extSwapchainMaintenance1.swapchainMaintenance1)
&& CHECK_FEATURE_NEED(extHdrMetadata) && CHECK_FEATURE_NEED(extHdrMetadata)
&& CHECK_FEATURE_NEED(extTransformFeedback.transformFeedback) && CHECK_FEATURE_NEED(extTransformFeedback.transformFeedback)
&& CHECK_FEATURE_NEED(extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor) && CHECK_FEATURE_NEED(extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor)
@ -376,6 +377,11 @@ namespace dxvk {
enabledFeatures.extShaderModuleIdentifier.shaderModuleIdentifier = enabledFeatures.extShaderModuleIdentifier.shaderModuleIdentifier =
m_deviceFeatures.extShaderModuleIdentifier.shaderModuleIdentifier; m_deviceFeatures.extShaderModuleIdentifier.shaderModuleIdentifier;
// Enable swap chain features that are transparent tot he device
enabledFeatures.extSwapchainMaintenance1.swapchainMaintenance1 =
m_deviceFeatures.extSwapchainMaintenance1.swapchainMaintenance1 &&
instance->extensions().extSurfaceMaintenance1;
// Create pNext chain for additional device features // Create pNext chain for additional device features
initFeatureChain(enabledFeatures, devExtensions, instance->extensions()); initFeatureChain(enabledFeatures, devExtensions, instance->extensions());
@ -535,6 +541,10 @@ namespace dxvk {
enabledFeatures.extShaderModuleIdentifier = *reinterpret_cast<const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT*>(f); enabledFeatures.extShaderModuleIdentifier = *reinterpret_cast<const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT*>(f);
break; break;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT:
enabledFeatures.extSwapchainMaintenance1 = *reinterpret_cast<const VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT*>(f);
break;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT: case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT:
enabledFeatures.extTransformFeedback = *reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(f); enabledFeatures.extTransformFeedback = *reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(f);
break; break;
@ -805,6 +815,11 @@ namespace dxvk {
if (m_deviceExtensions.supports(VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME)) if (m_deviceExtensions.supports(VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME))
m_deviceFeatures.extSwapchainColorSpace = VK_TRUE; m_deviceFeatures.extSwapchainColorSpace = VK_TRUE;
if (m_deviceExtensions.supports(VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME)) {
m_deviceFeatures.extSwapchainMaintenance1.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT;
m_deviceFeatures.extSwapchainMaintenance1.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extSwapchainMaintenance1);
}
if (m_deviceExtensions.supports(VK_EXT_HDR_METADATA_EXTENSION_NAME)) if (m_deviceExtensions.supports(VK_EXT_HDR_METADATA_EXTENSION_NAME))
m_deviceFeatures.extHdrMetadata = VK_TRUE; m_deviceFeatures.extHdrMetadata = VK_TRUE;
@ -878,6 +893,7 @@ namespace dxvk {
&devExtensions.extShaderModuleIdentifier, &devExtensions.extShaderModuleIdentifier,
&devExtensions.extShaderStencilExport, &devExtensions.extShaderStencilExport,
&devExtensions.extSwapchainColorSpace, &devExtensions.extSwapchainColorSpace,
&devExtensions.extSwapchainMaintenance1,
&devExtensions.extTransformFeedback, &devExtensions.extTransformFeedback,
&devExtensions.extVertexAttributeDivisor, &devExtensions.extVertexAttributeDivisor,
&devExtensions.khrExternalMemoryWin32, &devExtensions.khrExternalMemoryWin32,
@ -974,6 +990,11 @@ namespace dxvk {
if (devExtensions.extSwapchainColorSpace) if (devExtensions.extSwapchainColorSpace)
enabledFeatures.extSwapchainColorSpace = VK_TRUE; enabledFeatures.extSwapchainColorSpace = VK_TRUE;
if (devExtensions.extSwapchainMaintenance1) {
enabledFeatures.extSwapchainMaintenance1.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT;
enabledFeatures.extSwapchainMaintenance1.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extSwapchainMaintenance1);
}
if (devExtensions.extHdrMetadata) if (devExtensions.extHdrMetadata)
enabledFeatures.extHdrMetadata = VK_TRUE; enabledFeatures.extHdrMetadata = VK_TRUE;
@ -1106,6 +1127,8 @@ namespace dxvk {
"\n extension supported : ", features.extShaderStencilExport ? "1" : "0", "\n extension supported : ", features.extShaderStencilExport ? "1" : "0",
"\n", VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, "\n", VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME,
"\n extension supported : ", features.extSwapchainColorSpace ? "1" : "0", "\n extension supported : ", features.extSwapchainColorSpace ? "1" : "0",
"\n", VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME,
"\n swapchainMaintenance1 : ", features.extSwapchainMaintenance1.swapchainMaintenance1 ? "1" : "0",
"\n", VK_EXT_HDR_METADATA_EXTENSION_NAME, "\n", VK_EXT_HDR_METADATA_EXTENSION_NAME,
"\n extension supported : ", features.extHdrMetadata ? "1" : "0", "\n extension supported : ", features.extHdrMetadata ? "1" : "0",
"\n", VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, "\n", VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME,

View File

@ -48,6 +48,7 @@ namespace dxvk {
VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT extFragmentShaderInterlock; VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT extFragmentShaderInterlock;
VkBool32 extFullScreenExclusive; VkBool32 extFullScreenExclusive;
VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT extGraphicsPipelineLibrary; VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT extGraphicsPipelineLibrary;
VkBool32 extHdrMetadata;
VkBool32 extMemoryBudget; VkBool32 extMemoryBudget;
VkPhysicalDeviceMemoryPriorityFeaturesEXT extMemoryPriority; VkPhysicalDeviceMemoryPriorityFeaturesEXT extMemoryPriority;
VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT extNonSeamlessCubeMap; VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT extNonSeamlessCubeMap;
@ -55,7 +56,7 @@ namespace dxvk {
VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT extShaderModuleIdentifier; VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT extShaderModuleIdentifier;
VkBool32 extShaderStencilExport; VkBool32 extShaderStencilExport;
VkBool32 extSwapchainColorSpace; VkBool32 extSwapchainColorSpace;
VkBool32 extHdrMetadata; VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT extSwapchainMaintenance1;
VkPhysicalDeviceTransformFeedbackFeaturesEXT extTransformFeedback; VkPhysicalDeviceTransformFeedbackFeaturesEXT extTransformFeedback;
VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT extVertexAttributeDivisor; VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT extVertexAttributeDivisor;
VkBool32 khrExternalMemoryWin32; VkBool32 khrExternalMemoryWin32;

View File

@ -311,6 +311,7 @@ namespace dxvk {
DxvkExt extShaderModuleIdentifier = { VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extShaderModuleIdentifier = { VK_EXT_SHADER_MODULE_IDENTIFIER_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extShaderStencilExport = { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extShaderStencilExport = { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extSwapchainColorSpace = { VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extSwapchainColorSpace = { VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extSwapchainMaintenance1 = { VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extHdrMetadata = { VK_EXT_HDR_METADATA_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extHdrMetadata = { VK_EXT_HDR_METADATA_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 };
@ -330,6 +331,7 @@ namespace dxvk {
*/ */
struct DxvkInstanceExtensions { struct DxvkInstanceExtensions {
DxvkExt extDebugUtils = { VK_EXT_DEBUG_UTILS_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extDebugUtils = { VK_EXT_DEBUG_UTILS_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extSurfaceMaintenance1 = { VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrGetSurfaceCapabilities2 = { VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrGetSurfaceCapabilities2 = { VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrSurface = { VK_KHR_SURFACE_EXTENSION_NAME, DxvkExtMode::Required }; DxvkExt khrSurface = { VK_KHR_SURFACE_EXTENSION_NAME, DxvkExtMode::Required };
}; };

View File

@ -212,6 +212,7 @@ namespace dxvk {
std::vector<DxvkExt*> DxvkInstance::getExtensionList(DxvkInstanceExtensions& ext, bool withDebug) { std::vector<DxvkExt*> DxvkInstance::getExtensionList(DxvkInstanceExtensions& ext, bool withDebug) {
std::vector<DxvkExt*> result = {{ std::vector<DxvkExt*> result = {{
&ext.extSurfaceMaintenance1,
&ext.khrGetSurfaceCapabilities2, &ext.khrGetSurfaceCapabilities2,
&ext.khrSurface, &ext.khrSurface,
}}; }};

View File

@ -161,6 +161,10 @@ namespace dxvk::vk {
#ifdef VK_EXT_full_screen_exclusive #ifdef VK_EXT_full_screen_exclusive
VULKAN_FN(vkGetPhysicalDeviceSurfacePresentModes2EXT); VULKAN_FN(vkGetPhysicalDeviceSurfacePresentModes2EXT);
#endif #endif
#ifdef VK_EXT_swapchain_maintenance1
VULKAN_FN(vkReleaseSwapchainImagesEXT);
#endif
}; };