aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorasuonpaa <34128694+asuonpaa@users.noreply.github.com>2020-08-18 12:29:42 +0300
committerGitHub <noreply@github.com>2020-08-18 10:29:42 +0100
commit97e58d80577f60179450bf050168a9a40475db9c (patch)
tree83d4c685a18a9b9239523839448e9bdd412d8d54
parent70f6725a0ab6b9d5f9f5df1f00db01414e60025f (diff)
downloadamber-97e58d80577f60179450bf050168a9a40475db9c.tar.gz
Require Vulkan 1.1 or newer when using subgroup size control (#902)
-rw-r--r--src/vulkan/device.cc34
-rw-r--r--src/vulkan/device.h16
-rw-r--r--src/vulkan/engine_vulkan.cc6
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;