mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2024-12-28 10:36:15 +00:00
comp/main: Simplify use of u_string_list
This commit is contained in:
parent
9b9e23be62
commit
856d2d39c8
|
@ -523,25 +523,22 @@ vkGetInstanceProcAddr(VkInstance instance, const char *pName);
|
||||||
VK_KHR_SURFACE_EXTENSION_NAME
|
VK_KHR_SURFACE_EXTENSION_NAME
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
static const char *instance_extensions_none[] = {
|
static const char *instance_extensions_common[] = {
|
||||||
COMP_INSTANCE_EXTENSIONS_COMMON,
|
COMP_INSTANCE_EXTENSIONS_COMMON,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||||
static const char *instance_extensions_xcb[] = {
|
static const char *instance_extensions_xcb[] = {
|
||||||
COMP_INSTANCE_EXTENSIONS_COMMON,
|
|
||||||
VK_KHR_XCB_SURFACE_EXTENSION_NAME,
|
VK_KHR_XCB_SURFACE_EXTENSION_NAME,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||||
static const char *instance_extensions_wayland[] = {
|
static const char *instance_extensions_wayland[] = {
|
||||||
COMP_INSTANCE_EXTENSIONS_COMMON,
|
|
||||||
VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME,
|
VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *instance_extensions_direct_wayland[] = {
|
static const char *instance_extensions_direct_wayland[] = {
|
||||||
COMP_INSTANCE_EXTENSIONS_COMMON, //
|
|
||||||
VK_KHR_DISPLAY_EXTENSION_NAME, //
|
VK_KHR_DISPLAY_EXTENSION_NAME, //
|
||||||
VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, //
|
VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, //
|
||||||
VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, //
|
VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME, //
|
||||||
|
@ -554,7 +551,6 @@ static const char *instance_extensions_direct_wayland[] = {
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||||
static const char *instance_extensions_direct_mode[] = {
|
static const char *instance_extensions_direct_mode[] = {
|
||||||
COMP_INSTANCE_EXTENSIONS_COMMON,
|
|
||||||
VK_KHR_DISPLAY_EXTENSION_NAME,
|
VK_KHR_DISPLAY_EXTENSION_NAME,
|
||||||
VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME,
|
VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME,
|
||||||
VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME,
|
VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME,
|
||||||
|
@ -563,21 +559,18 @@ static const char *instance_extensions_direct_mode[] = {
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_DISPLAY_KHR
|
#ifdef VK_USE_PLATFORM_DISPLAY_KHR
|
||||||
static const char *instance_extensions_vk_display[] = {
|
static const char *instance_extensions_vk_display[] = {
|
||||||
COMP_INSTANCE_EXTENSIONS_COMMON,
|
|
||||||
VK_KHR_DISPLAY_EXTENSION_NAME,
|
VK_KHR_DISPLAY_EXTENSION_NAME,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||||
static const char *instance_extensions_android[] = {
|
static const char *instance_extensions_android[] = {
|
||||||
COMP_INSTANCE_EXTENSIONS_COMMON,
|
|
||||||
VK_KHR_ANDROID_SURFACE_EXTENSION_NAME,
|
VK_KHR_ANDROID_SURFACE_EXTENSION_NAME,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||||
static const char *instance_extensions_windows[] = {
|
static const char *instance_extensions_windows[] = {
|
||||||
COMP_INSTANCE_EXTENSIONS_COMMON,
|
|
||||||
VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
|
VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -620,68 +613,60 @@ static const char *required_device_extensions[] = {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *optional_device_extensions[] = {VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME,
|
static const char *optional_device_extensions[] = {
|
||||||
VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME,
|
VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME,
|
||||||
|
VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME,
|
||||||
#ifdef VK_EXT_robustness2
|
#ifdef VK_EXT_robustness2
|
||||||
VK_EXT_ROBUSTNESS_2_EXTENSION_NAME,
|
VK_EXT_ROBUSTNESS_2_EXTENSION_NAME,
|
||||||
#endif
|
#endif
|
||||||
#ifdef VK_EXT_display_control
|
#ifdef VK_EXT_display_control
|
||||||
VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME
|
VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME,
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool
|
|
||||||
append_all(struct comp_compositor *c, struct u_string_list *required, const char *const *arr, uint32_t size)
|
|
||||||
{
|
|
||||||
for (uint32_t i = 0; i < size; i++) {
|
|
||||||
int ret = u_string_list_append(required, arr[i]);
|
|
||||||
if (ret < 0) {
|
|
||||||
COMP_ERROR(c, "Failed to add %s to instance extension list: %d", arr[i], ret);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VkResult
|
static VkResult
|
||||||
select_instances_extensions(struct comp_compositor *c, struct u_string_list *required, struct u_string_list *optional)
|
select_instances_extensions(struct comp_compositor *c, struct u_string_list *required, struct u_string_list *optional)
|
||||||
{
|
{
|
||||||
switch (c->settings.window_type) {
|
switch (c->settings.window_type) {
|
||||||
case WINDOW_NONE:
|
case WINDOW_NONE: break;
|
||||||
append_all(c, required, instance_extensions_none, ARRAY_SIZE(instance_extensions_none));
|
|
||||||
break;
|
|
||||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||||
case WINDOW_DIRECT_WAYLAND:
|
case WINDOW_DIRECT_WAYLAND:
|
||||||
append_all(c, required, instance_extensions_direct_wayland,
|
u_string_list_append_array(required, instance_extensions_direct_wayland,
|
||||||
ARRAY_SIZE(instance_extensions_direct_wayland));
|
ARRAY_SIZE(instance_extensions_direct_wayland));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WINDOW_WAYLAND:
|
case WINDOW_WAYLAND:
|
||||||
append_all(c, required, instance_extensions_wayland, ARRAY_SIZE(instance_extensions_wayland));
|
u_string_list_append_array(required, instance_extensions_wayland,
|
||||||
|
ARRAY_SIZE(instance_extensions_wayland));
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||||
case WINDOW_XCB: append_all(c, required, instance_extensions_xcb, ARRAY_SIZE(instance_extensions_xcb)); break;
|
u_string_list_append_array(required, instance_extensions_xcb, ARRAY_SIZE(instance_extensions_xcb));
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||||
case WINDOW_DIRECT_RANDR:
|
case WINDOW_DIRECT_RANDR:
|
||||||
case WINDOW_DIRECT_NVIDIA:
|
case WINDOW_DIRECT_NVIDIA:
|
||||||
append_all(c, required, instance_extensions_direct_mode, ARRAY_SIZE(instance_extensions_direct_mode));
|
u_string_list_append_array(required, instance_extensions_direct_mode,
|
||||||
|
ARRAY_SIZE(instance_extensions_direct_mode));
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||||
case WINDOW_ANDROID:
|
case WINDOW_ANDROID:
|
||||||
append_all(c, required, instance_extensions_android, ARRAY_SIZE(instance_extensions_android));
|
u_string_list_append_array(required, instance_extensions_android,
|
||||||
|
ARRAY_SIZE(instance_extensions_android));
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||||
case WINDOW_MSWIN:
|
case WINDOW_MSWIN:
|
||||||
append_all(c, required, instance_extensions_windows, ARRAY_SIZE(instance_extensions_windows));
|
u_string_list_append_array(required, instance_extensions_windows,
|
||||||
|
ARRAY_SIZE(instance_extensions_windows));
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef VK_USE_PLATFORM_DISPLAY_KHR
|
#ifdef VK_USE_PLATFORM_DISPLAY_KHR
|
||||||
case WINDOW_VK_DISPLAY:
|
case WINDOW_VK_DISPLAY:
|
||||||
append_all(c, required, instance_extensions_vk_display, ARRAY_SIZE(instance_extensions_vk_display));
|
u_string_list_append_array(required, instance_extensions_vk_display,
|
||||||
|
ARRAY_SIZE(instance_extensions_vk_display));
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default: return VK_ERROR_INITIALIZATION_FAILED;
|
default: return VK_ERROR_INITIALIZATION_FAILED;
|
||||||
|
@ -700,9 +685,9 @@ compositor_init_vulkan(struct comp_compositor *c)
|
||||||
struct vk_bundle *vk = get_vk(c);
|
struct vk_bundle *vk = get_vk(c);
|
||||||
VkResult ret;
|
VkResult ret;
|
||||||
|
|
||||||
// every backend needs at least as many extensions as the none window
|
// every backend needs at least the common extensions
|
||||||
struct u_string_list *required_instance_ext_list =
|
struct u_string_list *required_instance_ext_list =
|
||||||
u_string_list_create_with_capacity(ARRAY_SIZE(instance_extensions_none));
|
u_string_list_create_from_array(instance_extensions_common, ARRAY_SIZE(instance_extensions_common));
|
||||||
|
|
||||||
struct u_string_list *optional_instance_ext_list = u_string_list_create();
|
struct u_string_list *optional_instance_ext_list = u_string_list_create();
|
||||||
|
|
||||||
|
@ -715,14 +700,10 @@ compositor_init_vulkan(struct comp_compositor *c)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct u_string_list *required_device_extension_list =
|
struct u_string_list *required_device_extension_list =
|
||||||
u_string_list_create_with_capacity(ARRAY_SIZE(required_device_extensions));
|
u_string_list_create_from_array(required_device_extensions, ARRAY_SIZE(required_device_extensions));
|
||||||
append_all(c, required_device_extension_list, required_device_extensions,
|
|
||||||
ARRAY_SIZE(required_device_extensions));
|
|
||||||
|
|
||||||
struct u_string_list *optional_device_extension_list =
|
struct u_string_list *optional_device_extension_list =
|
||||||
u_string_list_create_with_capacity(ARRAY_SIZE(optional_device_extensions));
|
u_string_list_create_from_array(optional_device_extensions, ARRAY_SIZE(optional_device_extensions));
|
||||||
append_all(c, optional_device_extension_list, optional_device_extensions,
|
|
||||||
ARRAY_SIZE(optional_device_extensions));
|
|
||||||
|
|
||||||
struct comp_vulkan_arguments vk_args = {
|
struct comp_vulkan_arguments vk_args = {
|
||||||
.get_instance_proc_address = vkGetInstanceProcAddr,
|
.get_instance_proc_address = vkGetInstanceProcAddr,
|
||||||
|
@ -908,12 +889,10 @@ compositor_check_vulkan_caps(struct comp_compositor *c)
|
||||||
bool use_compute = c->settings.use_compute;
|
bool use_compute = c->settings.use_compute;
|
||||||
|
|
||||||
struct u_string_list *required_device_ext_list =
|
struct u_string_list *required_device_ext_list =
|
||||||
u_string_list_create_with_capacity(ARRAY_SIZE(required_device_extensions));
|
u_string_list_create_from_array(required_device_extensions, ARRAY_SIZE(required_device_extensions));
|
||||||
append_all(c, required_device_ext_list, required_device_extensions, ARRAY_SIZE(required_device_extensions));
|
|
||||||
|
|
||||||
struct u_string_list *optional_device_ext_list =
|
struct u_string_list *optional_device_ext_list =
|
||||||
u_string_list_create_with_capacity(ARRAY_SIZE(optional_device_extensions));
|
u_string_list_create_from_array(optional_device_extensions, ARRAY_SIZE(optional_device_extensions));
|
||||||
append_all(c, optional_device_ext_list, optional_device_extensions, ARRAY_SIZE(optional_device_extensions));
|
|
||||||
|
|
||||||
// follow same device selection logic as subsequent calls
|
// follow same device selection logic as subsequent calls
|
||||||
ret = vk_create_device( //
|
ret = vk_create_device( //
|
||||||
|
|
Loading…
Reference in a new issue