The open source OpenXR runtime
0
fork

Configure Feed

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

st/oxr: Implement the EXT_active_action_set_priority extension

This is required for proper action set priority emulation in OpenComposite.

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2370>

+126 -64
+49 -47
CMakeLists.txt
··· 344 344 mark_as_advanced(XRT_MODULE_COMPOSITOR_MAIN XRT_MODULE_COMPOSITOR_NULL XRT_FEATURE_OPENXR) 345 345 346 346 # Misc extension support. 347 + option(XRT_FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY "Enable XR_EXT_active_action_set_priority" ON) 347 348 option(XRT_FEATURE_OPENXR_BODY_TRACKING_FB "Enable XR_FB_body_tracking" OFF) 348 349 option(XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE "Enable XR_FB_display_refresh_rate" ON) 349 350 option(XRT_FEATURE_OPENXR_FACE_TRACKING2_FB "Enable XR_FB_face_tracking2" OFF) ··· 574 575 message(STATUS "# MODULE_MONADO_GUI: ${XRT_MODULE_MONADO_GUI}") 575 576 message(STATUS "# MODULE_MONADO_CLI: ${XRT_MODULE_MONADO_CLI}") 576 577 message(STATUS "#") 577 - message(STATUS "# FEATURE_AHARDWARE_BUFFER: ${XRT_FEATURE_AHARDWARE_BUFFER}") 578 - message(STATUS "# FEATURE_CLIENT_DEBUG_GUI: ${XRT_FEATURE_CLIENT_DEBUG_GUI}") 579 - message(STATUS "# FEATURE_COLOR_LOG: ${XRT_FEATURE_COLOR_LOG}") 580 - message(STATUS "# FEATURE_DEBUG_GUI: ${XRT_FEATURE_DEBUG_GUI}") 581 - message(STATUS "# FEATURE_OPENXR: ${XRT_FEATURE_OPENXR}") 582 - message(STATUS "# FEATURE_OPENXR_BODY_TRACKING_FB: ${XRT_FEATURE_OPENXR_BODY_TRACKING_FB}") 583 - message(STATUS "# FEATURE_OPENXR_FACE_TRACKING2_FB: ${XRT_FEATURE_OPENXR_FACE_TRACKING2_FB}") 584 - message(STATUS "# FEATURE_OPENXR_DEBUG_UTILS: ${XRT_FEATURE_OPENXR_DEBUG_UTILS}") 585 - message(STATUS "# FEATURE_OPENXR_DISPLAY_REFRESH_RATE: ${XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE}") 586 - message(STATUS "# FEATURE_OPENXR_FACIAL_TRACKING_HTC: ${XRT_FEATURE_OPENXR_FACIAL_TRACKING_HTC}") 587 - message(STATUS "# FEATURE_OPENXR_FORCE_FEEDBACK_CURL: ${XRT_FEATURE_OPENXR_FORCE_FEEDBACK_CURL}") 588 - message(STATUS "# FEATURE_OPENXR_HAND_TRACKING_EXT: ${XRT_FEATURE_OPENXR_HAND_TRACKING_EXT}") 589 - message(STATUS "# FEATURE_OPENXR_HEADLESS: ${XRT_FEATURE_OPENXR_HEADLESS}") 590 - message(STATUS "# FEATURE_OPENXR_INTERACTION_EXT_EYE_GAZE: ${XRT_FEATURE_OPENXR_INTERACTION_EXT_EYE_GAZE}") 591 - message(STATUS "# FEATURE_OPENXR_INTERACTION_EXT_HAND: ${XRT_FEATURE_OPENXR_INTERACTION_EXT_HAND}") 592 - message(STATUS "# FEATURE_OPENXR_INTERACTION_EXT_PALM_POSE: ${XRT_FEATURE_OPENXR_INTERACTION_EXT_PALM_POSE}") 593 - message(STATUS "# FEATURE_OPENXR_INTERACTION_ML2: ${XRT_FEATURE_OPENXR_INTERACTION_ML2}") 594 - message(STATUS "# FEATURE_OPENXR_INTERACTION_MNDX: ${XRT_FEATURE_OPENXR_INTERACTION_MNDX}") 595 - message(STATUS "# FEATURE_OPENXR_INTERACTION_MSFT_HAND: ${XRT_FEATURE_OPENXR_INTERACTION_MSFT_HAND}") 596 - message(STATUS "# FEATURE_OPENXR_INTERACTION_OPPO: ${XRT_FEATURE_OPENXR_INTERACTION_OPPO}") 597 - message(STATUS "# FEATURE_OPENXR_INTERACTION_WINMR: ${XRT_FEATURE_OPENXR_INTERACTION_WINMR}") 598 - message(STATUS "# FEATURE_OPENXR_LAYER_COLOR_SCALE_BIAS: ${XRT_FEATURE_OPENXR_LAYER_COLOR_SCALE_BIAS}") 599 - message(STATUS "# FEATURE_OPENXR_LAYER_CUBE: ${XRT_FEATURE_OPENXR_LAYER_CUBE}") 600 - message(STATUS "# FEATURE_OPENXR_LAYER_CYLINDER: ${XRT_FEATURE_OPENXR_LAYER_CYLINDER}") 601 - message(STATUS "# FEATURE_OPENXR_LAYER_DEPTH: ${XRT_FEATURE_OPENXR_LAYER_DEPTH}") 602 - message(STATUS "# FEATURE_OPENXR_LAYER_EQUIRECT1: ${XRT_FEATURE_OPENXR_LAYER_EQUIRECT1}") 603 - message(STATUS "# FEATURE_OPENXR_LAYER_EQUIRECT2: ${XRT_FEATURE_OPENXR_LAYER_EQUIRECT2}") 604 - message(STATUS "# FEATURE_OPENXR_LAYER_FB_ALPHA_BLEND: ${XRT_FEATURE_OPENXR_LAYER_FB_ALPHA_BLEND}") 605 - message(STATUS "# FEATURE_OPENXR_LAYER_FB_DEPTH_TEST: ${XRT_FEATURE_OPENXR_LAYER_FB_DEPTH_TEST}") 606 - message(STATUS "# FEATURE_OPENXR_LAYER_FB_IMAGE_LAYOUT ${XRT_FEATURE_OPENXR_LAYER_FB_IMAGE_LAYOUT}") 607 - message(STATUS "# FEATURE_OPENXR_LAYER_FB_SETTINGS: ${XRT_FEATURE_OPENXR_LAYER_FB_SETTINGS}") 608 - message(STATUS "# FEATURE_OPENXR_LAYER_FB_PASSTHROUGH: ${XRT_FEATURE_OPENXR_LAYER_FB_PASSTHROUGH}") 609 - message(STATUS "# FEATURE_OPENXR_OVERLAY: ${XRT_FEATURE_OPENXR_OVERLAY}") 610 - message(STATUS "# FEATURE_OPENXR_PERFORMANCE_SETTINGS: ${XRT_FEATURE_OPENXR_PERFORMANCE_SETTINGS}") 611 - message(STATUS "# FEATURE_OPENXR_SPACE_LOCAL_FLOOR: ${XRT_FEATURE_OPENXR_SPACE_LOCAL_FLOOR}") 612 - message(STATUS "# FEATURE_OPENXR_SPACE_UNBOUNDED: ${XRT_FEATURE_OPENXR_SPACE_UNBOUNDED}") 613 - message(STATUS "# FEATURE_OPENXR_VISIBILITY_MASK ${XRT_FEATURE_OPENXR_VISIBILITY_MASK}") 614 - message(STATUS "# FEATURE_OPENXR_VULKAN_SWAPCHAIN_FORMAT_LIST ${XRT_FEATURE_OPENXR_VULKAN_SWAPCHAIN_FORMAT_LIST}") 615 - message(STATUS "# FEATURE_OPENXR_XDEV_SPACE: ${XRT_FEATURE_OPENXR_XDEV_SPACE}") 616 - message(STATUS "# FEATURE_RENDERDOC: ${XRT_FEATURE_RENDERDOC}") 617 - message(STATUS "# FEATURE_SERVICE: ${XRT_FEATURE_SERVICE}") 618 - message(STATUS "# FEATURE_SERVICE_SYSTEMD: ${XRT_FEATURE_SERVICE_SYSTEMD}") 619 - message(STATUS "# FEATURE_SLAM: ${XRT_FEATURE_SLAM}") 620 - message(STATUS "# FEATURE_SSE2: ${XRT_FEATURE_SSE2}") 621 - message(STATUS "# FEATURE_STEAMVR_PLUGIN: ${XRT_FEATURE_STEAMVR_PLUGIN}") 622 - message(STATUS "# FEATURE_TRACING: ${XRT_FEATURE_TRACING}") 623 - message(STATUS "# FEATURE_WINDOW_PEEK: ${XRT_FEATURE_WINDOW_PEEK}") 578 + message(STATUS "# FEATURE_AHARDWARE_BUFFER: ${XRT_FEATURE_AHARDWARE_BUFFER}") 579 + message(STATUS "# FEATURE_CLIENT_DEBUG_GUI: ${XRT_FEATURE_CLIENT_DEBUG_GUI}") 580 + message(STATUS "# FEATURE_COLOR_LOG: ${XRT_FEATURE_COLOR_LOG}") 581 + message(STATUS "# FEATURE_DEBUG_GUI: ${XRT_FEATURE_DEBUG_GUI}") 582 + message(STATUS "# FEATURE_OPENXR: ${XRT_FEATURE_OPENXR}") 583 + message(STATUS "# FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY: ${XRT_FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY}") 584 + message(STATUS "# FEATURE_OPENXR_BODY_TRACKING_FB: ${XRT_FEATURE_OPENXR_BODY_TRACKING_FB}") 585 + message(STATUS "# FEATURE_OPENXR_FACE_TRACKING2_FB: ${XRT_FEATURE_OPENXR_FACE_TRACKING2_FB}") 586 + message(STATUS "# FEATURE_OPENXR_DEBUG_UTILS: ${XRT_FEATURE_OPENXR_DEBUG_UTILS}") 587 + message(STATUS "# FEATURE_OPENXR_DISPLAY_REFRESH_RATE: ${XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE}") 588 + message(STATUS "# FEATURE_OPENXR_FACIAL_TRACKING_HTC: ${XRT_FEATURE_OPENXR_FACIAL_TRACKING_HTC}") 589 + message(STATUS "# FEATURE_OPENXR_FORCE_FEEDBACK_CURL: ${XRT_FEATURE_OPENXR_FORCE_FEEDBACK_CURL}") 590 + message(STATUS "# FEATURE_OPENXR_HAND_TRACKING_EXT: ${XRT_FEATURE_OPENXR_HAND_TRACKING_EXT}") 591 + message(STATUS "# FEATURE_OPENXR_HEADLESS: ${XRT_FEATURE_OPENXR_HEADLESS}") 592 + message(STATUS "# FEATURE_OPENXR_INTERACTION_EXT_EYE_GAZE: ${XRT_FEATURE_OPENXR_INTERACTION_EXT_EYE_GAZE}") 593 + message(STATUS "# FEATURE_OPENXR_INTERACTION_EXT_HAND: ${XRT_FEATURE_OPENXR_INTERACTION_EXT_HAND}") 594 + message(STATUS "# FEATURE_OPENXR_INTERACTION_EXT_PALM_POSE: ${XRT_FEATURE_OPENXR_INTERACTION_EXT_PALM_POSE}") 595 + message(STATUS "# FEATURE_OPENXR_INTERACTION_ML2: ${XRT_FEATURE_OPENXR_INTERACTION_ML2}") 596 + message(STATUS "# FEATURE_OPENXR_INTERACTION_MNDX: ${XRT_FEATURE_OPENXR_INTERACTION_MNDX}") 597 + message(STATUS "# FEATURE_OPENXR_INTERACTION_MSFT_HAND: ${XRT_FEATURE_OPENXR_INTERACTION_MSFT_HAND}") 598 + message(STATUS "# FEATURE_OPENXR_INTERACTION_OPPO: ${XRT_FEATURE_OPENXR_INTERACTION_OPPO}") 599 + message(STATUS "# FEATURE_OPENXR_INTERACTION_WINMR: ${XRT_FEATURE_OPENXR_INTERACTION_WINMR}") 600 + message(STATUS "# FEATURE_OPENXR_LAYER_COLOR_SCALE_BIAS: ${XRT_FEATURE_OPENXR_LAYER_COLOR_SCALE_BIAS}") 601 + message(STATUS "# FEATURE_OPENXR_LAYER_CUBE: ${XRT_FEATURE_OPENXR_LAYER_CUBE}") 602 + message(STATUS "# FEATURE_OPENXR_LAYER_CYLINDER: ${XRT_FEATURE_OPENXR_LAYER_CYLINDER}") 603 + message(STATUS "# FEATURE_OPENXR_LAYER_DEPTH: ${XRT_FEATURE_OPENXR_LAYER_DEPTH}") 604 + message(STATUS "# FEATURE_OPENXR_LAYER_EQUIRECT1: ${XRT_FEATURE_OPENXR_LAYER_EQUIRECT1}") 605 + message(STATUS "# FEATURE_OPENXR_LAYER_EQUIRECT2: ${XRT_FEATURE_OPENXR_LAYER_EQUIRECT2}") 606 + message(STATUS "# FEATURE_OPENXR_LAYER_FB_ALPHA_BLEND: ${XRT_FEATURE_OPENXR_LAYER_FB_ALPHA_BLEND}") 607 + message(STATUS "# FEATURE_OPENXR_LAYER_FB_DEPTH_TEST: ${XRT_FEATURE_OPENXR_LAYER_FB_DEPTH_TEST}") 608 + message(STATUS "# FEATURE_OPENXR_LAYER_FB_IMAGE_LAYOUT ${XRT_FEATURE_OPENXR_LAYER_FB_IMAGE_LAYOUT}") 609 + message(STATUS "# FEATURE_OPENXR_LAYER_FB_SETTINGS: ${XRT_FEATURE_OPENXR_LAYER_FB_SETTINGS}") 610 + message(STATUS "# FEATURE_OPENXR_LAYER_FB_PASSTHROUGH: ${XRT_FEATURE_OPENXR_LAYER_FB_PASSTHROUGH}") 611 + message(STATUS "# FEATURE_OPENXR_OVERLAY: ${XRT_FEATURE_OPENXR_OVERLAY}") 612 + message(STATUS "# FEATURE_OPENXR_PERFORMANCE_SETTINGS: ${XRT_FEATURE_OPENXR_PERFORMANCE_SETTINGS}") 613 + message(STATUS "# FEATURE_OPENXR_SPACE_LOCAL_FLOOR: ${XRT_FEATURE_OPENXR_SPACE_LOCAL_FLOOR}") 614 + message(STATUS "# FEATURE_OPENXR_SPACE_UNBOUNDED: ${XRT_FEATURE_OPENXR_SPACE_UNBOUNDED}") 615 + message(STATUS "# FEATURE_OPENXR_VISIBILITY_MASK: ${XRT_FEATURE_OPENXR_VISIBILITY_MASK}") 616 + message(STATUS "# FEATURE_OPENXR_VULKAN_SWAPCHAIN_FORMAT_LIST: ${XRT_FEATURE_OPENXR_VULKAN_SWAPCHAIN_FORMAT_LIST}") 617 + message(STATUS "# FEATURE_OPENXR_XDEV_SPACE: ${XRT_FEATURE_OPENXR_XDEV_SPACE}") 618 + message(STATUS "# FEATURE_RENDERDOC: ${XRT_FEATURE_RENDERDOC}") 619 + message(STATUS "# FEATURE_SERVICE: ${XRT_FEATURE_SERVICE}") 620 + message(STATUS "# FEATURE_SERVICE_SYSTEMD: ${XRT_FEATURE_SERVICE_SYSTEMD}") 621 + message(STATUS "# FEATURE_SLAM: ${XRT_FEATURE_SLAM}") 622 + message(STATUS "# FEATURE_SSE2: ${XRT_FEATURE_SSE2}") 623 + message(STATUS "# FEATURE_STEAMVR_PLUGIN: ${XRT_FEATURE_STEAMVR_PLUGIN}") 624 + message(STATUS "# FEATURE_TRACING: ${XRT_FEATURE_TRACING}") 625 + message(STATUS "# FEATURE_WINDOW_PEEK: ${XRT_FEATURE_WINDOW_PEEK}") 624 626 message(STATUS "#") 625 627 message(STATUS "# DRIVER_ANDROID: ${XRT_BUILD_DRIVER_ANDROID}") 626 628 message(STATUS "# DRIVER_ARDUINO: ${XRT_BUILD_DRIVER_ARDUINO}")
+1
doc/changes/state_trackers/mr.2370.md
··· 1 + - st/oxr: Implement the EXT_active_action_set_priority extension.
+1
scripts/generate_oxr_ext_support.py
··· 57 57 ['XR_KHR_vulkan_enable2', 'XR_USE_GRAPHICS_API_VULKAN'], 58 58 ['XR_KHR_vulkan_swapchain_format_list', 'XR_USE_GRAPHICS_API_VULKAN', 'XRT_FEATURE_OPENXR_VULKAN_SWAPCHAIN_FORMAT_LIST'], 59 59 ['XR_KHR_win32_convert_performance_counter_time', 'XR_USE_PLATFORM_WIN32'], 60 + ['XR_EXT_active_action_set_priority', 'XRT_FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY'], 60 61 ['XR_EXT_debug_utils', 'XRT_FEATURE_OPENXR_DEBUG_UTILS'], 61 62 ['XR_EXT_dpad_binding'], 62 63 ['XR_EXT_eye_gaze_interaction', 'XRT_FEATURE_OPENXR_INTERACTION_EXT_EYE_GAZE'],
+1
scripts/mapping.imp
··· 32 32 { symbol: ["XRT_FEATURE_COLOR_LOG", "public", "\"xrt/xrt_config_build.h\"", "public"] }, 33 33 { symbol: ["XRT_FEATURE_DEBUG_GUI", "public", "\"xrt/xrt_config_build.h\"", "public"] }, 34 34 { symbol: ["XRT_FEATURE_OPENXR", "public", "\"xrt/xrt_config_build.h\"", "public"] }, 35 + { symbol: ["XRT_FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY", "public", "\"xrt/xrt_config_build.h\"", "public"] }, 35 36 { symbol: ["XRT_FEATURE_OPENXR_BODY_TRACKING_FB", "public", "\"xrt/xrt_config_build.h\"", "public"] }, 36 37 { symbol: ["XRT_FEATURE_OPENXR_DEBUG_UTILS", "public", "\"xrt/xrt_config_build.h\"", "public"] }, 37 38 { symbol: ["XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE", "public", "\"xrt/xrt_config_build.h\"", "public"] },
+1
src/xrt/include/xrt/xrt_config_build.h.cmake_in
··· 29 29 #cmakedefine XRT_FEATURE_COLOR_LOG 30 30 #cmakedefine XRT_FEATURE_DEBUG_GUI 31 31 #cmakedefine XRT_FEATURE_OPENXR 32 + #cmakedefine XRT_FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY 32 33 #cmakedefine XRT_FEATURE_OPENXR_BODY_TRACKING_FB 33 34 #cmakedefine XRT_FEATURE_OPENXR_DEBUG_UTILS 34 35 #cmakedefine XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE
+15 -1
src/xrt/state_trackers/oxr/oxr_api_action.c
··· 132 132 OXR_VERIFY_SESSION_NOT_LOST(&log, sess); 133 133 OXR_VERIFY_ARG_TYPE_AND_NOT_NULL(&log, syncInfo, XR_TYPE_ACTIONS_SYNC_INFO); 134 134 135 + const XrActiveActionSetPrioritiesEXT *active_priorities = NULL; 136 + 137 + #ifdef OXR_HAVE_EXT_active_action_set_priority 138 + active_priorities = OXR_GET_OUTPUT_FROM_CHAIN(syncInfo->next, XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT, 139 + const XrActiveActionSetPrioritiesEXT); 140 + 141 + // ensure that if the active priority override is present, 142 + // the EXT_active_action_set_priority extension is enabled 143 + if (active_priorities) { 144 + OXR_VERIFY_EXTENSION(&log, sess->sys->inst, EXT_active_action_set_priority); 145 + } 146 + #endif 147 + 135 148 struct xrt_system_roles sys_roles = XRT_STRUCT_INIT; 136 149 xrt_system_devices_get_roles(sess->sys->xsysd, &sys_roles); 137 150 { ··· 159 172 } 160 173 } 161 174 162 - return oxr_action_sync_data(&log, sess, syncInfo->countActiveActionSets, syncInfo->activeActionSets); 175 + return oxr_action_sync_data(&log, sess, syncInfo->countActiveActionSets, syncInfo->activeActionSets, 176 + active_priorities); 163 177 } 164 178 165 179 XRAPI_ATTR XrResult XRAPI_CALL
+1 -1
src/xrt/state_trackers/oxr/oxr_chain.h
··· 61 61 * casting. 62 62 */ 63 63 static inline XrBaseOutStructure * 64 - oxr_find_output_in_chain(void *ptr, XrStructureType desired) 64 + oxr_find_output_in_chain(const void *ptr, XrStructureType desired) 65 65 { 66 66 while (ptr != NULL) { 67 67 XrBaseOutStructure *base = (XrBaseOutStructure *)ptr;
+13
src/xrt/state_trackers/oxr/oxr_extension_support.h
··· 294 294 295 295 296 296 /* 297 + * XR_EXT_active_action_set_priority 298 + */ 299 + #if defined(XR_EXT_active_action_set_priority) && defined(XRT_FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY) 300 + #define OXR_HAVE_EXT_active_action_set_priority 301 + #define OXR_EXTENSION_SUPPORT_EXT_active_action_set_priority(_) \ 302 + _(EXT_active_action_set_priority, EXT_ACTIVE_ACTION_SET_PRIORITY) 303 + #else 304 + #define OXR_EXTENSION_SUPPORT_EXT_active_action_set_priority(_) 305 + #endif 306 + 307 + 308 + /* 297 309 * XR_EXT_debug_utils 298 310 */ 299 311 #if defined(XR_EXT_debug_utils) && defined(XRT_FEATURE_OPENXR_DEBUG_UTILS) ··· 783 795 OXR_EXTENSION_SUPPORT_KHR_vulkan_enable2(_) \ 784 796 OXR_EXTENSION_SUPPORT_KHR_vulkan_swapchain_format_list(_) \ 785 797 OXR_EXTENSION_SUPPORT_KHR_win32_convert_performance_counter_time(_) \ 798 + OXR_EXTENSION_SUPPORT_EXT_active_action_set_priority(_) \ 786 799 OXR_EXTENSION_SUPPORT_EXT_debug_utils(_) \ 787 800 OXR_EXTENSION_SUPPORT_EXT_dpad_binding(_) \ 788 801 OXR_EXTENSION_SUPPORT_EXT_eye_gaze_interaction(_) \
+42 -14
src/xrt/state_trackers/oxr/oxr_input.c
··· 58 58 struct oxr_action_cache *cache, 59 59 int64_t time, 60 60 struct oxr_subaction_paths *subaction_path, 61 - bool select); 61 + bool select, 62 + const XrActiveActionSetPrioritiesEXT *active_priorities); 62 63 63 64 static void 64 65 oxr_action_attachment_update(struct oxr_logger *log, ··· 67 68 const XrActiveActionSet *actionSets, 68 69 struct oxr_action_attachment *act_attached, 69 70 int64_t time, 70 - struct oxr_subaction_paths subaction_paths); 71 + struct oxr_subaction_paths subaction_paths, 72 + const XrActiveActionSetPrioritiesEXT *active_priorities); 71 73 72 74 static void 73 75 oxr_action_bind_io(struct oxr_logger *log, ··· 925 927 return false; 926 928 } 927 929 930 + static uint32_t 931 + oxr_get_action_set_priority(const struct oxr_action_set_ref *act_set_ref, 932 + const XrActiveActionSetPrioritiesEXT *active_priorities) 933 + { 934 + if (active_priorities) { 935 + for (uint32_t i = 0; i < active_priorities->actionSetPriorityCount; i++) { 936 + XrActiveActionSetPriorityEXT act_set_priority = active_priorities->actionSetPriorities[i]; 937 + 938 + struct oxr_action_set *action_set = 939 + XRT_CAST_OXR_HANDLE_TO_PTR(struct oxr_action_set *, act_set_priority.actionSet); 940 + 941 + if (action_set->data == act_set_ref) { 942 + return act_set_priority.priorityOverride; 943 + } 944 + } 945 + } 946 + 947 + return act_set_ref->priority; 948 + } 949 + 928 950 static bool 929 951 oxr_input_supressed(struct oxr_session *sess, 930 952 uint32_t countActionSets, 931 953 const XrActiveActionSet *actionSets, 932 954 struct oxr_subaction_paths *subaction_path, 933 955 struct oxr_action_attachment *act_attached, 934 - struct oxr_action_input *action_input) 956 + struct oxr_action_input *action_input, 957 + const XrActiveActionSetPrioritiesEXT *active_priorities) 935 958 { 936 959 struct oxr_action_set_ref *act_set_ref = act_attached->act_set_attached->act_set_ref; 937 - uint32_t priority = act_set_ref->priority; 960 + uint32_t priority = oxr_get_action_set_priority(act_set_ref, active_priorities); 938 961 939 962 // find sources that are bound to an action in a set with higher prio 940 963 for (uint32_t i = 0; i < countActionSets; i++) { ··· 954 977 } 955 978 956 979 /* input may be suppressed by action set with higher prio */ 957 - if (other_act_set_attached->act_set_ref->priority <= priority) { 980 + if (oxr_get_action_set_priority(other_act_set_attached->act_set_ref, active_priorities) <= priority) { 958 981 continue; 959 982 } 960 983 ··· 993 1016 struct oxr_action_cache *cache, 994 1017 struct oxr_input_value_tagged *out_input, 995 1018 int64_t *out_timestamp, 996 - bool *out_is_active) 1019 + bool *out_is_active, 1020 + const XrActiveActionSetPrioritiesEXT *active_priorities) 997 1021 { 998 1022 struct oxr_action_input *inputs = cache->inputs; 999 1023 size_t input_count = cache->input_count; ··· 1013 1037 1014 1038 // suppress input if it is also bound to action in set with 1015 1039 // higher priority 1016 - if (oxr_input_supressed(sess, countActionSets, actionSets, subaction_path, act_attached, 1017 - action_input)) { 1040 + if (oxr_input_supressed(sess, countActionSets, actionSets, subaction_path, act_attached, action_input, 1041 + active_priorities)) { 1018 1042 continue; 1019 1043 } 1020 1044 ··· 1111 1135 struct oxr_action_cache *cache, 1112 1136 int64_t time, 1113 1137 struct oxr_subaction_paths *subaction_path, 1114 - bool selected) 1138 + bool selected, 1139 + const XrActiveActionSetPrioritiesEXT *active_priorities) 1115 1140 { 1116 1141 struct oxr_action_state last = cache->current; 1117 1142 ··· 1144 1169 cache, // cache 1145 1170 &combined, // out_input 1146 1171 &timestamp, // out_timestamp 1147 - &is_active); // out_is_active 1172 + &is_active, // out_is_active 1173 + active_priorities); // active_priorities 1148 1174 if (!bret) { 1149 1175 oxr_log(log, "Failed to get/combine input values '%s'", act_attached->act_ref->name); 1150 1176 return; ··· 1291 1317 const XrActiveActionSet *actionSets, 1292 1318 struct oxr_action_attachment *act_attached, 1293 1319 int64_t time, 1294 - struct oxr_subaction_paths subaction_paths) 1320 + struct oxr_subaction_paths subaction_paths, 1321 + const XrActiveActionSetPrioritiesEXT *active_priorities) 1295 1322 { 1296 1323 // This really shouldn't be happening. 1297 1324 if (act_attached == NULL) { ··· 1303 1330 subaction_paths_##X.X = true; \ 1304 1331 bool select_##X = subaction_paths.X || subaction_paths.any; \ 1305 1332 oxr_action_cache_update(log, sess, countActionSets, actionSets, act_attached, &act_attached->X, time, \ 1306 - &subaction_paths_##X, select_##X); 1333 + &subaction_paths_##X, select_##X, active_priorities); 1307 1334 1308 1335 OXR_FOR_EACH_VALID_SUBACTION_PATH(UPDATE_SELECT) 1309 1336 #undef UPDATE_SELECT ··· 1792 1819 oxr_action_sync_data(struct oxr_logger *log, 1793 1820 struct oxr_session *sess, 1794 1821 uint32_t countActionSets, 1795 - const XrActiveActionSet *actionSets) 1822 + const XrActiveActionSet *actionSets, 1823 + const XrActiveActionSetPrioritiesEXT *activePriorities) 1796 1824 { 1797 1825 struct oxr_action_set *act_set = NULL; 1798 1826 struct oxr_action_set_attachment *act_set_attached = NULL; ··· 1877 1905 } 1878 1906 1879 1907 oxr_action_attachment_update(log, sess, countActionSets, actionSets, act_attached, now, 1880 - subaction_paths); 1908 + subaction_paths, activePriorities); 1881 1909 } 1882 1910 } 1883 1911
+2 -1
src/xrt/state_trackers/oxr/oxr_objects.h
··· 506 506 oxr_action_sync_data(struct oxr_logger *log, 507 507 struct oxr_session *sess, 508 508 uint32_t countActionSets, 509 - const XrActiveActionSet *actionSets); 509 + const XrActiveActionSet *actionSets, 510 + const XrActiveActionSetPrioritiesEXT *activePriorities); 510 511 511 512 /*! 512 513 * @public @memberof oxr_session