From 731bf84eddabfd2a95a245b8bb91214610fd0f8f Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Sun, 18 Dec 2022 17:29:33 +0000 Subject: [PATCH] [dxvk] Enable VK_EXT_hdr_metadata --- VP_DXVK_requirements.json | 5 +++-- src/dxvk/dxvk_adapter.cpp | 13 ++++++++++++- src/dxvk/dxvk_device_info.h | 1 + src/dxvk/dxvk_extensions.h | 1 + src/vulkan/vulkan_loader.h | 4 ++++ 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/VP_DXVK_requirements.json b/VP_DXVK_requirements.json index 133d6c1c..d837465b 100644 --- a/VP_DXVK_requirements.json +++ b/VP_DXVK_requirements.json @@ -186,7 +186,8 @@ "VK_EXT_vertex_attribute_divisor": 1, "VK_EXT_custom_border_color": 1, "VK_EXT_depth_clip_enable": 1, - "VK_EXT_swapchain_colorspace": 1 + "VK_EXT_swapchain_colorspace": 1, + "VK_EXT_hdr_metadata": 1 }, "features": { "VkPhysicalDeviceFeatures": { @@ -390,7 +391,7 @@ "revision": 4, "date": "2022-12-18", "author": "Joshua Ashton", - "comment": "Add VK_EXT_swapchain_colorspace to d3d11_baseline_optional" + "comment": "Add VK_EXT_swapchain_colorspace and VK_EXT_hdr_metadata to d3d11_baseline_optional" }, { "revision": 3, diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index 5bafb9f9..290ea984 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -318,6 +318,8 @@ namespace dxvk { || !required.extShaderStencilExport) && (m_deviceFeatures.extShaderStencilExport || !required.extSwapchainColorSpace) + && (m_deviceFeatures.extHdrMetadata + || !required.extHdrMetadata) && (m_deviceFeatures.extTransformFeedback.transformFeedback || !required.extTransformFeedback.transformFeedback) && (m_deviceFeatures.extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor @@ -337,7 +339,7 @@ namespace dxvk { DxvkDeviceFeatures enabledFeatures) { DxvkDeviceExtensions devExtensions; - std::array devExtensionList = {{ + std::array devExtensionList = {{ &devExtensions.amdMemoryOverallocationBehaviour, &devExtensions.amdShaderFragmentMask, &devExtensions.extAttachmentFeedbackLoopLayout, @@ -348,6 +350,7 @@ namespace dxvk { &devExtensions.extFragmentShaderInterlock, &devExtensions.extFullScreenExclusive, &devExtensions.extGraphicsPipelineLibrary, + &devExtensions.extHdrMetadata, &devExtensions.extMemoryBudget, &devExtensions.extMemoryPriority, &devExtensions.extNonSeamlessCubeMap, @@ -543,6 +546,9 @@ namespace dxvk { if (devExtensions.extSwapchainColorSpace) enabledFeatures.extSwapchainColorSpace = VK_TRUE; + if (devExtensions.extHdrMetadata) + enabledFeatures.extHdrMetadata = VK_TRUE; + if (devExtensions.extTransformFeedback) { enabledFeatures.extTransformFeedback.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT; enabledFeatures.extTransformFeedback.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extTransformFeedback); @@ -884,6 +890,9 @@ namespace dxvk { if (m_deviceExtensions.supports(VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME)) m_deviceFeatures.extSwapchainColorSpace = VK_TRUE; + if (m_deviceExtensions.supports(VK_EXT_HDR_METADATA_EXTENSION_NAME)) + m_deviceFeatures.extHdrMetadata = VK_TRUE; + if (m_deviceExtensions.supports(VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME)) { m_deviceFeatures.extTransformFeedback.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT; m_deviceFeatures.extTransformFeedback.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extTransformFeedback); @@ -1035,6 +1044,8 @@ namespace dxvk { "\n extension supported : ", features.extShaderStencilExport ? "1" : "0", "\n", VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, "\n extension supported : ", features.extSwapchainColorSpace ? "1" : "0", + "\n", VK_EXT_HDR_METADATA_EXTENSION_NAME, + "\n extension supported : ", features.extHdrMetadata ? "1" : "0", "\n", VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME, "\n transformFeedback : ", features.extTransformFeedback.transformFeedback ? "1" : "0", "\n geometryStreams : ", features.extTransformFeedback.geometryStreams ? "1" : "0", diff --git a/src/dxvk/dxvk_device_info.h b/src/dxvk/dxvk_device_info.h index 7b352796..3c385cbd 100644 --- a/src/dxvk/dxvk_device_info.h +++ b/src/dxvk/dxvk_device_info.h @@ -55,6 +55,7 @@ namespace dxvk { VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT extShaderModuleIdentifier; VkBool32 extShaderStencilExport; VkBool32 extSwapchainColorSpace; + VkBool32 extHdrMetadata; VkPhysicalDeviceTransformFeedbackFeaturesEXT extTransformFeedback; VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT extVertexAttributeDivisor; VkBool32 khrExternalMemoryWin32; diff --git a/src/dxvk/dxvk_extensions.h b/src/dxvk/dxvk_extensions.h index 3d3d979b..1b7e91cc 100644 --- a/src/dxvk/dxvk_extensions.h +++ b/src/dxvk/dxvk_extensions.h @@ -293,6 +293,7 @@ namespace dxvk { DxvkExt extShaderModuleIdentifier = { VK_EXT_SHADER_MODULE_IDENTIFIER_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 extHdrMetadata = { VK_EXT_HDR_METADATA_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 khrExternalMemoryWin32 = { VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, DxvkExtMode::Optional }; diff --git a/src/vulkan/vulkan_loader.h b/src/vulkan/vulkan_loader.h index 653cf397..71b2dab2 100644 --- a/src/vulkan/vulkan_loader.h +++ b/src/vulkan/vulkan_loader.h @@ -384,6 +384,10 @@ namespace dxvk::vk { VULKAN_FN(vkGetDeviceGroupSurfacePresentModes2EXT); #endif + #ifdef VK_EXT_hdr_metadata + VULKAN_FN(vkSetHdrMetadataEXT); + #endif + #ifdef VK_EXT_shader_module_identifier VULKAN_FN(vkGetShaderModuleCreateInfoIdentifierEXT); VULKAN_FN(vkGetShaderModuleIdentifierEXT);