Vulkan device now validated to have anisotropy capable samplers.
This commit is contained in:
@@ -122,6 +122,25 @@ bool KRDevice::initialize(const std::vector<const char*>& deviceExtensions)
|
|||||||
{
|
{
|
||||||
vkGetPhysicalDeviceProperties(m_device, &m_deviceProperties);
|
vkGetPhysicalDeviceProperties(m_device, &m_deviceProperties);
|
||||||
vkGetPhysicalDeviceFeatures(m_device, &m_deviceFeatures);
|
vkGetPhysicalDeviceFeatures(m_device, &m_deviceFeatures);
|
||||||
|
uint32_t extensionCount;
|
||||||
|
vkEnumerateDeviceExtensionProperties(m_device, nullptr, &extensionCount, nullptr);
|
||||||
|
|
||||||
|
std::vector<VkExtensionProperties> availableExtensions(extensionCount);
|
||||||
|
vkEnumerateDeviceExtensionProperties(m_device, nullptr, &extensionCount, availableExtensions.data());
|
||||||
|
|
||||||
|
std::set<std::string> 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;
|
uint32_t queueFamilyCount = 0;
|
||||||
vkGetPhysicalDeviceQueueFamilyProperties(m_device, &queueFamilyCount, nullptr);
|
vkGetPhysicalDeviceQueueFamilyProperties(m_device, &queueFamilyCount, nullptr);
|
||||||
@@ -225,22 +244,6 @@ bool KRDevice::initialize(const std::vector<const char*>& deviceExtensions)
|
|||||||
m_computeFamilyQueueIndex = computeFamilyQueue;
|
m_computeFamilyQueueIndex = computeFamilyQueue;
|
||||||
m_transferFamilyQueueIndex = transferFamilyQueue;
|
m_transferFamilyQueueIndex = transferFamilyQueue;
|
||||||
|
|
||||||
uint32_t extensionCount;
|
|
||||||
vkEnumerateDeviceExtensionProperties(m_device, nullptr, &extensionCount, nullptr);
|
|
||||||
|
|
||||||
std::vector<VkExtensionProperties> availableExtensions(extensionCount);
|
|
||||||
vkEnumerateDeviceExtensionProperties(m_device, nullptr, &extensionCount, availableExtensions.data());
|
|
||||||
|
|
||||||
std::set<std::string> 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]{};
|
VkDeviceQueueCreateInfo queueCreateInfo[3]{};
|
||||||
@@ -270,6 +273,7 @@ bool KRDevice::initialize(const std::vector<const char*>& deviceExtensions)
|
|||||||
deviceCreateInfo.pQueueCreateInfos = queueCreateInfo;
|
deviceCreateInfo.pQueueCreateInfos = queueCreateInfo;
|
||||||
deviceCreateInfo.queueCreateInfoCount = queueCount;
|
deviceCreateInfo.queueCreateInfoCount = queueCount;
|
||||||
VkPhysicalDeviceFeatures deviceFeatures{};
|
VkPhysicalDeviceFeatures deviceFeatures{};
|
||||||
|
deviceFeatures.samplerAnisotropy = VK_TRUE;
|
||||||
deviceCreateInfo.pEnabledFeatures = &deviceFeatures;
|
deviceCreateInfo.pEnabledFeatures = &deviceFeatures;
|
||||||
deviceCreateInfo.enabledExtensionCount = static_cast<uint32_t>(deviceExtensions.size());
|
deviceCreateInfo.enabledExtensionCount = static_cast<uint32_t>(deviceExtensions.size());
|
||||||
deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions.data();
|
deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions.data();
|
||||||
|
|||||||
Reference in New Issue
Block a user