1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-04-12 03:02:33 +02:00

[dxvk] Enable VK_KHR_maintenance7 if available

This commit is contained in:
Philip Rebohle 2025-03-21 13:24:58 +01:00
parent 9aa2df2172
commit 779fc6625f
3 changed files with 28 additions and 1 deletions

View File

@ -444,9 +444,11 @@ namespace dxvk {
m_deviceFeatures.extSwapchainMaintenance1.swapchainMaintenance1 && m_deviceFeatures.extSwapchainMaintenance1.swapchainMaintenance1 &&
instance->extensions().extSurfaceMaintenance1; instance->extensions().extSurfaceMaintenance1;
// Enable maintenance5 if supported // Enable maintenance features if supported
enabledFeatures.khrMaintenance5.maintenance5 = enabledFeatures.khrMaintenance5.maintenance5 =
m_deviceFeatures.khrMaintenance5.maintenance5; m_deviceFeatures.khrMaintenance5.maintenance5;
enabledFeatures.khrMaintenance7.maintenance7 =
m_deviceFeatures.khrMaintenance7.maintenance7;
// Enable present id and present wait together, if possible // Enable present id and present wait together, if possible
enabledFeatures.khrPresentId.presentId = enabledFeatures.khrPresentId.presentId =
@ -657,6 +659,10 @@ namespace dxvk {
enabledFeatures.khrMaintenance5 = *reinterpret_cast<const VkPhysicalDeviceMaintenance5FeaturesKHR*>(f); enabledFeatures.khrMaintenance5 = *reinterpret_cast<const VkPhysicalDeviceMaintenance5FeaturesKHR*>(f);
break; break;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR:
enabledFeatures.khrMaintenance7 = *reinterpret_cast<const VkPhysicalDeviceMaintenance7FeaturesKHR*>(f);
break;
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR: case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR:
enabledFeatures.khrPresentId = *reinterpret_cast<const VkPhysicalDevicePresentIdFeaturesKHR*>(f); enabledFeatures.khrPresentId = *reinterpret_cast<const VkPhysicalDevicePresentIdFeaturesKHR*>(f);
break; break;
@ -841,6 +847,11 @@ namespace dxvk {
m_deviceInfo.khrMaintenance5.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.khrMaintenance5); m_deviceInfo.khrMaintenance5.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.khrMaintenance5);
} }
if (m_deviceExtensions.supports(VK_KHR_MAINTENANCE_7_EXTENSION_NAME)) {
m_deviceInfo.khrMaintenance7.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_PROPERTIES_KHR;
m_deviceInfo.khrMaintenance7.pNext = std::exchange(m_deviceInfo.core.pNext, &m_deviceInfo.khrMaintenance7);
}
// Query full device properties for all enabled extensions // Query full device properties for all enabled extensions
m_vki->vkGetPhysicalDeviceProperties2(m_handle, &m_deviceInfo.core); m_vki->vkGetPhysicalDeviceProperties2(m_handle, &m_deviceInfo.core);
@ -981,6 +992,11 @@ namespace dxvk {
m_deviceFeatures.khrMaintenance5.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.khrMaintenance5); m_deviceFeatures.khrMaintenance5.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.khrMaintenance5);
} }
if (m_deviceExtensions.supports(VK_KHR_MAINTENANCE_7_EXTENSION_NAME)) {
m_deviceFeatures.khrMaintenance7.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR;
m_deviceFeatures.khrMaintenance7.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.khrMaintenance7);
}
if (m_deviceExtensions.supports(VK_KHR_PRESENT_ID_EXTENSION_NAME)) { if (m_deviceExtensions.supports(VK_KHR_PRESENT_ID_EXTENSION_NAME)) {
m_deviceFeatures.khrPresentId.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR; m_deviceFeatures.khrPresentId.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR;
m_deviceFeatures.khrPresentId.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.khrPresentId); m_deviceFeatures.khrPresentId.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.khrPresentId);
@ -1065,6 +1081,7 @@ namespace dxvk {
&devExtensions.khrExternalMemoryWin32, &devExtensions.khrExternalMemoryWin32,
&devExtensions.khrExternalSemaphoreWin32, &devExtensions.khrExternalSemaphoreWin32,
&devExtensions.khrMaintenance5, &devExtensions.khrMaintenance5,
&devExtensions.khrMaintenance7,
&devExtensions.khrPipelineLibrary, &devExtensions.khrPipelineLibrary,
&devExtensions.khrPresentId, &devExtensions.khrPresentId,
&devExtensions.khrPresentWait, &devExtensions.khrPresentWait,
@ -1213,6 +1230,11 @@ namespace dxvk {
enabledFeatures.khrMaintenance5.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.khrMaintenance5); enabledFeatures.khrMaintenance5.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.khrMaintenance5);
} }
if (devExtensions.khrMaintenance7) {
enabledFeatures.khrMaintenance7.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR;
enabledFeatures.khrMaintenance7.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.khrMaintenance7);
}
if (devExtensions.khrPresentId) { if (devExtensions.khrPresentId) {
enabledFeatures.khrPresentId.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR; enabledFeatures.khrPresentId.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR;
enabledFeatures.khrPresentId.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.khrPresentId); enabledFeatures.khrPresentId.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.khrPresentId);
@ -1386,6 +1408,8 @@ namespace dxvk {
"\n extension supported : " << (features.khrExternalSemaphoreWin32 ? "1" : "0") << "\n extension supported : " << (features.khrExternalSemaphoreWin32 ? "1" : "0") <<
"\n" << VK_KHR_MAINTENANCE_5_EXTENSION_NAME << "\n" << VK_KHR_MAINTENANCE_5_EXTENSION_NAME <<
"\n maintenance5 : " << (features.khrMaintenance5.maintenance5 ? "1" : "0") << "\n maintenance5 : " << (features.khrMaintenance5.maintenance5 ? "1" : "0") <<
"\n" << VK_KHR_MAINTENANCE_7_EXTENSION_NAME <<
"\n maintenance7 : " << (features.khrMaintenance7.maintenance7 ? "1" : "0") <<
"\n" << VK_KHR_PRESENT_ID_EXTENSION_NAME << "\n" << VK_KHR_PRESENT_ID_EXTENSION_NAME <<
"\n presentId : " << (features.khrPresentId.presentId ? "1" : "0") << "\n presentId : " << (features.khrPresentId.presentId ? "1" : "0") <<
"\n" << VK_KHR_PRESENT_WAIT_EXTENSION_NAME << "\n" << VK_KHR_PRESENT_WAIT_EXTENSION_NAME <<

View File

@ -30,6 +30,7 @@ namespace dxvk {
VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback; VkPhysicalDeviceTransformFeedbackPropertiesEXT extTransformFeedback;
VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor; VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT extVertexAttributeDivisor;
VkPhysicalDeviceMaintenance5PropertiesKHR khrMaintenance5; VkPhysicalDeviceMaintenance5PropertiesKHR khrMaintenance5;
VkPhysicalDeviceMaintenance7PropertiesKHR khrMaintenance7;
}; };
@ -72,6 +73,7 @@ namespace dxvk {
VkBool32 khrExternalMemoryWin32; VkBool32 khrExternalMemoryWin32;
VkBool32 khrExternalSemaphoreWin32; VkBool32 khrExternalSemaphoreWin32;
VkPhysicalDeviceMaintenance5FeaturesKHR khrMaintenance5; VkPhysicalDeviceMaintenance5FeaturesKHR khrMaintenance5;
VkPhysicalDeviceMaintenance7FeaturesKHR khrMaintenance7;
VkPhysicalDevicePresentIdFeaturesKHR khrPresentId; VkPhysicalDevicePresentIdFeaturesKHR khrPresentId;
VkPhysicalDevicePresentWaitFeaturesKHR khrPresentWait; VkPhysicalDevicePresentWaitFeaturesKHR khrPresentWait;
VkBool32 khrSwapchainMutableFormat; VkBool32 khrSwapchainMutableFormat;

View File

@ -322,6 +322,7 @@ namespace dxvk {
DxvkExt khrExternalMemoryWin32 = { VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrExternalMemoryWin32 = { VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrExternalSemaphoreWin32 = { VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrExternalSemaphoreWin32 = { VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrMaintenance5 = { VK_KHR_MAINTENANCE_5_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrMaintenance5 = { VK_KHR_MAINTENANCE_5_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrMaintenance7 = { VK_KHR_MAINTENANCE_7_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrPipelineLibrary = { VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrPipelineLibrary = { VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrPresentId = { VK_KHR_PRESENT_ID_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrPresentId = { VK_KHR_PRESENT_ID_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt khrPresentWait = { VK_KHR_PRESENT_WAIT_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt khrPresentWait = { VK_KHR_PRESENT_WAIT_EXTENSION_NAME, DxvkExtMode::Optional };