From 6c3ab4151a81a32455a79f9c6ee1bb250a6ddc1d Mon Sep 17 00:00:00 2001
From: Jakob Bornecrantz <jakob@collabora.com>
Date: Wed, 3 Mar 2021 17:27:42 +0000
Subject: [PATCH] st/oxr: Handle XRT_ERROR_EGL_CONFIG_MISSING

---
 src/xrt/state_trackers/oxr/oxr_session_egl.c          | 5 +++++
 src/xrt/state_trackers/oxr/oxr_session_gles_android.c | 5 +++++
 src/xrt/state_trackers/oxr/oxr_verify.c               | 4 +---
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/xrt/state_trackers/oxr/oxr_session_egl.c b/src/xrt/state_trackers/oxr/oxr_session_egl.c
index 26cfdead1..465039029 100644
--- a/src/xrt/state_trackers/oxr/oxr_session_egl.c
+++ b/src/xrt/state_trackers/oxr/oxr_session_egl.c
@@ -69,6 +69,11 @@ oxr_session_populate_egl(struct oxr_logger *log,
 	    next->getProcAddress,                           //
 	    &xcgl);                                         //
 
+	if (xret == XRT_ERROR_EGL_CONFIG_MISSING) {
+		return oxr_error(log, XR_ERROR_VALIDATION_FAILURE,
+		                 "XrGraphicsBindingEGLMNDX::config can not be null when EGL_KHR_no_config_context is "
+		                 "not supported by the display.");
+	}
 	if (xret != XR_SUCCESS || xcgl == NULL) {
 		return oxr_error(log, XR_ERROR_INITIALIZATION_FAILED, "Failed to create an egl client compositor");
 	}
diff --git a/src/xrt/state_trackers/oxr/oxr_session_gles_android.c b/src/xrt/state_trackers/oxr/oxr_session_gles_android.c
index 615ed39e8..be55ab2d2 100644
--- a/src/xrt/state_trackers/oxr/oxr_session_gles_android.c
+++ b/src/xrt/state_trackers/oxr/oxr_session_gles_android.c
@@ -77,6 +77,11 @@ oxr_session_populate_gles_android(struct oxr_logger *log,
 	    get_proc_addr,                                  //
 	    &xcgl);                                         //
 
+	if (xret == XRT_ERROR_EGL_CONFIG_MISSING) {
+		return oxr_error(log, XR_ERROR_VALIDATION_FAILURE,
+		                 "XrGraphicsBindingEGLMNDX::config can not be null when EGL_KHR_no_config_context is "
+		                 "not supported by the display.");
+	}
 	if (xret != XR_SUCCESS || xcgl == NULL) {
 		return oxr_error(log, XR_ERROR_INITIALIZATION_FAILED, "Failed to create an egl client compositor");
 	}
diff --git a/src/xrt/state_trackers/oxr/oxr_verify.c b/src/xrt/state_trackers/oxr/oxr_verify.c
index eade7f524..c70abfbfb 100644
--- a/src/xrt/state_trackers/oxr/oxr_verify.c
+++ b/src/xrt/state_trackers/oxr/oxr_verify.c
@@ -564,9 +564,7 @@ oxr_verify_XrGraphicsBindingEGLMNDX(struct oxr_logger *log, const XrGraphicsBind
 		return oxr_error(log, XR_ERROR_VALIDATION_FAILURE, "XrGraphicsBindingEGLMNDX::display cannot be NULL");
 	}
 
-	if (next->config == NULL) {
-		return oxr_error(log, XR_ERROR_VALIDATION_FAILURE, "XrGraphicsBindingEGLMNDX::config cannot be NULL");
-	}
+	// The next->config field can be NULL if EGL_KHR_no_config_context is supported by the display.
 
 	if (next->context == NULL) {
 		return oxr_error(log, XR_ERROR_VALIDATION_FAILURE, "XrGraphicsBindingEGLMNDX::context cannot be NULL");