From c8515e142d33702abd997ea98f2ce2bb9d7316e9 Mon Sep 17 00:00:00 2001
From: Benjamin Saunders <ben.e.saunders@gmail.com>
Date: Sun, 24 Mar 2019 14:13:35 -0700
Subject: [PATCH] st/oxr: Ignore graphics bindings from disabled extensions

---
 src/xrt/state_trackers/oxr/oxr_instance.c |  8 ++++++++
 src/xrt/state_trackers/oxr/oxr_objects.h  |  6 +++---
 src/xrt/state_trackers/oxr/oxr_verify.cpp | 14 +++++++++++++-
 3 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/xrt/state_trackers/oxr/oxr_instance.c b/src/xrt/state_trackers/oxr/oxr_instance.c
index a872432d9..951189329 100644
--- a/src/xrt/state_trackers/oxr/oxr_instance.c
+++ b/src/xrt/state_trackers/oxr/oxr_instance.c
@@ -89,10 +89,18 @@ oxr_instance_create(struct oxr_logger *log,
 	inst->timekeeping = time_state_create();
 
 	inst->headless = false;
+	inst->opengl_enable = false;
+	inst->vulkan_enable = false;
 	for (uint32_t i = 0; i < createInfo->enabledExtensionCount; ++i) {
 		if (strcmp(createInfo->enabledExtensionNames[i],
 		           XR_KHR_HEADLESS_EXTENSION_NAME) == 0) {
 			inst->headless = true;
+		} else if (strcmp(createInfo->enabledExtensionNames[i],
+		                  XR_KHR_OPENGL_ENABLE_EXTENSION_NAME) == 0) {
+			inst->opengl_enable = true;
+		} else if (strcmp(createInfo->enabledExtensionNames[i],
+		                  XR_KHR_VULKAN_ENABLE_EXTENSION_NAME) == 0) {
+			inst->vulkan_enable = true;
 		}
 	}
 
diff --git a/src/xrt/state_trackers/oxr/oxr_objects.h b/src/xrt/state_trackers/oxr/oxr_objects.h
index f074c9972..711af9610 100644
--- a/src/xrt/state_trackers/oxr/oxr_objects.h
+++ b/src/xrt/state_trackers/oxr/oxr_objects.h
@@ -429,10 +429,10 @@ struct oxr_instance
 	uint64_t debug;
 	struct xrt_prober *prober;
 
-	/*!
-	 * Whether headless sessions can be created
-	 */
+	// Enabled extensions
 	bool headless;
+	bool opengl_enable;
+	bool vulkan_enable;
 
 	// Hardcoded single system.
 	struct oxr_system system;
diff --git a/src/xrt/state_trackers/oxr/oxr_verify.cpp b/src/xrt/state_trackers/oxr/oxr_verify.cpp
index fa5447c65..1dc871a16 100644
--- a/src/xrt/state_trackers/oxr/oxr_verify.cpp
+++ b/src/xrt/state_trackers/oxr/oxr_verify.cpp
@@ -92,12 +92,24 @@ oxr_verify_XrSessionCreateInfo(struct oxr_logger* log,
 	XrStructureType* next_type = (XrStructureType*)createInfo->next;
 #ifdef XR_USE_PLATFORM_XLIB
 	if (*next_type == XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR) {
+		if (!inst->opengl_enable) {
+			return oxr_error(
+			    log, XR_ERROR_VALIDATION_FAILURE,
+			    "OpenGL "
+			    "requires " XR_KHR_OPENGL_ENABLE_EXTENSION_NAME);
+		}
 		return oxr_verify_XrGraphicsBindingOpenGLXlibKHR(
 		    log, (XrGraphicsBindingOpenGLXlibKHR*)createInfo->next);
 	} else
 #endif
 #ifdef XR_USE_GRAPHICS_API_VULKAN
-	    if (*next_type == XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR) {
+	if (*next_type == XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR) {
+		if (!inst->vulkan_enable) {
+			return oxr_error(
+			    log, XR_ERROR_VALIDATION_FAILURE,
+			    "Vulkan "
+			    "requires " XR_KHR_VULKAN_ENABLE_EXTENSION_NAME);
+		}
 		return oxr_verify_XrGraphicsBindingVulkanKHR(
 		    log, (XrGraphicsBindingVulkanKHR*)createInfo->next);
 	} else