diff options
author | dan sinclair <dj2@everburning.com> | 2019-02-21 09:52:47 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-21 09:52:47 -0500 |
commit | 21b3eff43a9bf9968b8ee22627ed31e8b7d7bc55 (patch) | |
tree | ab26737df8e92e9d64a4311835285e42318c7d8d /samples | |
parent | 198777a4ef5d14364a736d9b4b8df61a84614fc3 (diff) | |
download | amber-21b3eff43a9bf9968b8ee22627ed31e8b7d7bc55.tar.gz |
Hold required features as strings. (#309)
This CL keeps the required features as strings as long as possible. This
will allow extending the list of features with additional entries.
Diffstat (limited to 'samples')
-rw-r--r-- | samples/config_helper_vulkan.cc | 49 | ||||
-rw-r--r-- | samples/config_helper_vulkan.h | 8 |
2 files changed, 34 insertions, 23 deletions
diff --git a/samples/config_helper_vulkan.cc b/samples/config_helper_vulkan.cc index 640bdef..bc77fa9 100644 --- a/samples/config_helper_vulkan.cc +++ b/samples/config_helper_vulkan.cc @@ -652,7 +652,7 @@ amber::Result ConfigHelperVulkan::CreateDebugReportCallback() { } amber::Result ConfigHelperVulkan::ChooseVulkanPhysicalDevice( - const VkPhysicalDeviceFeatures& required_features, + const std::vector<std::string>& required_features, const std::vector<std::string>& required_extensions) { uint32_t count = 0; std::vector<VkPhysicalDevice> physical_devices; @@ -668,6 +668,12 @@ amber::Result ConfigHelperVulkan::ChooseVulkanPhysicalDevice( return amber::Result("Unable to enumerate physical devices"); } + VkPhysicalDeviceFeatures required_vulkan_features = {}; + amber::Result r = + NamesToVulkanFeatures(required_features, &required_vulkan_features); + if (!r.IsSuccess()) + return r; + for (uint32_t i = 0; i < count; ++i) { if (use_physical_device_features2_) { VkPhysicalDeviceFeatures2KHR features2 = {}; @@ -684,7 +690,7 @@ amber::Result ConfigHelperVulkan::ChooseVulkanPhysicalDevice( vkGetPhysicalDeviceFeatures(physical_devices[i], &available_features_); } if (!AreAllRequiredFeaturesSupported(available_features_, - required_features)) { + required_vulkan_features)) { continue; } @@ -706,7 +712,7 @@ amber::Result ConfigHelperVulkan::ChooseVulkanPhysicalDevice( } amber::Result ConfigHelperVulkan::CreateVulkanDevice( - const VkPhysicalDeviceFeatures& required_features, + const std::vector<std::string>& required_features, const std::vector<std::string>& required_extensions) { VkDeviceQueueCreateInfo queue_info = {}; const float priorities[] = {1.0f}; @@ -736,18 +742,30 @@ amber::Result ConfigHelperVulkan::CreateVulkanDevice( } amber::Result ConfigHelperVulkan::CreateDeviceWithFeatures1( - const VkPhysicalDeviceFeatures& required_features, + const std::vector<std::string>& required_features, VkDeviceCreateInfo* info) { - info->pEnabledFeatures = &required_features; + VkPhysicalDeviceFeatures required_vulkan_features = {}; + amber::Result r = + NamesToVulkanFeatures(required_features, &required_vulkan_features); + if (!r.IsSuccess()) + return r; + + info->pEnabledFeatures = &required_vulkan_features; return DoCreateDevice(info); } amber::Result ConfigHelperVulkan::CreateDeviceWithFeatures2( - const VkPhysicalDeviceFeatures& required_features, + const std::vector<std::string>& required_features, VkDeviceCreateInfo* info) { + VkPhysicalDeviceFeatures required_vulkan_features = {}; + amber::Result r = + NamesToVulkanFeatures(required_features, &required_vulkan_features); + if (!r.IsSuccess()) + return r; + available_features2_.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR; available_features2_.pNext = nullptr; - available_features2_.features = required_features; + available_features2_.features = required_vulkan_features; info->pNext = &available_features2_; info->pEnabledFeatures = nullptr; @@ -770,15 +788,9 @@ amber::Result ConfigHelperVulkan::CreateConfig( const std::vector<std::string>& required_device_extensions, bool disable_validation_layer, std::unique_ptr<amber::EngineConfig>* cfg_holder) { - VkPhysicalDeviceFeatures required_vulkan_features = {}; - amber::Result r = - NamesToVulkanFeatures(required_features, &required_vulkan_features); - if (!r.IsSuccess()) - return r; - - r = CreateVulkanInstance(engine_major, engine_minor, - required_instance_extensions, - disable_validation_layer); + amber::Result r = CreateVulkanInstance(engine_major, engine_minor, + required_instance_extensions, + disable_validation_layer); if (!r.IsSuccess()) return r; @@ -788,12 +800,11 @@ amber::Result ConfigHelperVulkan::CreateConfig( return r; } - r = ChooseVulkanPhysicalDevice(required_vulkan_features, - required_device_extensions); + r = ChooseVulkanPhysicalDevice(required_features, required_device_extensions); if (!r.IsSuccess()) return r; - r = CreateVulkanDevice(required_vulkan_features, required_device_extensions); + r = CreateVulkanDevice(required_features, required_device_extensions); if (!r.IsSuccess()) return r; diff --git a/samples/config_helper_vulkan.h b/samples/config_helper_vulkan.h index d1817e2..3408a80 100644 --- a/samples/config_helper_vulkan.h +++ b/samples/config_helper_vulkan.h @@ -68,22 +68,22 @@ class ConfigHelperVulkan : public ConfigHelperImpl { // Choose Vulkan physical device that supports both // |required_features| and |required_extensions|. amber::Result ChooseVulkanPhysicalDevice( - const VkPhysicalDeviceFeatures& required_features, + const std::vector<std::string>& required_features, const std::vector<std::string>& required_extensions); // Create Vulkan logical device that enables both // |required_features| and |required_extensions|. amber::Result CreateVulkanDevice( - const VkPhysicalDeviceFeatures& required_features, + const std::vector<std::string>& required_features, const std::vector<std::string>& required_extensions); // Sets up the device creation to use VkPhysicalDeviceFeatures. amber::Result CreateDeviceWithFeatures1( - const VkPhysicalDeviceFeatures& required_features, + const std::vector<std::string>& required_features, VkDeviceCreateInfo* info); // Sets up the device creation to use VkPhysicalDeviceFeatures2KHR. amber::Result CreateDeviceWithFeatures2( - const VkPhysicalDeviceFeatures& required_features, + const std::vector<std::string>& required_features, VkDeviceCreateInfo* info); // Creates the physical device given the device |info|. |