diff --git a/VP_DXVK_requirements.json b/VP_DXVK_requirements.json index 86bbc9529..688954016 100644 --- a/VP_DXVK_requirements.json +++ b/VP_DXVK_requirements.json @@ -78,6 +78,7 @@ "VK_KHR_maintenance5": 1, "VK_KHR_present_id": 1, "VK_KHR_present_wait": 1, + "VK_KHR_swapchain_mutable_format": 1, "VK_EXT_line_rasterization": 1, "VK_EXT_pageable_device_local_memory": 1, "VK_EXT_swapchain_maintenance1": 1 diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index 11adc0e60..71c58d796 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -1069,6 +1069,7 @@ namespace dxvk { &devExtensions.khrPresentId, &devExtensions.khrPresentWait, &devExtensions.khrSwapchain, + &devExtensions.khrSwapchainMutableFormat, &devExtensions.khrWin32KeyedMutex, &devExtensions.nvDescriptorPoolOverallocation, &devExtensions.nvLowLatency2, @@ -1222,6 +1223,9 @@ namespace dxvk { enabledFeatures.khrPresentWait.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.khrPresentWait); } + if (devExtensions.khrSwapchainMutableFormat) + enabledFeatures.khrSwapchainMutableFormat = VK_TRUE; + if (devExtensions.nvDescriptorPoolOverallocation) { enabledFeatures.nvDescriptorPoolOverallocation.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV; enabledFeatures.nvDescriptorPoolOverallocation.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.nvDescriptorPoolOverallocation); diff --git a/src/dxvk/dxvk_device_info.h b/src/dxvk/dxvk_device_info.h index 9ab82ee6c..6ed0ccbd9 100644 --- a/src/dxvk/dxvk_device_info.h +++ b/src/dxvk/dxvk_device_info.h @@ -74,6 +74,7 @@ namespace dxvk { VkPhysicalDeviceMaintenance5FeaturesKHR khrMaintenance5; VkPhysicalDevicePresentIdFeaturesKHR khrPresentId; VkPhysicalDevicePresentWaitFeaturesKHR khrPresentWait; + VkBool32 khrSwapchainMutableFormat; VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV nvDescriptorPoolOverallocation; VkBool32 nvLowLatency2; VkPhysicalDeviceRawAccessChainsFeaturesNV nvRawAccessChains; diff --git a/src/dxvk/dxvk_extensions.h b/src/dxvk/dxvk_extensions.h index 76a94bff3..3c83fb25e 100644 --- a/src/dxvk/dxvk_extensions.h +++ b/src/dxvk/dxvk_extensions.h @@ -326,6 +326,7 @@ namespace dxvk { DxvkExt khrPresentId = { VK_KHR_PRESENT_ID_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrPresentWait = { VK_KHR_PRESENT_WAIT_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrSwapchain = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, DxvkExtMode::Required }; + DxvkExt khrSwapchainMutableFormat = { VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrWin32KeyedMutex = { VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt nvDescriptorPoolOverallocation = { VK_NV_DESCRIPTOR_POOL_OVERALLOCATION_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt nvLowLatency2 = { VK_NV_LOW_LATENCY_2_EXTENSION_NAME, DxvkExtMode::Optional };