The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

xrt: App enabled extension state

Adds support for passing through which extensions an OpenXR client
has enabled to server for drivers/compositors to be able to query.

authored by

Korcan Hussein and committed by
Jakob Bornecrantz
17d8e010 0b3ef8f6

+46 -24
+2 -2
src/xrt/compositor/client/comp_d3d11_client.cpp
··· 469 469 470 470 471 471 static xrt_result_t 472 - client_d3d11_compositor_begin_session(struct xrt_compositor *xc, enum xrt_view_type type) 472 + client_d3d11_compositor_begin_session(struct xrt_compositor *xc, const struct xrt_begin_session_info *info) 473 473 { 474 474 struct client_d3d11_compositor *c = as_client_d3d11_compositor(xc); 475 475 476 476 // Pipe down call into native compositor. 477 - return xrt_comp_begin_session(&c->xcn->base, type); 477 + return xrt_comp_begin_session(&c->xcn->base, info); 478 478 } 479 479 480 480 static xrt_result_t
+2 -2
src/xrt/compositor/client/comp_d3d12_client.cpp
··· 572 572 573 573 574 574 static xrt_result_t 575 - client_d3d12_compositor_begin_session(struct xrt_compositor *xc, enum xrt_view_type type) 575 + client_d3d12_compositor_begin_session(struct xrt_compositor *xc, const struct xrt_begin_session_info *info) 576 576 { 577 577 struct client_d3d12_compositor *c = as_client_d3d12_compositor(xc); 578 578 579 579 // Pipe down call into native compositor. 580 - return xrt_comp_begin_session(&c->xcn->base, type); 580 + return xrt_comp_begin_session(&c->xcn->base, info); 581 581 } 582 582 583 583 static xrt_result_t
+2 -2
src/xrt/compositor/client/comp_gl_client.c
··· 174 174 */ 175 175 176 176 static xrt_result_t 177 - client_gl_compositor_begin_session(struct xrt_compositor *xc, enum xrt_view_type type) 177 + client_gl_compositor_begin_session(struct xrt_compositor *xc, const struct xrt_begin_session_info *info) 178 178 { 179 179 struct client_gl_compositor *c = client_gl_compositor(xc); 180 180 181 181 // Pipe down call into native compositor. 182 - return xrt_comp_begin_session(&c->xcn->base, type); 182 + return xrt_comp_begin_session(&c->xcn->base, info); 183 183 } 184 184 185 185 static xrt_result_t
+2 -2
src/xrt/compositor/client/comp_vk_client.c
··· 383 383 } 384 384 385 385 static xrt_result_t 386 - client_vk_compositor_begin_session(struct xrt_compositor *xc, enum xrt_view_type type) 386 + client_vk_compositor_begin_session(struct xrt_compositor *xc, const struct xrt_begin_session_info *info) 387 387 { 388 388 COMP_TRACE_MARKER(); 389 389 390 390 struct client_vk_compositor *c = client_vk_compositor(xc); 391 391 392 392 // Pipe down call into native compositor. 393 - return xrt_comp_begin_session(&c->xcn->base, type); 393 + return xrt_comp_begin_session(&c->xcn->base, info); 394 394 } 395 395 396 396 static xrt_result_t
+1 -1
src/xrt/compositor/main/comp_compositor.c
··· 125 125 compositor_init_renderer(struct comp_compositor *c); 126 126 127 127 static xrt_result_t 128 - compositor_begin_session(struct xrt_compositor *xc, enum xrt_view_type type) 128 + compositor_begin_session(struct xrt_compositor *xc, const struct xrt_begin_session_info *info) 129 129 { 130 130 struct comp_compositor *c = comp_compositor(xc); 131 131 COMP_DEBUG(c, "BEGIN_SESSION");
+1 -1
src/xrt/compositor/multi/comp_multi_compositor.c
··· 500 500 } 501 501 502 502 static xrt_result_t 503 - multi_compositor_begin_session(struct xrt_compositor *xc, enum xrt_view_type type) 503 + multi_compositor_begin_session(struct xrt_compositor *xc, const struct xrt_begin_session_info *info) 504 504 { 505 505 COMP_TRACE_MARKER(); 506 506
+7 -4
src/xrt/compositor/multi/comp_multi_system.c
··· 361 361 { 362 362 struct xrt_compositor *xc = &msc->xcn->base; 363 363 364 - //! @todo Don't make this a hack. 365 - enum xrt_view_type view_type = XRT_VIEW_TYPE_STEREO; 364 + //! @todo Make this not be hardcoded. 365 + const struct xrt_begin_session_info begin_session_info = { 366 + .view_type = XRT_VIEW_TYPE_STEREO, 367 + .ext_hand_tracking_enabled = false, 368 + }; 366 369 367 370 switch (msc->sessions.state) { 368 371 case MULTI_SYSTEM_STATE_INIT_WARM_START: 369 372 // Produce at least one frame on init. 370 373 msc->sessions.state = MULTI_SYSTEM_STATE_STOPPING; 371 - xrt_comp_begin_session(xc, view_type); 374 + xrt_comp_begin_session(xc, &begin_session_info); 372 375 U_LOG_I("Doing warm start, %u active app session(s).", (uint32_t)msc->sessions.active_count); 373 376 break; 374 377 ··· 378 381 } 379 382 380 383 msc->sessions.state = MULTI_SYSTEM_STATE_RUNNING; 381 - xrt_comp_begin_session(xc, view_type); 384 + xrt_comp_begin_session(xc, &begin_session_info); 382 385 U_LOG_I("Started native session, %u active app session(s).", (uint32_t)msc->sessions.active_count); 383 386 break; 384 387
+1 -1
src/xrt/compositor/null/null_compositor.c
··· 305 305 */ 306 306 307 307 static xrt_result_t 308 - null_compositor_begin_session(struct xrt_compositor *xc, enum xrt_view_type type) 308 + null_compositor_begin_session(struct xrt_compositor *xc, const struct xrt_begin_session_info *type) 309 309 { 310 310 struct null_compositor *c = null_compositor(xc); 311 311 NULL_DEBUG(c, "BEGIN_SESSION");
+13 -3
src/xrt/include/xrt/xrt_compositor.h
··· 816 816 }; 817 817 818 818 /*! 819 + * Begin Session information not known until clients have created an xrt-instance such as which 820 + * extensions are enabled, view type, etc. 821 + */ 822 + struct xrt_begin_session_info 823 + { 824 + enum xrt_view_type view_type; 825 + bool ext_hand_tracking_enabled; 826 + }; 827 + 828 + /*! 819 829 * @interface xrt_compositor 820 830 * 821 831 * Common compositor client interface/base. ··· 896 906 /*! 897 907 * See xrBeginSession. 898 908 */ 899 - xrt_result_t (*begin_session)(struct xrt_compositor *xc, enum xrt_view_type view_type); 909 + xrt_result_t (*begin_session)(struct xrt_compositor *xc, const struct xrt_begin_session_info *info); 900 910 901 911 /*! 902 912 * See xrEndSession, unlike the OpenXR one the state tracker is ··· 1300 1310 * @public @memberof xrt_compositor 1301 1311 */ 1302 1312 static inline xrt_result_t 1303 - xrt_comp_begin_session(struct xrt_compositor *xc, enum xrt_view_type view_type) 1313 + xrt_comp_begin_session(struct xrt_compositor *xc, const struct xrt_begin_session_info *info) 1304 1314 { 1305 - return xc->begin_session(xc, view_type); 1315 + return xc->begin_session(xc, info); 1306 1316 } 1307 1317 1308 1318 /*!
+1
src/xrt/include/xrt/xrt_instance.h
··· 38 38 struct xrt_instance_info 39 39 { 40 40 char application_name[XRT_MAX_APPLICATION_NAME_SIZE]; 41 + bool ext_hand_tracking_enabled; 41 42 }; 42 43 43 44 /*!
+1 -1
src/xrt/ipc/client/ipc_client_compositor.c
··· 483 483 } 484 484 485 485 static xrt_result_t 486 - ipc_compositor_begin_session(struct xrt_compositor *xc, enum xrt_view_type view_type) 486 + ipc_compositor_begin_session(struct xrt_compositor *xc, const struct xrt_begin_session_info *info) 487 487 { 488 488 struct ipc_client_compositor *icc = ipc_client_compositor(xc); 489 489
+5 -2
src/xrt/ipc/server/ipc_server_handler.c
··· 211 211 } 212 212 213 213 //! @todo Pass the view type down. 214 - enum xrt_view_type view_type = XRT_VIEW_TYPE_STEREO; 214 + const struct xrt_begin_session_info begin_session_info = { 215 + .view_type = XRT_VIEW_TYPE_STEREO, 216 + .ext_hand_tracking_enabled = ics->client_state.info.ext_hand_tracking_enabled, 217 + }; 215 218 216 - return xrt_comp_begin_session(ics->xc, view_type); 219 + return xrt_comp_begin_session(ics->xc, &begin_session_info); 217 220 } 218 221 219 222 xrt_result_t
+1
src/xrt/state_trackers/oxr/oxr_instance.c
··· 245 245 struct xrt_instance_info i_info = {0}; 246 246 snprintf(i_info.application_name, sizeof(inst->xinst->instance_info.application_name), "%s", 247 247 createInfo->applicationInfo.applicationName); 248 + i_info.ext_hand_tracking_enabled = extensions->EXT_hand_tracking; 248 249 249 250 #ifdef XRT_OS_ANDROID 250 251 XrInstanceCreateInfoAndroidKHR const *create_info_android = OXR_GET_INPUT_FROM_CHAIN(
+6 -2
src/xrt/state_trackers/oxr/oxr_session.c
··· 140 140 view_type); 141 141 } 142 142 143 - enum xrt_view_type xvt = (enum xrt_view_type)beginInfo->primaryViewConfigurationType; 144 - xrt_result_t xret = xrt_comp_begin_session(xc, xvt); 143 + const struct xrt_begin_session_info begin_session_info = { 144 + .view_type = (enum xrt_view_type)beginInfo->primaryViewConfigurationType, 145 + .ext_hand_tracking_enabled = sess->sys->inst->extensions.EXT_hand_tracking, 146 + }; 147 + 148 + xrt_result_t xret = xrt_comp_begin_session(xc, &begin_session_info); 145 149 OXR_CHECK_XRET(log, sess, xret, xrt_comp_begin_session); 146 150 } 147 151
+1 -1
src/xrt/targets/sdl_test/sdl_compositor.c
··· 313 313 */ 314 314 315 315 static xrt_result_t 316 - sdl_compositor_begin_session(struct xrt_compositor *xc, enum xrt_view_type type) 316 + sdl_compositor_begin_session(struct xrt_compositor *xc, const struct xrt_begin_session_info *info) 317 317 { 318 318 struct sdl_compositor *c = &from_comp(xc)->c; 319 319 SC_DEBUG(c, "BEGIN_SESSION");