aboutsummaryrefslogtreecommitdiff
path: root/layers
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2016-06-24 09:57:32 -0600
committerMark Lobodzinski <mark@lunarg.com>2016-06-29 09:19:54 -0600
commit12e39c2ec5e5251bc02c20dc640b17bbcf073d17 (patch)
tree4009ab46a780c377f588d31296d0bdaf67940ec4 /layers
parent232cba4976761d364d2081e123749dbaf7e213ad (diff)
downloadusermoji-12e39c2ec5e5251bc02c20dc640b17bbcf073d17.tar.xz
layers: GH618, Correct WSI exension flag usage
Object_tracker had no notion of individual WSI extension flags, and unique_objects was not checking them. Change-Id: I93c1aa0c324aa602717f36e2975120dba8bc364e
Diffstat (limited to 'layers')
-rw-r--r--layers/object_tracker.h50
-rw-r--r--layers/unique_objects.h5
2 files changed, 47 insertions, 8 deletions
diff --git a/layers/object_tracker.h b/layers/object_tracker.h
index 333775ae..7c00c249 100644
--- a/layers/object_tracker.h
+++ b/layers/object_tracker.h
@@ -89,11 +89,17 @@ struct layer_data {
tmp_dbg_create_infos(nullptr), tmp_callbacks(nullptr){};
};
-struct instExts {
+struct instance_extension_enables {
bool wsi_enabled;
+ bool xlib_enabled;
+ bool xcb_enabled;
+ bool wayland_enabled;
+ bool mir_enabled;
+ bool android_enabled;
+ bool win32_enabled;
};
-static std::unordered_map<void *, struct instExts> instanceExtMap;
+static std::unordered_map<void *, struct instance_extension_enables> instanceExtMap;
static std::unordered_map<void *, layer_data *> layer_data_map;
static device_table_map object_tracker_device_table_map;
static instance_table_map object_tracker_instance_table_map;
@@ -135,7 +141,6 @@ static void createDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo
}
static void createInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) {
- uint32_t i;
VkLayerInstanceDispatchTable *pDisp = get_dispatch_table(object_tracker_instance_table_map, instance);
PFN_vkGetInstanceProcAddr gpa = pDisp->GetInstanceProcAddr;
@@ -178,11 +183,44 @@ static void createInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreate
pDisp->CreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR)gpa(instance, "vkCreateAndroidSurfaceKHR");
#endif // VK_USE_PLATFORM_ANDROID_KHR
- instanceExtMap[pDisp].wsi_enabled = false;
- for (i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
- if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0)
+ instanceExtMap[pDisp] = {};
+
+ for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) {
instanceExtMap[pDisp].wsi_enabled = true;
+ }
+#ifdef VK_USE_PLATFORM_XLIB_KHR
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XLIB_SURFACE_EXTENSION_NAME) == 0) {
+ instanceExtMap[pDisp].xlib_enabled = true;
+ }
+#endif
+#ifdef VK_USE_PLATFORM_XCB_KHR
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XCB_SURFACE_EXTENSION_NAME) == 0) {
+ instanceExtMap[pDisp].xcb_enabled = true;
+ }
+#endif
+#ifdef VK_USE_PLATFORM_WAYLAND_KHR
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME) == 0) {
+ instanceExtMap[pDisp].wayland_enabled = true;
+ }
+#endif
+#ifdef VK_USE_PLATFORM_MIR_KHR
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_MIR_SURFACE_EXTENSION_NAME) == 0) {
+ instanceExtMap[pDisp].mir_enabled = true;
+ }
+#endif
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_ANDROID_SURFACE_EXTENSION_NAME) == 0) {
+ instanceExtMap[pDisp].android_enabled = true;
+ }
+#endif
+#ifdef VK_USE_PLATFORM_WIN32_KHR
+ if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WIN32_SURFACE_EXTENSION_NAME) == 0) {
+ instanceExtMap[pDisp].win32_enabled = true;
+ }
+#endif
}
+
}
// Indicate device or instance dispatch table type
diff --git a/layers/unique_objects.h b/layers/unique_objects.h
index 9abf240c..942724f1 100644
--- a/layers/unique_objects.h
+++ b/layers/unique_objects.h
@@ -54,7 +54,7 @@ struct layer_data {
layer_data() : wsi_enabled(false), gpu(VK_NULL_HANDLE){};
};
-struct instExts {
+struct instance_extension_enables {
bool wsi_enabled;
bool xlib_enabled;
bool xcb_enabled;
@@ -64,7 +64,7 @@ struct instExts {
bool win32_enabled;
};
-static std::unordered_map<void *, struct instExts> instanceExtMap;
+static std::unordered_map<void *, struct instance_extension_enables> instanceExtMap;
static std::unordered_map<void *, layer_data *> layer_data_map;
static device_table_map unique_objects_device_table_map;
static instance_table_map unique_objects_instance_table_map;
@@ -115,6 +115,7 @@ static void createInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreate
#endif // VK_USE_PLATFORM_ANDROID_KHR
instanceExtMap[pDisp] = {};
+
for (i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0)
instanceExtMap[pDisp].wsi_enabled = true;