The open source OpenXR runtime
0
fork

Configure Feed

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

st/oxr: Add extension XR_FB_composition_layer_settings

authored by

AP\shuaxia and committed by
Jakob Bornecrantz
0a6e3dfd 0a96a0f9

+76 -1
+4
CMakeLists.txt
··· 413 413 endif() 414 414 415 415 # Defaults for OpenXR layer support 416 + if(NOT DEFINED XRT_FEATURE_OPENXR_LAYER_FB_COMPOSITION_SETTINGS) 417 + set(XRT_FEATURE_OPENXR_LAYER_FB_COMPOSITION_SETTINGS OFF) 418 + endif() 416 419 if(NOT DEFINED XRT_FEATURE_OPENXR_LAYER_DEPTH) 417 420 set(XRT_FEATURE_OPENXR_LAYER_DEPTH ON) 418 421 endif() ··· 646 649 message(STATUS "# FEATURE_OPENXR_LAYER_DEPTH: ${XRT_FEATURE_OPENXR_LAYER_DEPTH}") 647 650 message(STATUS "# FEATURE_OPENXR_LAYER_EQUIRECT1: ${XRT_FEATURE_OPENXR_LAYER_EQUIRECT1}") 648 651 message(STATUS "# FEATURE_OPENXR_LAYER_EQUIRECT2: ${XRT_FEATURE_OPENXR_LAYER_EQUIRECT2}") 652 + message(STATUS "# FEATURE_OPENXR_COMPOSITION_LAYER_SETTINGS: ${XRT_FEATURE_OPENXR_LAYER_FB_COMPOSITION_SETTINGS}") 649 653 message(STATUS "# FEATURE_OPENXR_LAYER_FB_LAYER_IMAGE_LAYOUT ${XRT_FEATURE_OPENXR_LAYER_FB_LAYER_IMAGE_LAYOUT}") 650 654 message(STATUS "# FEATURE_OPENXR_OVERLAY: ${XRT_FEATURE_OPENXR_OVERLAY}") 651 655 message(STATUS "# FEATURE_OPENXR_SPACE_LOCAL_FLOOR: ${XRT_FEATURE_OPENXR_SPACE_LOCAL_FLOOR}")
+1
scripts/generate_oxr_ext_support.py
··· 65 65 ['XR_EXT_palm_pose', 'XRT_FEATURE_OPENXR_INTERACTION_EXT_PALM_POSE'], 66 66 ['XR_EXT_samsung_odyssey_controller', 'XRT_FEATURE_OPENXR_INTERACTION_WINMR'], 67 67 ['XR_FB_composition_layer_image_layout', 'XRT_FEATURE_OPENXR_LAYER_FB_LAYER_IMAGE_LAYOUT'], 68 + ['XR_FB_composition_layer_settings', 'XRT_FEATURE_OPENXR_LAYER_FB_COMPOSITION_SETTINGS'], 68 69 ['XR_FB_display_refresh_rate', 'XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE'], 69 70 ['XR_ML_ml2_controller_interaction', 'XRT_FEATURE_OPENXR_INTERACTION_ML2'], 70 71 ['XR_MND_headless', 'XRT_FEATURE_OPENXR_HEADLESS'],
+11
src/xrt/include/xrt/xrt_compositor.h
··· 104 104 */ 105 105 XRT_LAYER_COMPOSITION_COLOR_BIAS_SCALE = 1u << 4u, 106 106 107 + //! Normal super sampling, see XrCompositionLayerSettingsFlagsFB. 108 + XRT_COMPOSITION_LAYER_PROCESSING_NORMAL_SUPER_SAMPLING_BIT_FB = 1u << 5u, 109 + 110 + //! Quality super sampling, see XrCompositionLayerSettingsFlagsFB. 111 + XRT_COMPOSITION_LAYER_PROCESSING_QUALITY_SUPER_SAMPLING_BIT_FB = 1u << 6u, 112 + 113 + //! Normal sharpening, see XrCompositionLayerSettingsFlagsFB. 114 + XRT_COMPOSITION_LAYER_PROCESSING_NORMAL_SHARPENING_BIT_FB = 1u << 7u, 115 + 116 + //! Quality sharpening, see XrCompositionLayerSettingsFlagsFB. 117 + XRT_COMPOSITION_LAYER_PROCESSING_QUALITY_SHARPENING_BIT_FB = 1u << 8u, 107 118 }; 108 119 109 120 /*!
+1
src/xrt/include/xrt/xrt_config_build.h.cmake_in
··· 46 46 #cmakedefine XRT_FEATURE_OPENXR_LAYER_DEPTH 47 47 #cmakedefine XRT_FEATURE_OPENXR_LAYER_EQUIRECT1 48 48 #cmakedefine XRT_FEATURE_OPENXR_LAYER_EQUIRECT2 49 + #cmakedefine XRT_FEATURE_OPENXR_LAYER_FB_COMPOSITION_SETTINGS 49 50 #cmakedefine XRT_FEATURE_OPENXR_LAYER_FB_LAYER_IMAGE_LAYOUT 50 51 #cmakedefine XRT_FEATURE_OPENXR_OVERLAY 51 52 #cmakedefine XRT_FEATURE_OPENXR_SPACE_LOCAL_FLOOR
+11
src/xrt/state_trackers/oxr/oxr_extension_support.h
··· 394 394 #define OXR_EXTENSION_SUPPORT_FB_display_refresh_rate(_) 395 395 #endif 396 396 397 + /* 398 + * XR_FB_composition_layer_settings 399 + */ 400 + #if defined(XR_FB_composition_layer_settings) && defined(XRT_FEATURE_OPENXR_LAYER_FB_COMPOSITION_SETTINGS) 401 + #define OXR_HAVE_FB_composition_layer_settings 402 + #define OXR_EXTENSION_SUPPORT_FB_composition_layer_settings(_) \ 403 + _(FB_composition_layer_settings, FB_COMPOSITION_LAYER_SETTINGS) 404 + #else 405 + #define OXR_EXTENSION_SUPPORT_FB_composition_layer_settings(_) 406 + #endif 397 407 398 408 /* 399 409 * XR_ML_ml2_controller_interaction ··· 598 608 OXR_EXTENSION_SUPPORT_EXT_palm_pose(_) \ 599 609 OXR_EXTENSION_SUPPORT_EXT_samsung_odyssey_controller(_) \ 600 610 OXR_EXTENSION_SUPPORT_FB_composition_layer_image_layout(_) \ 611 + OXR_EXTENSION_SUPPORT_FB_composition_layer_settings(_) \ 601 612 OXR_EXTENSION_SUPPORT_FB_display_refresh_rate(_) \ 602 613 OXR_EXTENSION_SUPPORT_ML_ml2_controller_interaction(_) \ 603 614 OXR_EXTENSION_SUPPORT_MND_headless(_) \
+48 -1
src/xrt/state_trackers/oxr/oxr_session_frame_end.c
··· 161 161 #endif // OXR_HAVE_KHR_composition_layer_color_scale_bias 162 162 } 163 163 164 + static enum xrt_layer_composition_flags 165 + convert_layer_settings_flags(XrCompositionLayerSettingsFlagsFB xr_layer_settings_flags) 166 + { 167 + enum xrt_layer_composition_flags layer_settings_flags = 0; 168 + 169 + if ((xr_layer_settings_flags & XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB) != 0) { 170 + layer_settings_flags |= XRT_COMPOSITION_LAYER_PROCESSING_NORMAL_SUPER_SAMPLING_BIT_FB; 171 + } 172 + 173 + if ((xr_layer_settings_flags & XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB) != 0) { 174 + layer_settings_flags |= XRT_COMPOSITION_LAYER_PROCESSING_QUALITY_SUPER_SAMPLING_BIT_FB; 175 + } 176 + 177 + if ((xr_layer_settings_flags & XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB) != 0) { 178 + layer_settings_flags |= XRT_COMPOSITION_LAYER_PROCESSING_NORMAL_SHARPENING_BIT_FB; 179 + } 180 + 181 + if ((xr_layer_settings_flags & XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB) != 0) { 182 + layer_settings_flags |= XRT_COMPOSITION_LAYER_PROCESSING_QUALITY_SHARPENING_BIT_FB; 183 + } 184 + 185 + return layer_settings_flags; 186 + } 187 + 164 188 static void 165 189 fill_in_y_flip(struct oxr_session *sess, const XrCompositionLayerBaseHeader *layer, struct xrt_layer_data *xlayer_data) 166 190 { ··· 199 223 xsub->norm_rect.y = (float)(rect->offset.h / (double)sc->height); 200 224 } 201 225 226 + static void 227 + fill_in_layer_settings(struct oxr_session *sess, 228 + const XrCompositionLayerBaseHeader *layer, 229 + struct xrt_layer_data *xlayer_data) 230 + { 231 + #ifdef OXR_HAVE_FB_composition_layer_settings 232 + // Is the extension enabled? 233 + if (!sess->sys->inst->extensions.FB_composition_layer_settings) { 234 + return; 235 + } 236 + const XrCompositionLayerSettingsFB *layer_settings = 237 + OXR_GET_INPUT_FROM_CHAIN(layer->next, XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB, XrCompositionLayerSettingsFB); 238 + if (layer_settings != NULL) { 239 + xlayer_data->flags |= convert_layer_settings_flags(layer_settings->layerFlags); 240 + } 241 + #endif // OXR_HAVE_FB_composition_layer_settings 242 + } 202 243 203 244 /* 204 245 * ··· 987 1028 fill_in_sub_image(sc, &quad->subImage, &data.quad.sub); 988 1029 fill_in_color_scale_bias(sess, (XrCompositionLayerBaseHeader *)quad, &data); 989 1030 fill_in_y_flip(sess, (XrCompositionLayerBaseHeader *)quad, &data); 1031 + fill_in_layer_settings(sess, (XrCompositionLayerBaseHeader *)quad, &data); 990 1032 991 1033 xrt_result_t xret = xrt_comp_layer_quad(xc, head, sc->swapchain, &data); 992 1034 OXR_CHECK_XRET(log, sess, xret, xrt_comp_layer_quad); ··· 1043 1085 fill_in_sub_image(scs[1], &proj->views[1].subImage, &data.stereo.r.sub); 1044 1086 fill_in_color_scale_bias(sess, (XrCompositionLayerBaseHeader *)proj, &data); 1045 1087 fill_in_y_flip(sess, (XrCompositionLayerBaseHeader *)proj, &data); 1088 + 1089 + fill_in_layer_settings(sess, (XrCompositionLayerBaseHeader *)proj, &data); 1046 1090 1047 1091 #ifdef OXR_HAVE_KHR_composition_layer_depth 1048 1092 const XrCompositionLayerDepthInfoKHR *d_l = OXR_GET_INPUT_FROM_CHAIN( ··· 1126 1170 data.name = XRT_INPUT_GENERIC_HEAD_POSE; 1127 1171 data.timestamp = xrt_timestamp; 1128 1172 data.flags = convert_layer_flags(cube->layerFlags); 1173 + fill_in_layer_settings(sess, (XrCompositionLayerBaseHeader *)cube, &data); 1129 1174 1130 1175 if (spc->space_type == OXR_SPACE_TYPE_REFERENCE_VIEW) { 1131 1176 data.flags |= XRT_LAYER_COMPOSITION_VIEW_SPACE_BIT; ··· 1201 1246 fill_in_sub_image(sc, &cylinder->subImage, &data.cylinder.sub); 1202 1247 fill_in_color_scale_bias(sess, (XrCompositionLayerBaseHeader *)cylinder, &data); 1203 1248 fill_in_y_flip(sess, (XrCompositionLayerBaseHeader *)cylinder, &data); 1249 + fill_in_layer_settings(sess, (XrCompositionLayerBaseHeader *)cylinder, &data); 1204 1250 1205 1251 xrt_result_t xret = xrt_comp_layer_cylinder(xc, head, sc->swapchain, &data); 1206 1252 OXR_CHECK_XRET(log, sess, xret, xrt_comp_layer_cylinder); ··· 1246 1292 fill_in_sub_image(sc, &equirect->subImage, &data.equirect1.sub); 1247 1293 fill_in_color_scale_bias(sess, (XrCompositionLayerBaseHeader *)equirect, &data); 1248 1294 fill_in_y_flip(sess, (XrCompositionLayerBaseHeader *)equirect, &data); 1249 - 1295 + fill_in_layer_settings(sess, (XrCompositionLayerBaseHeader *)equirect, &data); 1250 1296 1251 1297 struct xrt_vec2 *scale = (struct xrt_vec2 *)&equirect->scale; 1252 1298 struct xrt_vec2 *bias = (struct xrt_vec2 *)&equirect->bias; ··· 1310 1356 fill_in_sub_image(sc, &equirect->subImage, &data.equirect2.sub); 1311 1357 fill_in_color_scale_bias(sess, (XrCompositionLayerBaseHeader *)equirect, &data); 1312 1358 fill_in_y_flip(sess, (XrCompositionLayerBaseHeader *)equirect, &data); 1359 + fill_in_layer_settings(sess, (XrCompositionLayerBaseHeader *)equirect, &data); 1313 1360 1314 1361 xrt_result_t xret = xrt_comp_layer_equirect2(xc, head, sc->swapchain, &data); 1315 1362 OXR_CHECK_XRET(log, sess, xret, xrt_comp_layer_equirect2);