diff options
author | asuonpaa <34128694+asuonpaa@users.noreply.github.com> | 2020-08-18 12:29:42 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-18 10:29:42 +0100 |
commit | 97e58d80577f60179450bf050168a9a40475db9c (patch) | |
tree | 83d4c685a18a9b9239523839448e9bdd412d8d54 | |
parent | 70f6725a0ab6b9d5f9f5df1f00db01414e60025f (diff) | |
download | amber-97e58d80577f60179450bf050168a9a40475db9c.tar.gz |
Require Vulkan 1.1 or newer when using subgroup size control (#902)
-rw-r--r-- | src/vulkan/device.cc | 34 | ||||
-rw-r--r-- | src/vulkan/device.h | 16 | ||||
-rw-r--r-- | src/vulkan/engine_vulkan.cc | 6 |
3 files changed, 17 insertions, 39 deletions
diff --git a/src/vulkan/device.cc b/src/vulkan/device.cc index 839acd2..d43b367 100644 --- a/src/vulkan/device.cc +++ b/src/vulkan/device.cc @@ -404,7 +404,6 @@ Result Device::Initialize( PFN_vkGetInstanceProcAddr getInstanceProcAddr, Delegate* delegate, const std::vector<std::string>& required_features, - const std::vector<std::string>& required_instance_extensions, const std::vector<std::string>& required_device_extensions, const VkPhysicalDeviceFeatures& available_features, const VkPhysicalDeviceFeatures2KHR& available_features2, @@ -645,37 +644,18 @@ Result Device::Initialize( kSubgroupSizeControl) != required_features.end(); if (needs_subgroup_size_control) { - VkPhysicalDeviceProperties2KHR properties2 = {}; - properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR; + VkPhysicalDeviceProperties2 properties2 = {}; + properties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2; properties2.pNext = &subgroup_size_control_properties_; subgroup_size_control_properties_.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT; - if (SupportsApiVersion(1, 1, 0)) { - // Use vkGetPhysicalDeviceProperties2 available starting Vulkan - // version 1.1. - ptrs_.vkGetPhysicalDeviceProperties2(physical_device_, &properties2); - } else { - // Vulkan 1.0: search for the VK_KHR_get_physical_device_properties2 - // extension and use that for filling the properties2 structure. - bool extension_found = false; - for (auto& ext : required_instance_extensions) { - if (ext == "VK_KHR_get_physical_device_properties2") - extension_found = true; - } - if (!extension_found) { - return Result( - "Vulkan: Device::Initialize subgroup size control feature also " - "requires VK_KHR_get_physical_device_properties2 or an API version " - "of 1.1 or higher"); - } - PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR = - reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2KHR>( - getInstanceProcAddr(instance_, - "vkGetPhysicalDeviceProperties2KHR")); - - vkGetPhysicalDeviceProperties2KHR(physical_device_, &properties2); + if (!SupportsApiVersion(1, 1, 0)) { + return Result( + "Vulkan: Device::Initialize subgroup size control feature also " + "requires an API version of 1.1 or higher"); } + ptrs_.vkGetPhysicalDeviceProperties2(physical_device_, &properties2); } return {}; diff --git a/src/vulkan/device.h b/src/vulkan/device.h index 3fe3159..f7796d1 100644 --- a/src/vulkan/device.h +++ b/src/vulkan/device.h @@ -43,15 +43,13 @@ class Device { VkQueue queue); virtual ~Device(); - Result Initialize( - PFN_vkGetInstanceProcAddr getInstanceProcAddr, - Delegate* delegate, - const std::vector<std::string>& required_features, - const std::vector<std::string>& required_instance_extensions, - const std::vector<std::string>& required_device_extensions, - const VkPhysicalDeviceFeatures& available_features, - const VkPhysicalDeviceFeatures2KHR& available_features2, - const std::vector<std::string>& available_extensions); + Result Initialize(PFN_vkGetInstanceProcAddr getInstanceProcAddr, + Delegate* delegate, + const std::vector<std::string>& required_features, + const std::vector<std::string>& required_device_extensions, + const VkPhysicalDeviceFeatures& available_features, + const VkPhysicalDeviceFeatures2KHR& available_features2, + const std::vector<std::string>& available_extensions); /// Returns true if |format| and the |buffer|s buffer type combination is /// supported by the physical device. diff --git a/src/vulkan/engine_vulkan.cc b/src/vulkan/engine_vulkan.cc index 4d973f5..0e65298 100644 --- a/src/vulkan/engine_vulkan.cc +++ b/src/vulkan/engine_vulkan.cc @@ -118,9 +118,9 @@ Result EngineVulkan::Initialize( vk_config->queue); Result r = device_->Initialize( - vk_config->vkGetInstanceProcAddr, delegate, features, instance_extensions, - device_extensions, vk_config->available_features, - vk_config->available_features2, vk_config->available_device_extensions); + vk_config->vkGetInstanceProcAddr, delegate, features, device_extensions, + vk_config->available_features, vk_config->available_features2, + vk_config->available_device_extensions); if (!r.IsSuccess()) return r; |