aboutsummaryrefslogtreecommitdiff
path: root/layers/device_limits.cpp
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2016-04-28 15:16:59 +0800
committerTobin Ehlis <tobine@google.com>2016-05-05 06:42:19 -0600
commitf03ee39a4b4ed5de896853836833e5905e91e0d6 (patch)
tree5d769a62e67a14782361e3cb5a5cddb6e3c0f9d2 /layers/device_limits.cpp
parent9c6dd75f7ee889b02a07d2b0fa49cfacfa63069e (diff)
downloadusermoji-f03ee39a4b4ed5de896853836833e5905e91e0d6.tar.xz
device_limits: improve GetInstanceProcAddr
Handle device commands as well. Move handling of interface functions to v0's vkGetInstanceProcAddr.
Diffstat (limited to 'layers/device_limits.cpp')
-rw-r--r--layers/device_limits.cpp31
1 files changed, 20 insertions, 11 deletions
diff --git a/layers/device_limits.cpp b/layers/device_limits.cpp
index 5acd9bf6..e97c54ad 100644
--- a/layers/device_limits.cpp
+++ b/layers/device_limits.cpp
@@ -706,21 +706,19 @@ GetDeviceProcAddr(VkDevice dev, const char *funcName) {
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL
GetInstanceProcAddr(VkInstance instance, const char *funcName) {
PFN_vkVoidFunction proc = intercept_core_instance_command(funcName);
+ if (!proc)
+ intercept_core_device_command(funcName);
if (proc)
return proc;
- PFN_vkVoidFunction fptr;
-
layer_data *my_data;
- if (!instance)
- return NULL;
-
+ assert(instance);
my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
- fptr = debug_report_get_instance_proc_addr(my_data->report_data, funcName);
- if (fptr)
- return fptr;
+ proc = debug_report_get_instance_proc_addr(my_data->report_data, funcName);
+ if (proc)
+ return proc;
{
VkLayerInstanceDispatchTable *pTable = my_data->instance_dispatch_table;
@@ -749,12 +747,14 @@ intercept_core_instance_command(const char *name) {
{ "vkGetPhysicalDeviceQueueFamilyProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceQueueFamilyProperties) },
{ "vkGetPhysicalDeviceMemoryProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceMemoryProperties) },
{ "vkGetPhysicalDeviceSparseImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSparseImageFormatProperties) },
- { "vkEnumerateInstanceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateInstanceLayerProperties) },
- { "vkEnumerateDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceLayerProperties) },
- { "vkEnumerateInstanceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateInstanceExtensionProperties) },
{ "vkEnumerateDeviceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateDeviceExtensionProperties) },
};
+ // we should never be queried for these commands
+ assert(strcmp(name, "vkEnumerateInstanceLayerProperties") &&
+ strcmp(name, "vkEnumerateInstanceExtensionProperties") &&
+ strcmp(name, "vkEnumerateDeviceLayerProperties"));
+
for (size_t i = 0; i < ARRAY_SIZE(core_instance_commands); i++) {
if (!strcmp(core_instance_commands[i].name, name))
return core_instance_commands[i].proc;
@@ -846,5 +846,14 @@ VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkD
}
VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) {
+ if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
+ return reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateInstanceLayerProperties);
+ if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
+ return reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceLayerProperties);
+ if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
+ return reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateInstanceExtensionProperties);
+ if (!strcmp(funcName, "vkGetInstanceProcAddr"))
+ return reinterpret_cast<PFN_vkVoidFunction>(vkGetInstanceProcAddr);
+
return device_limits::GetInstanceProcAddr(instance, funcName);
}