From 5e2b7e09245a450b5d990063d765566ed399b54f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ari=20Suonp=C3=A4=C3=A4?= Date: Mon, 17 Aug 2020 13:00:50 +0300 Subject: [PATCH 1/2] Require Vulkan 1.1 or newer when using subgroup size control --- src/vulkan/device.cc | 33 +++++++-------------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/src/vulkan/device.cc b/src/vulkan/device.cc index 839acd262..ef60f1d12 100644 --- a/src/vulkan/device.cc +++ b/src/vulkan/device.cc @@ -645,37 +645,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( - 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 {}; From b160580d338bbe5cf9b9404f3d3e000969704db3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ari=20Suonp=C3=A4=C3=A4?= Date: Mon, 17 Aug 2020 13:24:31 +0300 Subject: [PATCH 2/2] Removed unused parameter. --- src/vulkan/device.cc | 1 - src/vulkan/device.h | 16 +++++++--------- src/vulkan/engine_vulkan.cc | 6 +++--- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/vulkan/device.cc b/src/vulkan/device.cc index ef60f1d12..d43b367d0 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& required_features, - const std::vector& required_instance_extensions, const std::vector& required_device_extensions, const VkPhysicalDeviceFeatures& available_features, const VkPhysicalDeviceFeatures2KHR& available_features2, diff --git a/src/vulkan/device.h b/src/vulkan/device.h index 3fe31592f..f7796d126 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& required_features, - const std::vector& required_instance_extensions, - const std::vector& required_device_extensions, - const VkPhysicalDeviceFeatures& available_features, - const VkPhysicalDeviceFeatures2KHR& available_features2, - const std::vector& available_extensions); + Result Initialize(PFN_vkGetInstanceProcAddr getInstanceProcAddr, + Delegate* delegate, + const std::vector& required_features, + const std::vector& required_device_extensions, + const VkPhysicalDeviceFeatures& available_features, + const VkPhysicalDeviceFeatures2KHR& available_features2, + const std::vector& 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 4d973f53b..0e65298d0 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;