summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chia-I Wu <olv@google.com> 2016-04-27 09:54:02 +0800
committer Chia-I Wu <olv@google.com> 2016-04-28 08:52:42 +0800
commit04c6551eb812a7efe38fa74e6ac67c17aab3df2d (patch)
tree22366643413b2fe84c740bbff99981671a9b53ce
parent25700b452535ce7ae838bfe832392b46ed555ed2 (diff)
vulkan: refactor layer extension enumeration
Replace Get*LayerExtensions by a set of new functions that do not distinguish instance and device layers. There should be no user-visible change. Bug: 27911856 Change-Id: Icd98abf51a936769f8f2f218794043b5e2611c5c
-rw-r--r--vulkan/libvulkan/api.cpp18
-rw-r--r--vulkan/libvulkan/layers_extensions.cpp46
-rw-r--r--vulkan/libvulkan/layers_extensions.h11
3 files changed, 39 insertions, 36 deletions
diff --git a/vulkan/libvulkan/api.cpp b/vulkan/libvulkan/api.cpp
index e3f69fea82..6d558eec80 100644
--- a/vulkan/libvulkan/api.cpp
+++ b/vulkan/libvulkan/api.cpp
@@ -1123,7 +1123,14 @@ VkResult EnumerateInstanceExtensionProperties(
if (pLayerName) {
const VkExtensionProperties* props;
uint32_t count;
- GetInstanceLayerExtensions(pLayerName, &props, &count);
+
+ const Layer* layer = FindLayer(pLayerName);
+ if (layer) {
+ props = GetLayerInstanceExtensions(*layer, count);
+ } else {
+ props = nullptr;
+ count = 0;
+ }
if (!pProperties || *pPropertyCount > count)
*pPropertyCount = count;
@@ -1181,7 +1188,14 @@ VkResult EnumerateDeviceExtensionProperties(
if (pLayerName) {
const VkExtensionProperties* props;
uint32_t count;
- GetDeviceLayerExtensions(pLayerName, &props, &count);
+
+ const Layer* layer = FindLayer(pLayerName);
+ if (layer && IsLayerGlobal(*layer)) {
+ props = GetLayerDeviceExtensions(*layer, count);
+ } else {
+ props = nullptr;
+ count = 0;
+ }
if (!pProperties || *pPropertyCount > count)
*pPropertyCount = count;
diff --git a/vulkan/libvulkan/layers_extensions.cpp b/vulkan/libvulkan/layers_extensions.cpp
index 4363dd8fa8..b7558a28ea 100644
--- a/vulkan/libvulkan/layers_extensions.cpp
+++ b/vulkan/libvulkan/layers_extensions.cpp
@@ -331,12 +331,7 @@ void DiscoverLayersInDirectory(const std::string& dir_path) {
}
const Layer* FindInstanceLayer(const char* name) {
- auto layer =
- std::find_if(g_instance_layers.cbegin(), g_instance_layers.cend(),
- [=](const Layer& entry) {
- return strcmp(entry.properties.layerName, name) == 0;
- });
- return (layer != g_instance_layers.cend()) ? &*layer : nullptr;
+ return FindLayer(name);
}
const Layer* FindDeviceLayer(const char* name) {
@@ -368,6 +363,15 @@ const Layer& GetLayer(uint32_t index) {
return g_instance_layers[index];
}
+const Layer* FindLayer(const char* name) {
+ auto layer =
+ std::find_if(g_instance_layers.cbegin(), g_instance_layers.cend(),
+ [=](const Layer& entry) {
+ return strcmp(entry.properties.layerName, name) == 0;
+ });
+ return (layer != g_instance_layers.cend()) ? &*layer : nullptr;
+}
+
const VkLayerProperties& GetLayerProperties(const Layer& layer) {
return layer.properties;
}
@@ -376,30 +380,16 @@ bool IsLayerGlobal(const Layer& layer) {
return layer.is_global;
}
-void GetInstanceLayerExtensions(const char* name,
- const VkExtensionProperties** properties,
- uint32_t* count) {
- const Layer* layer = FindInstanceLayer(name);
- if (layer) {
- *properties = layer->instance_extensions.data();
- *count = static_cast<uint32_t>(layer->instance_extensions.size());
- } else {
- *properties = nullptr;
- *count = 0;
- }
+const VkExtensionProperties* GetLayerInstanceExtensions(const Layer& layer,
+ uint32_t& count) {
+ count = static_cast<uint32_t>(layer.instance_extensions.size());
+ return layer.instance_extensions.data();
}
-void GetDeviceLayerExtensions(const char* name,
- const VkExtensionProperties** properties,
- uint32_t* count) {
- const Layer* layer = FindDeviceLayer(name);
- if (layer) {
- *properties = layer->device_extensions.data();
- *count = static_cast<uint32_t>(layer->device_extensions.size());
- } else {
- *properties = nullptr;
- *count = 0;
- }
+const VkExtensionProperties* GetLayerDeviceExtensions(const Layer& layer,
+ uint32_t& count) {
+ count = static_cast<uint32_t>(layer.device_extensions.size());
+ return layer.device_extensions.data();
}
LayerRef GetInstanceLayerRef(const char* name) {
diff --git a/vulkan/libvulkan/layers_extensions.h b/vulkan/libvulkan/layers_extensions.h
index ee85f00227..899d60039b 100644
--- a/vulkan/libvulkan/layers_extensions.h
+++ b/vulkan/libvulkan/layers_extensions.h
@@ -52,16 +52,15 @@ void DiscoverLayers();
uint32_t GetLayerCount();
const Layer& GetLayer(uint32_t index);
+const Layer* FindLayer(const char* name);
const VkLayerProperties& GetLayerProperties(const Layer& layer);
bool IsLayerGlobal(const Layer& layer);
+const VkExtensionProperties* GetLayerInstanceExtensions(const Layer& layer,
+ uint32_t& count);
+const VkExtensionProperties* GetLayerDeviceExtensions(const Layer& layer,
+ uint32_t& count);
-void GetInstanceLayerExtensions(const char* name,
- const VkExtensionProperties** properties,
- uint32_t* count);
-void GetDeviceLayerExtensions(const char* name,
- const VkExtensionProperties** properties,
- uint32_t* count);
LayerRef GetInstanceLayerRef(const char* name);
LayerRef GetDeviceLayerRef(const char* name);