From 95788d70957ed6cd849d3419b9a9406316e21fdb Mon Sep 17 00:00:00 2001 From: kd-11 Date: Mon, 11 Apr 2022 00:28:56 +0300 Subject: [PATCH] Request DLSS extensions only when they are supported --- Source/VulkanDevice.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Source/VulkanDevice.cpp b/Source/VulkanDevice.cpp index fca247e0..785ffa58 100644 --- a/Source/VulkanDevice.cpp +++ b/Source/VulkanDevice.cpp @@ -1406,6 +1406,14 @@ void VulkanDevice::CreateInstance(const RgInstanceCreateInfo &info) layerNames.push_back("VK_LAYER_LUNARG_monitor"); } + std::vector supportedInstanceExtensions; + uint32_t supportedExtensionsCount; + + if (vkEnumerateInstanceExtensionProperties(nullptr, &supportedExtensionsCount, nullptr) == VK_SUCCESS) + { + supportedInstanceExtensions.resize(supportedExtensionsCount); + vkEnumerateInstanceExtensionProperties(nullptr, &supportedExtensionsCount, supportedInstanceExtensions.data()); + } std::vector extensions = { @@ -1441,6 +1449,18 @@ void VulkanDevice::CreateInstance(const RgInstanceCreateInfo &info) for (const char *n : DLSS::GetDlssVulkanInstanceExtensions()) { + const bool isSupported = std::any_of(supportedInstanceExtensions.cbegin(), supportedInstanceExtensions.cend(), + [&](const VkExtensionProperties& ext) + { + return !std::strcmp(ext.extensionName, n); + } + ); + + if (!isSupported) + { + continue; + } + extensions.push_back(n); } @@ -1580,6 +1600,14 @@ void VulkanDevice::CreateDevice() physicalDeviceFeatures2.pNext = &asFeatures; physicalDeviceFeatures2.features = features; + std::vector supportedDeviceExtensions; + uint32_t supportedExtensionsCount; + + if (vkEnumerateDeviceExtensionProperties(physDevice->Get(), nullptr, &supportedExtensionsCount, nullptr) == VK_SUCCESS) + { + supportedDeviceExtensions.resize(supportedExtensionsCount); + vkEnumerateInstanceExtensionProperties(nullptr, &supportedExtensionsCount, supportedDeviceExtensions.data()); + } std::vector deviceExtensions = { VK_KHR_SWAPCHAIN_EXTENSION_NAME, @@ -1593,6 +1621,18 @@ void VulkanDevice::CreateDevice() for (const char *n : DLSS::GetDlssVulkanDeviceExtensions()) { + const bool isSupported = std::any_of(supportedDeviceExtensions.cbegin(), supportedDeviceExtensions.cend(), + [&](const VkExtensionProperties& ext) + { + return !std::strcmp(ext.extensionName, n); + } + ); + + if (!isSupported) + { + continue; + } + deviceExtensions.push_back(n); }