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