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