aboutsummaryrefslogtreecommitdiff
path: root/samples
diff options
context:
space:
mode:
authordan sinclair <dj2@everburning.com>2019-02-21 09:52:47 -0500
committerGitHub <noreply@github.com>2019-02-21 09:52:47 -0500
commit21b3eff43a9bf9968b8ee22627ed31e8b7d7bc55 (patch)
treeab26737df8e92e9d64a4311835285e42318c7d8d /samples
parent198777a4ef5d14364a736d9b4b8df61a84614fc3 (diff)
downloadamber-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.cc49
-rw-r--r--samples/config_helper_vulkan.h8
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|.