The open source OpenXR runtime
0
fork

Configure Feed

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

ipc: Split protocol json into separate files

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

authored by

Jakob Bornecrantz and committed by
Marge Bot
5bde33f8 0a639c04

+733 -680
+17 -6
src/xrt/ipc/CMakeLists.txt
··· 1 1 # Copyright 2020-2021, Collabora, Ltd. 2 + # Copyright 2025, NVIDIA CORPORATION. 2 3 # SPDX-License-Identifier: BSL-1.0 3 4 4 5 ### 6 + # Merge split protocol JSON files into single proto.json 7 + file(GLOB PROTO_JSON_FILES "${CMAKE_CURRENT_SOURCE_DIR}/shared/proto/*.json") 8 + 9 + merge_json_files( 10 + OUTPUT 11 + "${CMAKE_CURRENT_BINARY_DIR}/proto.json" 12 + SOURCES 13 + ${PROTO_JSON_FILES} 14 + IGNORE_SCHEMA 15 + ) 16 + 17 + ### 5 18 # Generator 6 19 7 20 foreach( ··· 16 29 OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${fn}" 17 30 COMMAND 18 31 ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/shared/proto.py 19 - ${CMAKE_CURRENT_SOURCE_DIR}/shared/proto.json 20 - "${CMAKE_CURRENT_BINARY_DIR}/${fn}" 32 + ${CMAKE_CURRENT_BINARY_DIR}/proto.json "${CMAKE_CURRENT_BINARY_DIR}/${fn}" 21 33 VERBATIM 22 34 DEPENDS 23 35 ${CMAKE_CURRENT_SOURCE_DIR}/shared/proto.py 24 36 ${CMAKE_CURRENT_SOURCE_DIR}/shared/ipcproto/common.py 25 - ${CMAKE_CURRENT_SOURCE_DIR}/shared/proto.json 37 + ${CMAKE_CURRENT_BINARY_DIR}/proto.json 26 38 ${CMAKE_CURRENT_SOURCE_DIR}/shared/ipc_protocol_generated.h.template 27 39 COMMENT "Generating ${fn} from protocol JSON description" 28 40 ) ··· 33 45 OUTPUT "${CMAKE_BINARY_DIR}/ipc-structs.txt" 34 46 COMMAND 35 47 ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/shared/proto.py 36 - ${CMAKE_CURRENT_SOURCE_DIR}/shared/proto.json 37 - "${CMAKE_BINARY_DIR}/ipc-structs.txt" 48 + ${CMAKE_CURRENT_BINARY_DIR}/proto.json "${CMAKE_BINARY_DIR}/ipc-structs.txt" 38 49 VERBATIM 39 50 DEPENDS 40 51 ${CMAKE_CURRENT_SOURCE_DIR}/shared/proto.py 41 52 ${CMAKE_CURRENT_SOURCE_DIR}/shared/ipcproto/common.py 42 - ${CMAKE_CURRENT_SOURCE_DIR}/shared/proto.json 53 + ${CMAKE_CURRENT_BINARY_DIR}/proto.json 43 54 COMMENT "Generating ipc-structs.txt from protocol JSON description" 44 55 ) 45 56
-671
src/xrt/ipc/shared/proto.json
··· 1 - { 2 - "$schema": "./proto.schema.json", 3 - 4 - "instance_get_shm_fd": { 5 - "out_handles": {"type": "xrt_shmem_handle_t"} 6 - }, 7 - 8 - "instance_describe_client": { 9 - "in": [ 10 - {"name": "desc", "type": "struct ipc_client_description"} 11 - ] 12 - }, 13 - 14 - "instance_is_system_available": { 15 - "out": [ 16 - {"name": "available", "type": "bool"} 17 - ] 18 - }, 19 - 20 - "system_get_properties": { 21 - "out": [ 22 - {"name": "properties", "type": "struct xrt_system_properties"} 23 - ] 24 - }, 25 - 26 - "system_get_client_info": { 27 - "in": [ 28 - {"name": "id", "type": "uint32_t"} 29 - ], 30 - "out": [ 31 - {"name": "ias", "type": "struct ipc_app_state"} 32 - ] 33 - }, 34 - 35 - "system_get_clients": { 36 - "out": [ 37 - {"name": "clients", "type": "struct ipc_client_list"} 38 - ] 39 - }, 40 - 41 - "system_set_primary_client": { 42 - "in": [ 43 - {"name": "id", "type": "uint32_t"} 44 - ] 45 - }, 46 - 47 - "system_set_focused_client": { 48 - "in": [ 49 - {"name": "id", "type": "uint32_t"} 50 - ] 51 - }, 52 - 53 - "system_toggle_io_client": { 54 - "in": [ 55 - {"name": "id", "type": "uint32_t"} 56 - ] 57 - }, 58 - 59 - "system_devices_get_roles": { 60 - "out": [ 61 - {"name": "system_roles", "type": "struct xrt_system_roles"} 62 - ] 63 - }, 64 - 65 - "system_devices_begin_feature": { 66 - "in": [ 67 - {"name": "type", "type": "enum xrt_device_feature_type"} 68 - ] 69 - }, 70 - 71 - "system_devices_end_feature": { 72 - "in": [ 73 - {"name": "type", "type": "enum xrt_device_feature_type"} 74 - ] 75 - }, 76 - 77 - "system_compositor_get_info": { 78 - "out": [ 79 - {"name": "info", "type": "struct xrt_system_compositor_info"} 80 - ] 81 - }, 82 - 83 - "session_create": { 84 - "in": [ 85 - {"name": "xsi", "type": "struct xrt_session_info"}, 86 - {"name": "create_native_compositor", "type": "bool"} 87 - ] 88 - }, 89 - 90 - "session_poll_events": { 91 - "out": [ 92 - {"name": "event", "type": "union xrt_session_event"} 93 - ] 94 - }, 95 - 96 - "session_begin": {}, 97 - 98 - "session_end": {}, 99 - 100 - "session_destroy": {}, 101 - 102 - "space_create_semantic_ids": { 103 - "out": [ 104 - {"name": "root_id", "type": "uint32_t"}, 105 - {"name": "view_id", "type": "uint32_t"}, 106 - {"name": "local_id", "type": "uint32_t"}, 107 - {"name": "local_floor_id", "type": "uint32_t"}, 108 - {"name": "stage_id", "type": "uint32_t"}, 109 - {"name": "unbounded_id", "type": "uint32_t"} 110 - ] 111 - }, 112 - 113 - "space_create_offset": { 114 - "in": [ 115 - {"name": "parent_id", "type": "uint32_t"}, 116 - {"name": "offset", "type": "struct xrt_pose"} 117 - ], 118 - "out": [ 119 - {"name": "space_id", "type": "uint32_t"} 120 - ] 121 - }, 122 - 123 - "space_create_pose": { 124 - "in": [ 125 - {"name": "xdev_id", "type": "uint32_t"}, 126 - {"name": "name", "type": "enum xrt_input_name"} 127 - ], 128 - "out": [ 129 - {"name": "space_id", "type": "uint32_t"} 130 - ] 131 - }, 132 - 133 - "space_locate_space": { 134 - "in": [ 135 - {"name": "base_space_id", "type": "uint32_t"}, 136 - {"name": "base_offset", "type": "struct xrt_pose"}, 137 - {"name": "at_timestamp", "type": "int64_t"}, 138 - {"name": "space_id", "type": "uint32_t"}, 139 - {"name": "offset", "type": "struct xrt_pose"} 140 - ], 141 - "out": [ 142 - {"name": "relation", "type": "struct xrt_space_relation"} 143 - ] 144 - }, 145 - 146 - "space_locate_spaces": { 147 - "varlen": true, 148 - "in": [ 149 - {"name": "base_space_id", "type": "uint32_t"}, 150 - {"name": "base_offset", "type": "struct xrt_pose"}, 151 - {"name": "space_count", "type": "uint32_t"}, 152 - {"name": "at_timestamp", "type": "int64_t"} 153 - ] 154 - }, 155 - 156 - "space_locate_device": { 157 - "in": [ 158 - {"name": "base_space_id", "type": "uint32_t"}, 159 - {"name": "base_offset", "type": "struct xrt_pose"}, 160 - {"name": "at_timestamp", "type": "int64_t"}, 161 - {"name": "xdev_id", "type": "uint32_t"} 162 - ], 163 - "out": [ 164 - {"name": "relation", "type": "struct xrt_space_relation"} 165 - ] 166 - }, 167 - 168 - "space_destroy": { 169 - "in": [ 170 - {"name": "space_id", "type": "uint32_t"} 171 - ] 172 - }, 173 - 174 - "space_mark_ref_space_in_use": { 175 - "in": [ 176 - {"name": "type", "type": "enum xrt_reference_space_type"} 177 - ] 178 - }, 179 - 180 - "space_unmark_ref_space_in_use": { 181 - "in": [ 182 - {"name": "type", "type": "enum xrt_reference_space_type"} 183 - ] 184 - }, 185 - 186 - "space_recenter_local_spaces": { 187 - }, 188 - 189 - "space_get_tracking_origin_offset": { 190 - "in": [ 191 - {"name": "origin_id", "type": "uint32_t"} 192 - ], 193 - "out": [ 194 - {"name": "offset", "type": "struct xrt_pose"} 195 - ] 196 - }, 197 - 198 - "space_set_tracking_origin_offset": { 199 - "in": [ 200 - {"name": "origin_id", "type": "uint32_t"}, 201 - {"name": "offset", "type": "struct xrt_pose"} 202 - ] 203 - }, 204 - 205 - "space_get_reference_space_offset": { 206 - "in": [ 207 - {"name": "type", "type": "enum xrt_reference_space_type"} 208 - ], 209 - "out": [ 210 - {"name": "offset", "type": "struct xrt_pose"} 211 - ] 212 - }, 213 - 214 - "space_set_reference_space_offset": { 215 - "in": [ 216 - {"name": "type", "type": "enum xrt_reference_space_type"}, 217 - {"name": "offset", "type": "struct xrt_pose"} 218 - ] 219 - }, 220 - 221 - "compositor_get_info": { 222 - "out": [ 223 - {"name": "info", "type": "struct xrt_compositor_info"} 224 - ] 225 - }, 226 - 227 - "compositor_predict_frame": { 228 - "out": [ 229 - {"name": "frame_id", "type": "int64_t"}, 230 - {"name": "wake_up_time", "type": "int64_t"}, 231 - {"name": "predicted_display_time", "type": "int64_t"}, 232 - {"name": "predicted_display_period", "type": "int64_t"} 233 - ] 234 - }, 235 - 236 - "compositor_wait_woke": { 237 - "in": [ 238 - {"name": "frame_id", "type": "int64_t"} 239 - ] 240 - }, 241 - 242 - "compositor_begin_frame": { 243 - "in": [ 244 - {"name": "frame_id", "type": "int64_t"} 245 - ] 246 - }, 247 - 248 - "compositor_discard_frame": { 249 - "in": [ 250 - {"name": "frame_id", "type": "int64_t"} 251 - ] 252 - }, 253 - 254 - "compositor_layer_sync": { 255 - "in": [ 256 - {"name": "slot_id", "type": "uint32_t"} 257 - ], 258 - "in_handles": {"type": "xrt_graphics_sync_handle_t"}, 259 - "out": [ 260 - {"name": "free_slot_id", "type": "uint32_t"} 261 - ] 262 - }, 263 - 264 - "compositor_layer_sync_with_semaphore": { 265 - "in": [ 266 - {"name": "slot_id", "type": "uint32_t"}, 267 - {"name": "semaphore_id", "type": "uint32_t"}, 268 - {"name": "semaphore_value", "type": "uint64_t"} 269 - ], 270 - "out": [ 271 - {"name": "free_slot_id", "type": "uint32_t"} 272 - ] 273 - }, 274 - 275 - "compositor_set_performance_level": { 276 - "in": [ 277 - {"name": "domain", "type": "enum xrt_perf_domain"}, 278 - {"name": "level", "type": "enum xrt_perf_set_level"} 279 - ] 280 - }, 281 - 282 - "compositor_set_thread_hint": { 283 - "in": [ 284 - {"name": "hint", "type": "enum xrt_thread_hint"}, 285 - {"name": "thread_id", "type": "uint32_t"} 286 - ] 287 - }, 288 - 289 - "compositor_get_display_refresh_rate": { 290 - "out": [ 291 - {"name": "out_display_refresh_rate_hz", "type": "float"} 292 - ] 293 - }, 294 - 295 - "compositor_request_display_refresh_rate": { 296 - "in": [ 297 - {"name": "display_refresh_rate_hz", "type": "float"} 298 - ] 299 - }, 300 - 301 - "compositor_get_reference_bounds_rect": { 302 - "in": [ 303 - {"name": "reference_space_type", "type": "enum xrt_reference_space_type"} 304 - ], 305 - "out": [ 306 - {"name": "bounds", "type": "struct xrt_vec2"} 307 - ] 308 - }, 309 - 310 - "swapchain_get_properties": { 311 - "in": [ 312 - {"name": "info", "type": "struct xrt_swapchain_create_info"} 313 - ], 314 - "out": [ 315 - {"name": "xsccp", "type": "struct xrt_swapchain_create_properties"} 316 - ] 317 - }, 318 - 319 - "swapchain_create": { 320 - "in": [ 321 - {"name": "info", "type": "struct xrt_swapchain_create_info"} 322 - ], 323 - "out": [ 324 - {"name": "id", "type": "uint32_t"}, 325 - {"name": "image_count", "type": "uint32_t"}, 326 - {"name": "size", "type": "uint64_t"}, 327 - {"name": "use_dedicated_allocation", "type": "bool"} 328 - ], 329 - "out_handles": {"type": "xrt_graphics_buffer_handle_t"} 330 - }, 331 - 332 - "compositor_create_passthrough": { 333 - "in": [ 334 - {"name": "info", "type": "struct xrt_passthrough_create_info"} 335 - ] 336 - }, 337 - 338 - "compositor_create_passthrough_layer": { 339 - "in": [ 340 - {"name": "info", "type": "struct xrt_passthrough_layer_create_info"} 341 - ] 342 - }, 343 - 344 - "compositor_destroy_passthrough": {}, 345 - 346 - "swapchain_import": { 347 - "in": [ 348 - {"name": "info", "type": "struct xrt_swapchain_create_info"}, 349 - {"name": "args", "type": "struct ipc_arg_swapchain_from_native"} 350 - ], 351 - "out": [ 352 - {"name": "id", "type": "uint32_t"} 353 - ], 354 - "in_handles": {"type": "xrt_graphics_buffer_handle_t"} 355 - }, 356 - 357 - "swapchain_wait_image": { 358 - "in": [ 359 - {"name": "id", "type": "uint32_t"}, 360 - {"name": "timeout_ns", "type": "int64_t"}, 361 - {"name": "index", "type": "uint32_t"} 362 - ] 363 - }, 364 - 365 - "swapchain_acquire_image": { 366 - "in": [ 367 - {"name": "id", "type": "uint32_t"} 368 - ], 369 - "out": [ 370 - {"name": "index", "type": "uint32_t"} 371 - ] 372 - }, 373 - 374 - "swapchain_release_image": { 375 - "in": [ 376 - {"name": "id", "type": "uint32_t"}, 377 - {"name": "index", "type": "uint32_t"} 378 - ] 379 - }, 380 - 381 - "swapchain_destroy": { 382 - "in": [ 383 - {"name": "id", "type": "uint32_t"} 384 - ] 385 - }, 386 - 387 - "compositor_semaphore_create": { 388 - "out": [ 389 - {"name": "id", "type": "uint32_t"} 390 - ], 391 - "out_handles": {"type": "xrt_graphics_sync_handle_t"} 392 - }, 393 - 394 - "compositor_semaphore_destroy": { 395 - "in": [ 396 - {"name": "id", "type": "uint32_t"} 397 - ] 398 - }, 399 - 400 - "device_update_input": { 401 - "in": [ 402 - {"name": "id", "type": "uint32_t"} 403 - ] 404 - }, 405 - 406 - "device_get_tracked_pose": { 407 - "in": [ 408 - {"name": "id", "type": "uint32_t"}, 409 - {"name": "name", "type": "enum xrt_input_name"}, 410 - {"name": "at_timestamp", "type": "int64_t"} 411 - ], 412 - "out": [ 413 - {"name": "relation", "type": "struct xrt_space_relation"} 414 - ] 415 - }, 416 - 417 - "device_get_hand_tracking": { 418 - "in": [ 419 - {"name": "id", "type": "uint32_t"}, 420 - {"name": "name", "type": "enum xrt_input_name"}, 421 - {"name": "at_timestamp", "type": "int64_t"} 422 - ], 423 - "out": [ 424 - {"name": "value", "type": "struct xrt_hand_joint_set"}, 425 - {"name": "timestamp", "type": "int64_t"} 426 - ] 427 - }, 428 - 429 - "device_get_view_poses": { 430 - "varlen": true, 431 - "in": [ 432 - {"name": "id", "type": "uint32_t"}, 433 - {"name": "fallback_eye_relation", "type": "struct xrt_vec3"}, 434 - {"name": "at_timestamp_ns", "type": "int64_t"}, 435 - {"name": "view_type", "type": "enum xrt_view_type"}, 436 - {"name": "view_count", "type": "uint32_t"} 437 - ], 438 - "out": [ 439 - {"name": "head_relation", "type": "struct xrt_space_relation"}, 440 - {"name": "view_count", "type": "uint32_t"} 441 - ] 442 - }, 443 - 444 - "device_get_view_poses_2": { 445 - "in": [ 446 - {"name": "id", "type": "uint32_t"}, 447 - {"name": "fallback_eye_relation", "type": "struct xrt_vec3"}, 448 - {"name": "at_timestamp_ns", "type": "int64_t"}, 449 - {"name": "view_type", "type": "enum xrt_view_type"}, 450 - {"name": "view_count", "type": "uint32_t"} 451 - ], 452 - "out": [ 453 - {"name": "info", "type": "struct ipc_info_get_view_poses_2"} 454 - ] 455 - }, 456 - 457 - "device_compute_distortion": { 458 - "in": [ 459 - {"name": "id", "type": "uint32_t"}, 460 - {"name": "view", "type": "uint32_t"}, 461 - {"name": "u", "type": "float"}, 462 - {"name": "v", "type": "float"} 463 - ], 464 - "out": [ 465 - {"name": "triplet", "type": "struct xrt_uv_triplet"} 466 - ] 467 - }, 468 - 469 - "device_begin_plane_detection_ext": { 470 - "in": [ 471 - {"name": "id", "type": "uint32_t"}, 472 - {"name": "plane_detection_id", "type": "uint64_t"} 473 - ], 474 - "out": [ 475 - {"name": "out_plane_detection_id", "type": "uint64_t"} 476 - ] 477 - }, 478 - 479 - "device_destroy_plane_detection_ext": { 480 - "in": [ 481 - {"name": "id", "type": "uint32_t"}, 482 - {"name": "plane_detection_id", "type": "uint64_t"} 483 - ] 484 - }, 485 - 486 - "device_get_plane_detection_state_ext": { 487 - "in": [ 488 - {"name": "id", "type": "uint32_t"}, 489 - {"name": "plane_detection_id", "type": "uint64_t"} 490 - ], 491 - "out": [ 492 - {"name": "state", "type": "enum xrt_plane_detector_state_ext"} 493 - ] 494 - }, 495 - 496 - "device_get_plane_detections_ext": { 497 - "varlen": true, 498 - "in": [ 499 - {"name": "id", "type": "uint32_t"}, 500 - {"name": "plane_detection_id", "type": "uint64_t"} 501 - ], 502 - "out": [ 503 - {"name": "location_size", "type": "uint32_t"}, 504 - {"name": "polygon_size", "type": "uint32_t"}, 505 - {"name": "vertex_size", "type": "uint32_t"} 506 - ] 507 - }, 508 - 509 - "device_get_presence": { 510 - "in": [ 511 - {"name": "id", "type": "uint32_t"} 512 - ], 513 - "out": [ 514 - {"name": "presence", "type": "bool"} 515 - ] 516 - }, 517 - 518 - "device_set_output": { 519 - "in": [ 520 - {"name": "id", "type": "uint32_t"}, 521 - {"name": "name", "type": "enum xrt_output_name"}, 522 - {"name": "value", "type": "struct xrt_output_value"} 523 - ] 524 - }, 525 - 526 - "device_set_haptic_output": { 527 - "varlen": true, 528 - "in": [ 529 - {"name": "id", "type": "uint32_t"}, 530 - {"name": "name", "type": "enum xrt_output_name"}, 531 - {"name": "samples", "type": "struct ipc_pcm_haptic_buffer"} 532 - ], 533 - "out":[ 534 - {"name": "samples_consumed", "type": "uint32_t"} 535 - ] 536 - }, 537 - 538 - "device_get_output_limits": { 539 - "in": [ 540 - {"name": "id", "type": "uint32_t"} 541 - ], 542 - "out":[ 543 - {"name": "limits", "type": "struct xrt_output_limits"} 544 - ] 545 - }, 546 - 547 - "device_get_visibility_mask": { 548 - "varlen": true, 549 - "in": [ 550 - {"name": "id", "type": "uint32_t"}, 551 - {"name": "type", "type": "enum xrt_visibility_mask_type"}, 552 - {"name": "view_index", "type": "uint32_t"} 553 - ], 554 - "out": [ 555 - {"name": "mask_size", "type": "uint32_t"} 556 - ] 557 - }, 558 - 559 - "device_is_form_factor_available": { 560 - "in": [ 561 - {"name": "id", "type": "uint32_t"}, 562 - {"name": "form_factor", "type": "enum xrt_form_factor"} 563 - ], 564 - "out": [ 565 - {"name": "available", "type": "bool"} 566 - ] 567 - }, 568 - 569 - "device_get_face_tracking": { 570 - "in": [ 571 - {"name": "id", "type": "uint32_t"}, 572 - {"name": "facial_expression_type", "type": "enum xrt_input_name"}, 573 - {"name": "at_timestamp_ns", "type": "int64_t"} 574 - ], 575 - "out": [ 576 - {"name": "value", "type": "struct xrt_facial_expression_set"} 577 - ] 578 - }, 579 - 580 - "device_get_body_skeleton": { 581 - "in": [ 582 - {"name": "id", "type": "uint32_t"}, 583 - {"name": "body_tracking_type", "type": "enum xrt_input_name"} 584 - ], 585 - "out": [ 586 - {"name": "value", "type": "struct xrt_body_skeleton"} 587 - ] 588 - }, 589 - 590 - "device_get_body_joints": { 591 - "in": [ 592 - {"name": "id", "type": "uint32_t"}, 593 - {"name": "body_tracking_type", "type": "enum xrt_input_name"}, 594 - {"name": "desired_timestamp_ns", "type": "int64_t"} 595 - ], 596 - "out": [ 597 - {"name": "value", "type": "struct xrt_body_joint_set"} 598 - ] 599 - }, 600 - 601 - "device_reset_body_tracking_calibration_meta": { 602 - "in": [ 603 - {"name": "id", "type": "uint32_t"} 604 - ] 605 - }, 606 - 607 - "device_set_body_tracking_calibration_override_meta": { 608 - "in": [ 609 - {"name": "id", "type": "uint32_t"}, 610 - {"name": "new_body_height", "type": "float"} 611 - ] 612 - }, 613 - 614 - "device_get_battery_status": { 615 - "in": [ 616 - {"name": "id", "type": "uint32_t"} 617 - ], 618 - "out": [ 619 - {"name": "present", "type": "bool"}, 620 - {"name": "charging", "type": "bool"}, 621 - {"name": "charge", "type": "float"} 622 - ] 623 - }, 624 - 625 - "device_get_brightness": { 626 - "in": [ 627 - {"name": "id", "type": "uint32_t"} 628 - ], 629 - "out": [ 630 - {"name": "brightness", "type": "float"} 631 - ] 632 - }, 633 - 634 - "device_set_brightness": { 635 - "in": [ 636 - {"name": "id", "type": "uint32_t"}, 637 - {"name": "brightness", "type": "float"}, 638 - {"name": "relative", "type": "bool"} 639 - ] 640 - }, 641 - 642 - "future_get_state": { 643 - "in": [ 644 - {"name": "future_id", "type": "uint32_t"} 645 - ], 646 - "out": [ 647 - {"name": "out_state", "type": "enum xrt_future_state"} 648 - ] 649 - }, 650 - 651 - "future_cancel": { 652 - "in": [ 653 - {"name": "future_id", "type": "uint32_t"} 654 - ] 655 - }, 656 - 657 - "future_destroy": { 658 - "in": [ 659 - {"name": "future_id", "type": "uint32_t"} 660 - ] 661 - }, 662 - 663 - "future_get_result": { 664 - "in": [ 665 - {"name": "future_id", "type": "uint32_t"} 666 - ], 667 - "out": [ 668 - {"name": "out_ft_result", "type": "struct xrt_future_result"} 669 - ] 670 - } 671 - }
-3
src/xrt/ipc/shared/proto.json.license
··· 1 - Copyright 2018-2023, Collabora, Ltd. 2 - 3 - SPDX-License-Identifier: BSL-1.0
+19
src/xrt/ipc/shared/proto/10-instance.json
··· 1 + { 2 + "$schema": "../proto.schema.json", 3 + 4 + "instance_get_shm_fd": { 5 + "out_handles": {"type": "xrt_shmem_handle_t"} 6 + }, 7 + 8 + "instance_describe_client": { 9 + "in": [ 10 + {"name": "desc", "type": "struct ipc_client_description"} 11 + ] 12 + }, 13 + 14 + "instance_is_system_available": { 15 + "out": [ 16 + {"name": "available", "type": "bool"} 17 + ] 18 + } 19 + }
+3
src/xrt/ipc/shared/proto/10-instance.json.license
··· 1 + Copyright 2018-2025, Collabora, Ltd. 2 + 3 + SPDX-License-Identifier: BSL-1.0
+119
src/xrt/ipc/shared/proto/50-compositor.json
··· 1 + { 2 + "$schema": "../proto.schema.json", 3 + 4 + "compositor_get_info": { 5 + "out": [ 6 + {"name": "info", "type": "struct xrt_compositor_info"} 7 + ] 8 + }, 9 + 10 + "compositor_predict_frame": { 11 + "out": [ 12 + {"name": "frame_id", "type": "int64_t"}, 13 + {"name": "wake_up_time", "type": "int64_t"}, 14 + {"name": "predicted_display_time", "type": "int64_t"}, 15 + {"name": "predicted_display_period", "type": "int64_t"} 16 + ] 17 + }, 18 + 19 + "compositor_wait_woke": { 20 + "in": [ 21 + {"name": "frame_id", "type": "int64_t"} 22 + ] 23 + }, 24 + 25 + "compositor_begin_frame": { 26 + "in": [ 27 + {"name": "frame_id", "type": "int64_t"} 28 + ] 29 + }, 30 + 31 + "compositor_discard_frame": { 32 + "in": [ 33 + {"name": "frame_id", "type": "int64_t"} 34 + ] 35 + }, 36 + 37 + "compositor_layer_sync": { 38 + "in": [ 39 + {"name": "slot_id", "type": "uint32_t"} 40 + ], 41 + "in_handles": {"type": "xrt_graphics_sync_handle_t"}, 42 + "out": [ 43 + {"name": "free_slot_id", "type": "uint32_t"} 44 + ] 45 + }, 46 + 47 + "compositor_layer_sync_with_semaphore": { 48 + "in": [ 49 + {"name": "slot_id", "type": "uint32_t"}, 50 + {"name": "semaphore_id", "type": "uint32_t"}, 51 + {"name": "semaphore_value", "type": "uint64_t"} 52 + ], 53 + "out": [ 54 + {"name": "free_slot_id", "type": "uint32_t"} 55 + ] 56 + }, 57 + 58 + "compositor_set_performance_level": { 59 + "in": [ 60 + {"name": "domain", "type": "enum xrt_perf_domain"}, 61 + {"name": "level", "type": "enum xrt_perf_set_level"} 62 + ] 63 + }, 64 + 65 + "compositor_set_thread_hint": { 66 + "in": [ 67 + {"name": "hint", "type": "enum xrt_thread_hint"}, 68 + {"name": "thread_id", "type": "uint32_t"} 69 + ] 70 + }, 71 + 72 + "compositor_get_display_refresh_rate": { 73 + "out": [ 74 + {"name": "out_display_refresh_rate_hz", "type": "float"} 75 + ] 76 + }, 77 + 78 + "compositor_request_display_refresh_rate": { 79 + "in": [ 80 + {"name": "display_refresh_rate_hz", "type": "float"} 81 + ] 82 + }, 83 + 84 + "compositor_get_reference_bounds_rect": { 85 + "in": [ 86 + {"name": "reference_space_type", "type": "enum xrt_reference_space_type"} 87 + ], 88 + "out": [ 89 + {"name": "bounds", "type": "struct xrt_vec2"} 90 + ] 91 + }, 92 + 93 + "compositor_create_passthrough": { 94 + "in": [ 95 + {"name": "info", "type": "struct xrt_passthrough_create_info"} 96 + ] 97 + }, 98 + 99 + "compositor_create_passthrough_layer": { 100 + "in": [ 101 + {"name": "info", "type": "struct xrt_passthrough_layer_create_info"} 102 + ] 103 + }, 104 + 105 + "compositor_destroy_passthrough": {}, 106 + 107 + "compositor_semaphore_create": { 108 + "out": [ 109 + {"name": "id", "type": "uint32_t"} 110 + ], 111 + "out_handles": {"type": "xrt_graphics_sync_handle_t"} 112 + }, 113 + 114 + "compositor_semaphore_destroy": { 115 + "in": [ 116 + {"name": "id", "type": "uint32_t"} 117 + ] 118 + } 119 + }
+3
src/xrt/ipc/shared/proto/50-compositor.json.license
··· 1 + Copyright 2018-2025, Collabora, Ltd. 2 + 3 + SPDX-License-Identifier: BSL-1.0
+245
src/xrt/ipc/shared/proto/50-device.json
··· 1 + { 2 + "$schema": "../proto.schema.json", 3 + 4 + "device_update_input": { 5 + "in": [ 6 + {"name": "id", "type": "uint32_t"} 7 + ] 8 + }, 9 + 10 + "device_get_tracked_pose": { 11 + "in": [ 12 + {"name": "id", "type": "uint32_t"}, 13 + {"name": "name", "type": "enum xrt_input_name"}, 14 + {"name": "at_timestamp", "type": "int64_t"} 15 + ], 16 + "out": [ 17 + {"name": "relation", "type": "struct xrt_space_relation"} 18 + ] 19 + }, 20 + 21 + "device_get_hand_tracking": { 22 + "in": [ 23 + {"name": "id", "type": "uint32_t"}, 24 + {"name": "name", "type": "enum xrt_input_name"}, 25 + {"name": "at_timestamp", "type": "int64_t"} 26 + ], 27 + "out": [ 28 + {"name": "value", "type": "struct xrt_hand_joint_set"}, 29 + {"name": "timestamp", "type": "int64_t"} 30 + ] 31 + }, 32 + 33 + "device_get_view_poses": { 34 + "varlen": true, 35 + "in": [ 36 + {"name": "id", "type": "uint32_t"}, 37 + {"name": "fallback_eye_relation", "type": "struct xrt_vec3"}, 38 + {"name": "at_timestamp_ns", "type": "int64_t"}, 39 + {"name": "view_type", "type": "enum xrt_view_type"}, 40 + {"name": "view_count", "type": "uint32_t"} 41 + ], 42 + "out": [ 43 + {"name": "head_relation", "type": "struct xrt_space_relation"}, 44 + {"name": "view_count", "type": "uint32_t"} 45 + ] 46 + }, 47 + 48 + "device_get_view_poses_2": { 49 + "in": [ 50 + {"name": "id", "type": "uint32_t"}, 51 + {"name": "fallback_eye_relation", "type": "struct xrt_vec3"}, 52 + {"name": "at_timestamp_ns", "type": "int64_t"}, 53 + {"name": "view_type", "type": "enum xrt_view_type"}, 54 + {"name": "view_count", "type": "uint32_t"} 55 + ], 56 + "out": [ 57 + {"name": "info", "type": "struct ipc_info_get_view_poses_2"} 58 + ] 59 + }, 60 + 61 + "device_compute_distortion": { 62 + "in": [ 63 + {"name": "id", "type": "uint32_t"}, 64 + {"name": "view", "type": "uint32_t"}, 65 + {"name": "u", "type": "float"}, 66 + {"name": "v", "type": "float"} 67 + ], 68 + "out": [ 69 + {"name": "triplet", "type": "struct xrt_uv_triplet"} 70 + ] 71 + }, 72 + 73 + "device_begin_plane_detection_ext": { 74 + "in": [ 75 + {"name": "id", "type": "uint32_t"}, 76 + {"name": "plane_detection_id", "type": "uint64_t"} 77 + ], 78 + "out": [ 79 + {"name": "out_plane_detection_id", "type": "uint64_t"} 80 + ] 81 + }, 82 + 83 + "device_destroy_plane_detection_ext": { 84 + "in": [ 85 + {"name": "id", "type": "uint32_t"}, 86 + {"name": "plane_detection_id", "type": "uint64_t"} 87 + ] 88 + }, 89 + 90 + "device_get_plane_detection_state_ext": { 91 + "in": [ 92 + {"name": "id", "type": "uint32_t"}, 93 + {"name": "plane_detection_id", "type": "uint64_t"} 94 + ], 95 + "out": [ 96 + {"name": "state", "type": "enum xrt_plane_detector_state_ext"} 97 + ] 98 + }, 99 + 100 + "device_get_plane_detections_ext": { 101 + "varlen": true, 102 + "in": [ 103 + {"name": "id", "type": "uint32_t"}, 104 + {"name": "plane_detection_id", "type": "uint64_t"} 105 + ], 106 + "out": [ 107 + {"name": "location_size", "type": "uint32_t"}, 108 + {"name": "polygon_size", "type": "uint32_t"}, 109 + {"name": "vertex_size", "type": "uint32_t"} 110 + ] 111 + }, 112 + 113 + "device_get_presence": { 114 + "in": [ 115 + {"name": "id", "type": "uint32_t"} 116 + ], 117 + "out": [ 118 + {"name": "presence", "type": "bool"} 119 + ] 120 + }, 121 + 122 + "device_set_output": { 123 + "in": [ 124 + {"name": "id", "type": "uint32_t"}, 125 + {"name": "name", "type": "enum xrt_output_name"}, 126 + {"name": "value", "type": "struct xrt_output_value"} 127 + ] 128 + }, 129 + 130 + "device_set_haptic_output": { 131 + "varlen": true, 132 + "in": [ 133 + {"name": "id", "type": "uint32_t"}, 134 + {"name": "name", "type": "enum xrt_output_name"}, 135 + {"name": "samples", "type": "struct ipc_pcm_haptic_buffer"} 136 + ], 137 + "out":[ 138 + {"name": "samples_consumed", "type": "uint32_t"} 139 + ] 140 + }, 141 + 142 + "device_get_output_limits": { 143 + "in": [ 144 + {"name": "id", "type": "uint32_t"} 145 + ], 146 + "out":[ 147 + {"name": "limits", "type": "struct xrt_output_limits"} 148 + ] 149 + }, 150 + 151 + "device_get_visibility_mask": { 152 + "varlen": true, 153 + "in": [ 154 + {"name": "id", "type": "uint32_t"}, 155 + {"name": "type", "type": "enum xrt_visibility_mask_type"}, 156 + {"name": "view_index", "type": "uint32_t"} 157 + ], 158 + "out": [ 159 + {"name": "mask_size", "type": "uint32_t"} 160 + ] 161 + }, 162 + 163 + "device_is_form_factor_available": { 164 + "in": [ 165 + {"name": "id", "type": "uint32_t"}, 166 + {"name": "form_factor", "type": "enum xrt_form_factor"} 167 + ], 168 + "out": [ 169 + {"name": "available", "type": "bool"} 170 + ] 171 + }, 172 + 173 + "device_get_face_tracking": { 174 + "in": [ 175 + {"name": "id", "type": "uint32_t"}, 176 + {"name": "facial_expression_type", "type": "enum xrt_input_name"}, 177 + {"name": "at_timestamp_ns", "type": "int64_t"} 178 + ], 179 + "out": [ 180 + {"name": "value", "type": "struct xrt_facial_expression_set"} 181 + ] 182 + }, 183 + 184 + "device_get_body_skeleton": { 185 + "in": [ 186 + {"name": "id", "type": "uint32_t"}, 187 + {"name": "body_tracking_type", "type": "enum xrt_input_name"} 188 + ], 189 + "out": [ 190 + {"name": "value", "type": "struct xrt_body_skeleton"} 191 + ] 192 + }, 193 + 194 + "device_get_body_joints": { 195 + "in": [ 196 + {"name": "id", "type": "uint32_t"}, 197 + {"name": "body_tracking_type", "type": "enum xrt_input_name"}, 198 + {"name": "desired_timestamp_ns", "type": "int64_t"} 199 + ], 200 + "out": [ 201 + {"name": "value", "type": "struct xrt_body_joint_set"} 202 + ] 203 + }, 204 + 205 + "device_reset_body_tracking_calibration_meta": { 206 + "in": [ 207 + {"name": "id", "type": "uint32_t"} 208 + ] 209 + }, 210 + 211 + "device_set_body_tracking_calibration_override_meta": { 212 + "in": [ 213 + {"name": "id", "type": "uint32_t"}, 214 + {"name": "new_body_height", "type": "float"} 215 + ] 216 + }, 217 + 218 + "device_get_battery_status": { 219 + "in": [ 220 + {"name": "id", "type": "uint32_t"} 221 + ], 222 + "out": [ 223 + {"name": "present", "type": "bool"}, 224 + {"name": "charging", "type": "bool"}, 225 + {"name": "charge", "type": "float"} 226 + ] 227 + }, 228 + 229 + "device_get_brightness": { 230 + "in": [ 231 + {"name": "id", "type": "uint32_t"} 232 + ], 233 + "out": [ 234 + {"name": "brightness", "type": "float"} 235 + ] 236 + }, 237 + 238 + "device_set_brightness": { 239 + "in": [ 240 + {"name": "id", "type": "uint32_t"}, 241 + {"name": "brightness", "type": "float"}, 242 + {"name": "relative", "type": "bool"} 243 + ] 244 + } 245 + }
+3
src/xrt/ipc/shared/proto/50-device.json.license
··· 1 + Copyright 2018-2025, Collabora, Ltd. 2 + 3 + SPDX-License-Identifier: BSL-1.0
+33
src/xrt/ipc/shared/proto/50-future.json
··· 1 + { 2 + "$schema": "../proto.schema.json", 3 + 4 + "future_get_state": { 5 + "in": [ 6 + {"name": "future_id", "type": "uint32_t"} 7 + ], 8 + "out": [ 9 + {"name": "out_state", "type": "enum xrt_future_state"} 10 + ] 11 + }, 12 + 13 + "future_cancel": { 14 + "in": [ 15 + {"name": "future_id", "type": "uint32_t"} 16 + ] 17 + }, 18 + 19 + "future_destroy": { 20 + "in": [ 21 + {"name": "future_id", "type": "uint32_t"} 22 + ] 23 + }, 24 + 25 + "future_get_result": { 26 + "in": [ 27 + {"name": "future_id", "type": "uint32_t"} 28 + ], 29 + "out": [ 30 + {"name": "out_ft_result", "type": "struct xrt_future_result"} 31 + ] 32 + } 33 + }
+3
src/xrt/ipc/shared/proto/50-future.json.license
··· 1 + Copyright 2018-2025, Collabora, Ltd. 2 + 3 + SPDX-License-Identifier: BSL-1.0
+22
src/xrt/ipc/shared/proto/50-session.json
··· 1 + { 2 + "$schema": "../proto.schema.json", 3 + 4 + "session_create": { 5 + "in": [ 6 + {"name": "xsi", "type": "struct xrt_session_info"}, 7 + {"name": "create_native_compositor", "type": "bool"} 8 + ] 9 + }, 10 + 11 + "session_poll_events": { 12 + "out": [ 13 + {"name": "event", "type": "union xrt_session_event"} 14 + ] 15 + }, 16 + 17 + "session_begin": {}, 18 + 19 + "session_end": {}, 20 + 21 + "session_destroy": {} 22 + }
+3
src/xrt/ipc/shared/proto/50-session.json.license
··· 1 + Copyright 2018-2025, Collabora, Ltd. 2 + 3 + SPDX-License-Identifier: BSL-1.0
+122
src/xrt/ipc/shared/proto/50-space.json
··· 1 + { 2 + "$schema": "../proto.schema.json", 3 + 4 + "space_create_semantic_ids": { 5 + "out": [ 6 + {"name": "root_id", "type": "uint32_t"}, 7 + {"name": "view_id", "type": "uint32_t"}, 8 + {"name": "local_id", "type": "uint32_t"}, 9 + {"name": "local_floor_id", "type": "uint32_t"}, 10 + {"name": "stage_id", "type": "uint32_t"}, 11 + {"name": "unbounded_id", "type": "uint32_t"} 12 + ] 13 + }, 14 + 15 + "space_create_offset": { 16 + "in": [ 17 + {"name": "parent_id", "type": "uint32_t"}, 18 + {"name": "offset", "type": "struct xrt_pose"} 19 + ], 20 + "out": [ 21 + {"name": "space_id", "type": "uint32_t"} 22 + ] 23 + }, 24 + 25 + "space_create_pose": { 26 + "in": [ 27 + {"name": "xdev_id", "type": "uint32_t"}, 28 + {"name": "name", "type": "enum xrt_input_name"} 29 + ], 30 + "out": [ 31 + {"name": "space_id", "type": "uint32_t"} 32 + ] 33 + }, 34 + 35 + "space_locate_space": { 36 + "in": [ 37 + {"name": "base_space_id", "type": "uint32_t"}, 38 + {"name": "base_offset", "type": "struct xrt_pose"}, 39 + {"name": "at_timestamp", "type": "int64_t"}, 40 + {"name": "space_id", "type": "uint32_t"}, 41 + {"name": "offset", "type": "struct xrt_pose"} 42 + ], 43 + "out": [ 44 + {"name": "relation", "type": "struct xrt_space_relation"} 45 + ] 46 + }, 47 + 48 + "space_locate_spaces": { 49 + "varlen": true, 50 + "in": [ 51 + {"name": "base_space_id", "type": "uint32_t"}, 52 + {"name": "base_offset", "type": "struct xrt_pose"}, 53 + {"name": "space_count", "type": "uint32_t"}, 54 + {"name": "at_timestamp", "type": "int64_t"} 55 + ] 56 + }, 57 + 58 + "space_locate_device": { 59 + "in": [ 60 + {"name": "base_space_id", "type": "uint32_t"}, 61 + {"name": "base_offset", "type": "struct xrt_pose"}, 62 + {"name": "at_timestamp", "type": "int64_t"}, 63 + {"name": "xdev_id", "type": "uint32_t"} 64 + ], 65 + "out": [ 66 + {"name": "relation", "type": "struct xrt_space_relation"} 67 + ] 68 + }, 69 + 70 + "space_destroy": { 71 + "in": [ 72 + {"name": "space_id", "type": "uint32_t"} 73 + ] 74 + }, 75 + 76 + "space_mark_ref_space_in_use": { 77 + "in": [ 78 + {"name": "type", "type": "enum xrt_reference_space_type"} 79 + ] 80 + }, 81 + 82 + "space_unmark_ref_space_in_use": { 83 + "in": [ 84 + {"name": "type", "type": "enum xrt_reference_space_type"} 85 + ] 86 + }, 87 + 88 + "space_recenter_local_spaces": { 89 + }, 90 + 91 + "space_get_tracking_origin_offset": { 92 + "in": [ 93 + {"name": "origin_id", "type": "uint32_t"} 94 + ], 95 + "out": [ 96 + {"name": "offset", "type": "struct xrt_pose"} 97 + ] 98 + }, 99 + 100 + "space_set_tracking_origin_offset": { 101 + "in": [ 102 + {"name": "origin_id", "type": "uint32_t"}, 103 + {"name": "offset", "type": "struct xrt_pose"} 104 + ] 105 + }, 106 + 107 + "space_get_reference_space_offset": { 108 + "in": [ 109 + {"name": "type", "type": "enum xrt_reference_space_type"} 110 + ], 111 + "out": [ 112 + {"name": "offset", "type": "struct xrt_pose"} 113 + ] 114 + }, 115 + 116 + "space_set_reference_space_offset": { 117 + "in": [ 118 + {"name": "type", "type": "enum xrt_reference_space_type"}, 119 + {"name": "offset", "type": "struct xrt_pose"} 120 + ] 121 + } 122 + }
+3
src/xrt/ipc/shared/proto/50-space.json.license
··· 1 + Copyright 2018-2025, Collabora, Ltd. 2 + 3 + SPDX-License-Identifier: BSL-1.0
+66
src/xrt/ipc/shared/proto/50-swapchain.json
··· 1 + { 2 + "$schema": "../proto.schema.json", 3 + 4 + "swapchain_get_properties": { 5 + "in": [ 6 + {"name": "info", "type": "struct xrt_swapchain_create_info"} 7 + ], 8 + "out": [ 9 + {"name": "xsccp", "type": "struct xrt_swapchain_create_properties"} 10 + ] 11 + }, 12 + 13 + "swapchain_create": { 14 + "in": [ 15 + {"name": "info", "type": "struct xrt_swapchain_create_info"} 16 + ], 17 + "out": [ 18 + {"name": "id", "type": "uint32_t"}, 19 + {"name": "image_count", "type": "uint32_t"}, 20 + {"name": "size", "type": "uint64_t"}, 21 + {"name": "use_dedicated_allocation", "type": "bool"} 22 + ], 23 + "out_handles": {"type": "xrt_graphics_buffer_handle_t"} 24 + }, 25 + 26 + "swapchain_import": { 27 + "in": [ 28 + {"name": "info", "type": "struct xrt_swapchain_create_info"}, 29 + {"name": "args", "type": "struct ipc_arg_swapchain_from_native"} 30 + ], 31 + "out": [ 32 + {"name": "id", "type": "uint32_t"} 33 + ], 34 + "in_handles": {"type": "xrt_graphics_buffer_handle_t"} 35 + }, 36 + 37 + "swapchain_wait_image": { 38 + "in": [ 39 + {"name": "id", "type": "uint32_t"}, 40 + {"name": "timeout_ns", "type": "int64_t"}, 41 + {"name": "index", "type": "uint32_t"} 42 + ] 43 + }, 44 + 45 + "swapchain_acquire_image": { 46 + "in": [ 47 + {"name": "id", "type": "uint32_t"} 48 + ], 49 + "out": [ 50 + {"name": "index", "type": "uint32_t"} 51 + ] 52 + }, 53 + 54 + "swapchain_release_image": { 55 + "in": [ 56 + {"name": "id", "type": "uint32_t"}, 57 + {"name": "index", "type": "uint32_t"} 58 + ] 59 + }, 60 + 61 + "swapchain_destroy": { 62 + "in": [ 63 + {"name": "id", "type": "uint32_t"} 64 + ] 65 + } 66 + }
+3
src/xrt/ipc/shared/proto/50-swapchain.json.license
··· 1 + Copyright 2018-2025, Collabora, Ltd. 2 + 3 + SPDX-License-Identifier: BSL-1.0
+66
src/xrt/ipc/shared/proto/50-system.json
··· 1 + { 2 + "$schema": "../proto.schema.json", 3 + 4 + "system_get_properties": { 5 + "out": [ 6 + {"name": "properties", "type": "struct xrt_system_properties"} 7 + ] 8 + }, 9 + 10 + "system_get_client_info": { 11 + "in": [ 12 + {"name": "id", "type": "uint32_t"} 13 + ], 14 + "out": [ 15 + {"name": "ias", "type": "struct ipc_app_state"} 16 + ] 17 + }, 18 + 19 + "system_get_clients": { 20 + "out": [ 21 + {"name": "clients", "type": "struct ipc_client_list"} 22 + ] 23 + }, 24 + 25 + "system_set_primary_client": { 26 + "in": [ 27 + {"name": "id", "type": "uint32_t"} 28 + ] 29 + }, 30 + 31 + "system_set_focused_client": { 32 + "in": [ 33 + {"name": "id", "type": "uint32_t"} 34 + ] 35 + }, 36 + 37 + "system_toggle_io_client": { 38 + "in": [ 39 + {"name": "id", "type": "uint32_t"} 40 + ] 41 + }, 42 + 43 + "system_devices_get_roles": { 44 + "out": [ 45 + {"name": "system_roles", "type": "struct xrt_system_roles"} 46 + ] 47 + }, 48 + 49 + "system_devices_begin_feature": { 50 + "in": [ 51 + {"name": "type", "type": "enum xrt_device_feature_type"} 52 + ] 53 + }, 54 + 55 + "system_devices_end_feature": { 56 + "in": [ 57 + {"name": "type", "type": "enum xrt_device_feature_type"} 58 + ] 59 + }, 60 + 61 + "system_compositor_get_info": { 62 + "out": [ 63 + {"name": "info", "type": "struct xrt_system_compositor_info"} 64 + ] 65 + } 66 + }
+3
src/xrt/ipc/shared/proto/50-system.json.license
··· 1 + Copyright 2018-2025, Collabora, Ltd. 2 + 3 + SPDX-License-Identifier: BSL-1.0