Monado OpenXR Runtime
comp_vulkan.h
Go to the documentation of this file.
1// Copyright 2019-2021, Collabora, Ltd.
2// SPDX-License-Identifier: BSL-1.0
3/*!
4 * @file
5 * @brief Vulkan code for compositors.
6 * @author Jakob Bornecrantz <jakob@collabora.com>
7 * @ingroup comp_util
8 */
9
10#pragma once
11
12#include "xrt/xrt_compositor.h"
13#include "util/u_logging.h"
14#include "util/u_string_list.h"
15#include "vk/vk_helpers.h"
16
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22
23/*!
24 * Arguments to Vulkan bundle initialisation, all args needs setting.
25 */
27{
28 //! Vulkan version that is required.
30
31 //! Function to get all Vulkan functions from.
32 PFN_vkGetInstanceProcAddr get_instance_proc_address;
33
34 //! Extensions that the instance is created with.
36
37 //! Extensions that the instance is created with.
39
40 //! Extensions that the device is created with.
42
43 //! Extensions that the device is created with.
45
46 //! Logging level to be set on the @ref vk_bundle.
48
49 //! Should we look for a queue with no graphics, only compute.
51
52 //! Should we try to enable timeline semaphores if available
54
55 //! Vulkan physical device to be selected, -1 for auto.
57
58 //! Vulkan physical device index for clients to use, -1 for auto.
60};
61
62/*!
63 * Extra results from Vulkan bundle initialisation.
64 */
66{
67 //! Vulkan physical device selected.
69
70 //! Vulkan physical device index for clients to use.
72
73 //! Selected Vulkan device UUID.
75
76 //! Selected Vulkan device UUID to suggest to clients.
78
79 //! The (Windows) LUID for the GPU device suggested for clients.
81
82 //! Whether @ref client_gpu_deviceLUID is valid (probably only on Windows)
84};
85
86/*!
87 * Fully initialises a @ref vk_bundle, by creating instance, device and queue.
88 *
89 * @ingroup comp_util
90 */
91bool
93 const struct comp_vulkan_arguments *vk_args,
94 struct comp_vulkan_results *vk_res);
95
96
97/*
98 *
99 * Format checking.
100 *
101 */
102
103/*!
104 * Struct with supported format, these are not only check for optimal flags
105 * but also the ability to import and export them.
106 */
108{
109#define FIELD(IDENT) bool has_##IDENT;
110 VK_CSCI_FORMATS(FIELD, FIELD, FIELD, FIELD)
111#undef FIELD
112
113#if defined(XRT_GRAPHICS_BUFFER_HANDLE_IS_AHARDWAREBUFFER)
114 //! Is VK_FORMAT_R8G8B8A8_SRGB emulated with VK_FORMAT_R8G8B8A8_UNORM?
115 bool emulated_R8G8B8A8_SRGB;
116#endif
117};
118
119/*!
120 * Fills in a @ref comp_vulkan_formats struct with the supported formats, use
121 * @ref comp_vulkan_formats_copy_to_info to fill a compositor info struct.
122 *
123 * @ingroup comp_util
124 */
125void
126comp_vulkan_formats_check(struct vk_bundle *vk, struct comp_vulkan_formats *formats);
127
128/*!
129 * Fills in a @ref xrt_compositor_info struct with the formats listed from a
130 * @ref comp_vulkan_formats. This and @ref comp_vulkan_formats_check are split
131 * to allow the compositor to allow/deny certain formats.
132 *
133 * @ingroup comp_util
134 */
135void
137
138/*!
139 * Logs the formats at info level.
140 *
141 * @ingroup comp_util
142 */
143void
144comp_vulkan_formats_log(enum u_logging_level log_level, const struct comp_vulkan_formats *formats);
145
146
147#ifdef __cplusplus
148}
149#endif
u_logging_level
Logging level enum.
Definition: u_logging.h:43
#define VK_CSCI_FORMATS(THING_COLOR, THING_DS, THING_D, THING_S)
Helper for all of the supported formats to check support for.
Definition: vk_helpers.h:1456
void comp_vulkan_formats_copy_to_info(const struct comp_vulkan_formats *formats, struct xrt_compositor_info *info)
Fills in a xrt_compositor_info struct with the formats listed from a comp_vulkan_formats.
Definition: comp_vulkan.c:409
bool comp_vulkan_init_bundle(struct vk_bundle *vk, const struct comp_vulkan_arguments *vk_args, struct comp_vulkan_results *vk_res)
Fully initialises a vk_bundle, by creating instance, device and queue.
Definition: comp_vulkan.c:345
void comp_vulkan_formats_check(struct vk_bundle *vk, struct comp_vulkan_formats *formats)
Fills in a comp_vulkan_formats struct with the supported formats, use comp_vulkan_formats_copy_to_inf...
Definition: comp_vulkan.c:381
void comp_vulkan_formats_log(enum u_logging_level log_level, const struct comp_vulkan_formats *formats)
Logs the formats at info level.
Definition: comp_vulkan.c:427
Arguments to Vulkan bundle initialisation, all args needs setting.
Definition: comp_vulkan.h:27
struct u_string_list * required_instance_extensions
Extensions that the instance is created with.
Definition: comp_vulkan.h:35
bool timeline_semaphore
Should we try to enable timeline semaphores if available.
Definition: comp_vulkan.h:53
int client_gpu_index
Vulkan physical device index for clients to use, -1 for auto.
Definition: comp_vulkan.h:59
bool only_compute_queue
Should we look for a queue with no graphics, only compute.
Definition: comp_vulkan.h:50
uint32_t required_instance_version
Vulkan version that is required.
Definition: comp_vulkan.h:29
struct u_string_list * optional_device_extensions
Extensions that the device is created with.
Definition: comp_vulkan.h:44
enum u_logging_level log_level
Logging level to be set on the vk_bundle.
Definition: comp_vulkan.h:47
struct u_string_list * required_device_extensions
Extensions that the device is created with.
Definition: comp_vulkan.h:41
struct u_string_list * optional_instance_extensions
Extensions that the instance is created with.
Definition: comp_vulkan.h:38
PFN_vkGetInstanceProcAddr get_instance_proc_address
Function to get all Vulkan functions from.
Definition: comp_vulkan.h:32
int selected_gpu_index
Vulkan physical device to be selected, -1 for auto.
Definition: comp_vulkan.h:56
Struct with supported format, these are not only check for optimal flags but also the ability to impo...
Definition: comp_vulkan.h:108
Extra results from Vulkan bundle initialisation.
Definition: comp_vulkan.h:66
xrt_uuid_t client_gpu_deviceUUID
Selected Vulkan device UUID to suggest to clients.
Definition: comp_vulkan.h:77
xrt_uuid_t selected_gpu_deviceUUID
Selected Vulkan device UUID.
Definition: comp_vulkan.h:74
bool client_gpu_deviceLUID_valid
Whether client_gpu_deviceLUID is valid (probably only on Windows)
Definition: comp_vulkan.h:83
xrt_luid_t client_gpu_deviceLUID
The (Windows) LUID for the GPU device suggested for clients.
Definition: comp_vulkan.h:80
int selected_gpu_index
Vulkan physical device selected.
Definition: comp_vulkan.h:68
int client_gpu_index
Vulkan physical device index for clients to use.
Definition: comp_vulkan.h:71
Definition: u_string_list.cpp:19
A bundle of Vulkan functions and objects, used by both Compositor and Compositor client code.
Definition: vk_helpers.h:50
Capabilities and information about the compositor and device together.
Definition: xrt_compositor.h:942
To transport LUIDs between different APIs.
Definition: xrt_defines.h:60
To transport UUIDs between different APIs.
Definition: xrt_defines.h:36
Basic logging functionality.
A collection of strings, like a list of extensions to enable.
Common Vulkan code header.
Header declaring XRT graphics interfaces.