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