mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-13 19:29:14 +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(extShaderStencilExport)
|
||||
&& CHECK_FEATURE_NEED(extSwapchainColorSpace)
|
||||
&& CHECK_FEATURE_NEED(extSwapchainMaintenance1.swapchainMaintenance1)
|
||||
&& CHECK_FEATURE_NEED(extHdrMetadata)
|
||||
&& CHECK_FEATURE_NEED(extTransformFeedback.transformFeedback)
|
||||
&& CHECK_FEATURE_NEED(extVertexAttributeDivisor.vertexAttributeInstanceRateDivisor)
|
||||
@ -376,6 +377,11 @@ namespace dxvk {
|
||||
enabledFeatures.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
|
||||
initFeatureChain(enabledFeatures, devExtensions, instance->extensions());
|
||||
|
||||
@ -535,6 +541,10 @@ namespace dxvk {
|
||||
enabledFeatures.extShaderModuleIdentifier = *reinterpret_cast<const VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT*>(f);
|
||||
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:
|
||||
enabledFeatures.extTransformFeedback = *reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(f);
|
||||
break;
|
||||
@ -805,6 +815,11 @@ namespace dxvk {
|
||||
if (m_deviceExtensions.supports(VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME))
|
||||
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))
|
||||
m_deviceFeatures.extHdrMetadata = VK_TRUE;
|
||||
|
||||
@ -878,6 +893,7 @@ namespace dxvk {
|
||||
&devExtensions.extShaderModuleIdentifier,
|
||||
&devExtensions.extShaderStencilExport,
|
||||
&devExtensions.extSwapchainColorSpace,
|
||||
&devExtensions.extSwapchainMaintenance1,
|
||||
&devExtensions.extTransformFeedback,
|
||||
&devExtensions.extVertexAttributeDivisor,
|
||||
&devExtensions.khrExternalMemoryWin32,
|
||||
@ -974,6 +990,11 @@ namespace dxvk {
|
||||
if (devExtensions.extSwapchainColorSpace)
|
||||
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)
|
||||
enabledFeatures.extHdrMetadata = VK_TRUE;
|
||||
|
||||
@ -1106,6 +1127,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_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME,
|
||||
"\n swapchainMaintenance1 : ", features.extSwapchainMaintenance1.swapchainMaintenance1 ? "1" : "0",
|
||||
"\n", VK_EXT_HDR_METADATA_EXTENSION_NAME,
|
||||
"\n extension supported : ", features.extHdrMetadata ? "1" : "0",
|
||||
"\n", VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME,
|
||||
|
@ -48,6 +48,7 @@ namespace dxvk {
|
||||
VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT extFragmentShaderInterlock;
|
||||
VkBool32 extFullScreenExclusive;
|
||||
VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT extGraphicsPipelineLibrary;
|
||||
VkBool32 extHdrMetadata;
|
||||
VkBool32 extMemoryBudget;
|
||||
VkPhysicalDeviceMemoryPriorityFeaturesEXT extMemoryPriority;
|
||||
VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT extNonSeamlessCubeMap;
|
||||
@ -55,7 +56,7 @@ namespace dxvk {
|
||||
VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT extShaderModuleIdentifier;
|
||||
VkBool32 extShaderStencilExport;
|
||||
VkBool32 extSwapchainColorSpace;
|
||||
VkBool32 extHdrMetadata;
|
||||
VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT extSwapchainMaintenance1;
|
||||
VkPhysicalDeviceTransformFeedbackFeaturesEXT extTransformFeedback;
|
||||
VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT extVertexAttributeDivisor;
|
||||
VkBool32 khrExternalMemoryWin32;
|
||||
|
@ -311,6 +311,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 extSwapchainMaintenance1 = { VK_EXT_SWAPCHAIN_MAINTENANCE_1_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 };
|
||||
@ -330,6 +331,7 @@ namespace dxvk {
|
||||
*/
|
||||
struct DxvkInstanceExtensions {
|
||||
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 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*> result = {{
|
||||
&ext.extSurfaceMaintenance1,
|
||||
&ext.khrGetSurfaceCapabilities2,
|
||||
&ext.khrSurface,
|
||||
}};
|
||||
|
@ -161,6 +161,10 @@ namespace dxvk::vk {
|
||||
#ifdef VK_EXT_full_screen_exclusive
|
||||
VULKAN_FN(vkGetPhysicalDeviceSurfacePresentModes2EXT);
|
||||
#endif
|
||||
|
||||
#ifdef VK_EXT_swapchain_maintenance1
|
||||
VULKAN_FN(vkReleaseSwapchainImagesEXT);
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user