mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-14 22:29:15 +01:00
[dxvk] Enable VK_EXT_swapchain_maintenance1 and surface_maintenance1
This commit is contained in:
parent
0543956ea0
commit
be875cd7e6
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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 };
|
||||||
};
|
};
|
||||||
|
@ -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,
|
||||||
}};
|
}};
|
||||||
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user