From 378b5319bf1215c9a134d17147a6c9e3d274b16a Mon Sep 17 00:00:00 2001 From: kearwood Date: Tue, 19 Jul 2022 00:21:46 -0700 Subject: [PATCH] Vulkan device now validated to have anisotropy capable samplers. --- kraken/KRDevice.cpp | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/kraken/KRDevice.cpp b/kraken/KRDevice.cpp index 2cf6381..d04cadc 100644 --- a/kraken/KRDevice.cpp +++ b/kraken/KRDevice.cpp @@ -122,6 +122,25 @@ bool KRDevice::initialize(const std::vector& deviceExtensions) { vkGetPhysicalDeviceProperties(m_device, &m_deviceProperties); vkGetPhysicalDeviceFeatures(m_device, &m_deviceFeatures); + uint32_t extensionCount; + vkEnumerateDeviceExtensionProperties(m_device, nullptr, &extensionCount, nullptr); + + std::vector availableExtensions(extensionCount); + vkEnumerateDeviceExtensionProperties(m_device, nullptr, &extensionCount, availableExtensions.data()); + + std::set requiredExtensions(deviceExtensions.begin(), deviceExtensions.end()); + + for (const auto& extension : availableExtensions) { + requiredExtensions.erase(extension.extensionName); + } + if (!requiredExtensions.empty()) { + // Missing a required extension + return false; + } + if (!m_deviceFeatures.samplerAnisotropy) { + // Anisotropy feature required + return false; + } uint32_t queueFamilyCount = 0; vkGetPhysicalDeviceQueueFamilyProperties(m_device, &queueFamilyCount, nullptr); @@ -225,22 +244,6 @@ bool KRDevice::initialize(const std::vector& deviceExtensions) m_computeFamilyQueueIndex = computeFamilyQueue; m_transferFamilyQueueIndex = transferFamilyQueue; - uint32_t extensionCount; - vkEnumerateDeviceExtensionProperties(m_device, nullptr, &extensionCount, nullptr); - - std::vector availableExtensions(extensionCount); - vkEnumerateDeviceExtensionProperties(m_device, nullptr, &extensionCount, availableExtensions.data()); - - std::set requiredExtensions(deviceExtensions.begin(), deviceExtensions.end()); - - for (const auto& extension : availableExtensions) { - requiredExtensions.erase(extension.extensionName); - } - if (!requiredExtensions.empty()) { - // Missing a required extension - return false; - } - // ---- VkDeviceQueueCreateInfo queueCreateInfo[3]{}; @@ -270,6 +273,7 @@ bool KRDevice::initialize(const std::vector& deviceExtensions) deviceCreateInfo.pQueueCreateInfos = queueCreateInfo; deviceCreateInfo.queueCreateInfoCount = queueCount; VkPhysicalDeviceFeatures deviceFeatures{}; + deviceFeatures.samplerAnisotropy = VK_TRUE; deviceCreateInfo.pEnabledFeatures = &deviceFeatures; deviceCreateInfo.enabledExtensionCount = static_cast(deviceExtensions.size()); deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions.data();