The open source OpenXR runtime

c/main: Compositor targets can set more parameters

Allow compositor targets to require a minimum Vulkan version, and
additional optional device extensions.

+47 -1
+11 -1
src/xrt/compositor/main/comp_compositor.c
··· 46 46 #include "xrt/xrt_config_have.h" 47 47 #include "xrt/xrt_results.h" 48 48 49 + #include "math/m_api.h" 50 + 49 51 #include "os/os_time.h" 50 52 51 53 #include "util/u_var.h" ··· 614 616 optional_device_extensions, // 615 617 ARRAY_SIZE(optional_device_extensions)); // 616 618 619 + // Add per target optional device extensions. 620 + u_string_list_append_array( // 621 + optional_device_extension_list, // 622 + c->target_factory->optional_device_extensions, // 623 + c->target_factory->optional_device_extension_count); // 624 + 625 + // Select required Vulkan version, suitable for both compositor and target 626 + uint32_t required_instance_version = MAX(c->target_factory->required_instance_version, VK_API_VERSION_1_0); 617 627 618 628 /* 619 629 * Create the device. ··· 621 631 622 632 struct comp_vulkan_arguments vk_args = { 623 633 .get_instance_proc_address = vkGetInstanceProcAddr, 624 - .required_instance_version = VK_MAKE_VERSION(1, 0, 0), 634 + .required_instance_version = required_instance_version, 625 635 .required_instance_extensions = required_instance_ext_list, 626 636 .optional_instance_extensions = optional_instance_ext_list, 627 637 .required_device_extensions = required_device_extension_list,
+12
src/xrt/compositor/main/comp_target.h
··· 593 593 */ 594 594 bool is_deferred; 595 595 596 + /*! 597 + * Vulkan version that is required or 0 if no specific 598 + * requirement, equivalent to VK_MAKE_VERSION(1, 0, 0) 599 + */ 600 + uint32_t required_instance_version; 601 + 596 602 //! Required instance extensions. 597 603 const char **required_instance_extensions; 598 604 599 605 //! Required instance extension count. 600 606 size_t required_instance_extension_count; 607 + 608 + //! Optional device extensions. 609 + const char **optional_device_extensions; 610 + 611 + //! Optional device extension count. 612 + size_t optional_device_extension_count; 601 613 602 614 /*! 603 615 * Checks if this target can be detected, is the preferred target or
+3
src/xrt/compositor/main/comp_window_android.c
··· 240 240 .identifier = "android", 241 241 .requires_vulkan_for_create = false, 242 242 .is_deferred = true, 243 + .required_instance_version = 0, 243 244 .required_instance_extensions = instance_extensions, 244 245 .required_instance_extension_count = ARRAY_SIZE(instance_extensions), 246 + .optional_device_extensions = NULL, 247 + .optional_device_extension_count = 0, 245 248 .detect = detect, 246 249 .create_target = create_target, 247 250 };
+3
src/xrt/compositor/main/comp_window_direct_nvidia.c
··· 476 476 .identifier = "x11_direct_nvidia", 477 477 .requires_vulkan_for_create = true, 478 478 .is_deferred = false, 479 + .required_instance_version = 0, 479 480 .required_instance_extensions = instance_extensions, 480 481 .required_instance_extension_count = ARRAY_SIZE(instance_extensions), 482 + .optional_device_extensions = NULL, 483 + .optional_device_extension_count = 0, 481 484 .detect = detect, 482 485 .create_target = create_target, 483 486 };
+3
src/xrt/compositor/main/comp_window_direct_randr.c
··· 502 502 .identifier = "x11_direct", 503 503 .requires_vulkan_for_create = false, 504 504 .is_deferred = false, 505 + .required_instance_version = 0, 505 506 .required_instance_extensions = instance_extensions, 506 507 .required_instance_extension_count = ARRAY_SIZE(instance_extensions), 508 + .optional_device_extensions = NULL, 509 + .optional_device_extension_count = 0, 507 510 .detect = detect, 508 511 .create_target = create_target, 509 512 };
+3
src/xrt/compositor/main/comp_window_direct_wayland.c
··· 506 506 .identifier = "direct_wayland", 507 507 .requires_vulkan_for_create = false, 508 508 .is_deferred = false, 509 + .required_instance_version = 0, 509 510 .required_instance_extensions = instance_extensions, 510 511 .required_instance_extension_count = ARRAY_SIZE(instance_extensions), 512 + .optional_device_extensions = NULL, 513 + .optional_device_extension_count = 0, 511 514 .detect = detect, 512 515 .create_target = create_target, 513 516 };
+3
src/xrt/compositor/main/comp_window_mswin.c
··· 438 438 .identifier = "mswin", 439 439 .requires_vulkan_for_create = false, 440 440 .is_deferred = true, 441 + .required_instance_version = 0, 441 442 .required_instance_extensions = instance_extensions, 442 443 .required_instance_extension_count = ARRAY_SIZE(instance_extensions), 444 + .optional_device_extensions = NULL, 445 + .optional_device_extension_count = 0, 443 446 .detect = detect, 444 447 .create_target = create_target, 445 448 };
+3
src/xrt/compositor/main/comp_window_vk_display.c
··· 301 301 .identifier = "vk_display", 302 302 .requires_vulkan_for_create = true, 303 303 .is_deferred = false, 304 + .required_instance_version = 0, 304 305 .required_instance_extensions = instance_extensions, 305 306 .required_instance_extension_count = ARRAY_SIZE(instance_extensions), 307 + .optional_device_extensions = NULL, 308 + .optional_device_extension_count = 0, 306 309 .detect = detect, 307 310 .create_target = create_target, 308 311 };
+3
src/xrt/compositor/main/comp_window_wayland.c
··· 387 387 .identifier = "wayland", 388 388 .requires_vulkan_for_create = false, 389 389 .is_deferred = false, 390 + .required_instance_version = 0, 390 391 .required_instance_extensions = instance_extensions, 391 392 .required_instance_extension_count = ARRAY_SIZE(instance_extensions), 393 + .optional_device_extensions = NULL, 394 + .optional_device_extension_count = 0, 392 395 .detect = detect, 393 396 .create_target = create_target, 394 397 };
+3
src/xrt/compositor/main/comp_window_xcb.c
··· 496 496 .identifier = "x11", 497 497 .requires_vulkan_for_create = false, 498 498 .is_deferred = true, 499 + .required_instance_version = 0, 499 500 .required_instance_extensions = instance_extensions, 500 501 .required_instance_extension_count = ARRAY_SIZE(instance_extensions), 502 + .optional_device_extensions = NULL, 503 + .optional_device_extension_count = 0, 501 504 .detect = detect, 502 505 .create_target = create_target, 503 506 };