39#define VK_BUNDLE_MAX_QUEUES 3
55#define VK_NULL_QUEUE_PAIR \
56 XRT_C11_COMPOUND(struct vk_queue_pair) \
58 .family_index = VK_QUEUE_FAMILY_IGNORED, .index = (uint32_t)-1, \
86 VkPhysicalDevice physical_device;
87 int physical_device_index;
119#if defined(VK_KHR_video_encode_queue)
131#if defined(XRT_GRAPHICS_BUFFER_HANDLE_IS_WIN32_HANDLE)
132 bool color_image_import_opaque_win32;
133 bool color_image_export_opaque_win32;
134 bool depth_image_import_opaque_win32;
135 bool depth_image_export_opaque_win32;
137 bool color_image_import_d3d11;
138 bool color_image_export_d3d11;
139 bool depth_image_import_d3d11;
140 bool depth_image_export_d3d11;
142#elif defined(XRT_GRAPHICS_BUFFER_HANDLE_IS_FD)
143 bool color_image_import_opaque_fd;
144 bool color_image_export_opaque_fd;
145 bool depth_image_import_opaque_fd;
146 bool depth_image_export_opaque_fd;
148#elif defined(XRT_GRAPHICS_BUFFER_HANDLE_IS_AHARDWAREBUFFER)
149 bool color_image_import_opaque_fd;
150 bool color_image_export_opaque_fd;
151 bool depth_image_import_opaque_fd;
152 bool depth_image_export_opaque_fd;
154 bool color_image_import_ahardwarebuffer;
155 bool color_image_export_ahardwarebuffer;
156 bool depth_image_import_ahardwarebuffer;
157 bool depth_image_export_ahardwarebuffer;
160#if defined(XRT_GRAPHICS_SYNC_HANDLE_IS_FD)
162 bool fence_opaque_fd;
164 bool binary_semaphore_sync_fd;
165 bool binary_semaphore_opaque_fd;
167 bool timeline_semaphore_sync_fd;
168 bool timeline_semaphore_opaque_fd;
169#elif defined(XRT_GRAPHICS_SYNC_HANDLE_IS_WIN32_HANDLE)
170 bool fence_win32_handle;
172 bool binary_semaphore_d3d12_fence;
173 bool binary_semaphore_win32_handle;
175 bool timeline_semaphore_d3d12_fence;
176 bool timeline_semaphore_win32_handle;
178#error "Need port for fence sync handles checkers"
183#include "vk_helpers_h_ext.h.inc"
249 VkDebugReportCallbackEXT debug_report_cb;
251 VkPhysicalDeviceMemoryProperties device_memory_props;
254 PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
255 PFN_vkCreateInstance vkCreateInstance;
256 PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
259#include "vk_helpers_h_funcs.h.inc"
265 VkDeviceMemory memory;
294#define VK_CHK_ONLY_PRINT(RET, FUNC_STR) \
296 VkResult _ret = RET; \
297 if (_ret != VK_SUCCESS) { \
298 vk_print_result(vk, __FILE__, __LINE__, __func__, _ret, FUNC_STR); \
318#define VK_CHK_AND_RET(RET, FUNC_STR) \
320 VkResult _ret = RET; \
321 if (_ret != VK_SUCCESS) { \
322 vk_print_result(vk, __FILE__, __LINE__, __func__, _ret, FUNC_STR); \
344#define VK_CHK_WITH_RET(RET, FUNC_STR, TO_RET) \
346 VkResult _ret = RET; \
347 if (_ret != VK_SUCCESS) { \
348 vk_print_result(vk, __FILE__, __LINE__, __func__, _ret, FUNC_STR); \
371#define VK_CHK_WITH_GOTO(RET, FUNC_STR, GOTO) \
373 VkResult _ret = RET; \
374 if (_ret != VK_SUCCESS) { \
375 vk_print_result(vk, __FILE__, __LINE__, __func__, _ret, FUNC_STR); \
381#define XVK_CHK_AND_RET(...) U_LOG_CHK_AND_RET(vk->log_level, __VA_ARGS__)
383#define XVK_CHK_WITH_GOTO(...) U_LOG_CHK_WITH_GOTO(vk->log_level, __VA_ARGS__)
385#define XVK_CHK_WITH_RET(...) U_LOG_CHK_WITH_RET(vk->log_level, __VA_ARGS__)
387#define XVK_CHK_ONLY_PRINT(...) U_LOG_CHK_ONLY_PRINT(vk->log_level, __VA_ARGS__)
389#define XVK_CHK_ALWAYS_RET(...) U_LOG_CHK_ALWAYS_RET(vk->log_level, __VA_ARGS__)
392vk_append_to_pnext_chain(VkBaseInStructure *head, VkBaseInStructure *new_struct)
394 assert(new_struct->pNext == NULL);
396 new_struct->pNext = head->pNext;
397 head->pNext = new_struct;
411XRT_CHECK_RESULT
const char *
418XRT_CHECK_RESULT
const char *
425XRT_CHECK_RESULT
const char *
432XRT_CHECK_RESULT
const char *
439XRT_CHECK_RESULT
const char *
447XRT_CHECK_RESULT
const char *
448vk_display_plane_alpha_flag_string(VkDisplayPlaneAlphaFlagBitsKHR bits,
bool null_on_unknown);
458#define VK_TRACE(d, ...) U_LOG_IFL_T(d->log_level, __VA_ARGS__)
459#define VK_DEBUG(d, ...) U_LOG_IFL_D(d->log_level, __VA_ARGS__)
460#define VK_INFO(d, ...) U_LOG_IFL_I(d->log_level, __VA_ARGS__)
461#define VK_WARN(d, ...) U_LOG_IFL_W(d->log_level, __VA_ARGS__)
462#define VK_ERROR(d, ...) U_LOG_IFL_E(d->log_level, __VA_ARGS__)
471#if defined(VK_EXT_debug_utils) || defined(XRT_DOXYGEN)
487#define VK_NAME_OBJ(VK, TYPE, SUFFIX, OBJ, NAME) \
489 if ((VK)->has_EXT_debug_utils) { \
490 XRT_MAYBE_UNUSED TYPE _thing = (TYPE)(OBJ); \
491 vk_name_object(VK, VK_OBJECT_TYPE_##SUFFIX, (uint64_t)OBJ, NAME); \
498#define VK_NAME_OBJ(VK, TYPE, SUFFIX, OBJ, NAME) VK_NAME_OBJ_DISABLED(VK, TYPE, OBJ)
517#define VK_NAME_OBJ_DISABLED(VK, TYPE, OBJ) \
519 XRT_MAYBE_UNUSED TYPE _thing = (TYPE)(OBJ); \
525#define VK_NAME_INSTANCE(VK, OBJ, NAME) VK_NAME_OBJ_DISABLED(VK, VkInstance, (uintptr_t)OBJ)
526#define VK_NAME_PHYSICAL_DEVICE(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkPhysicalDevice, PHYSICAL_DEVICE, (uintptr_t)OBJ, NAME)
527#define VK_NAME_DEVICE(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkDevice, DEVICE, (uintptr_t)OBJ, NAME)
528#define VK_NAME_QUEUE(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkQueue, QUEUE, (uintptr_t)OBJ, NAME)
529#define VK_NAME_COMMAND_BUFFER(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkCommandBuffer, COMMAND_BUFFER, (uintptr_t)OBJ, NAME)
531#define VK_NAME_SEMAPHORE(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkSemaphore, SEMAPHORE, OBJ, NAME)
532#define VK_NAME_FENCE(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkFence, FENCE, OBJ, NAME)
533#define VK_NAME_DEVICE_MEMORY(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkDeviceMemory, DEVICE_MEMORY, OBJ, NAME)
534#define VK_NAME_BUFFER(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkBuffer, BUFFER, OBJ, NAME)
535#define VK_NAME_IMAGE(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkImage, IMAGE, OBJ, NAME)
536#define VK_NAME_EVENT(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkEvent, EVENT, OBJ, NAME)
537#define VK_NAME_QUERY_POOL(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkQueryPool, QUERY_POOL, OBJ, NAME)
538#define VK_NAME_BUFFER_VIEW(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkBufferView, BUFFER_VIEW, OBJ, NAME)
539#define VK_NAME_IMAGE_VIEW(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkImageView, IMAGE_VIEW, OBJ, NAME)
540#define VK_NAME_SHADER_MODULE(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkShaderModule, SHADER_MODULE, OBJ, NAME)
541#define VK_NAME_PIPELINE_CACHE(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkPipelineCache, PIPELINE_CACHE, OBJ, NAME)
542#define VK_NAME_PIPELINE_LAYOUT(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkPipelineLayout, PIPELINE_LAYOUT, OBJ, NAME)
543#define VK_NAME_RENDER_PASS(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkRenderPass, RENDER_PASS, OBJ, NAME)
544#define VK_NAME_PIPELINE(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkPipeline, PIPELINE, OBJ, NAME)
545#define VK_NAME_DESCRIPTOR_SET_LAYOUT(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkDescriptorSetLayout, DESCRIPTOR_SET_LAYOUT, OBJ, NAME)
546#define VK_NAME_SAMPLER(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkSampler, SAMPLER, OBJ, NAME)
547#define VK_NAME_DESCRIPTOR_POOL(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkDescriptorPool, DESCRIPTOR_POOL, OBJ, NAME)
548#define VK_NAME_DESCRIPTOR_SET(VK, OBJ, NAME) VK_NAME_OBJ_DISABLED(VK, VkDescriptorSet, OBJ)
549#define VK_NAME_FRAMEBUFFER(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkFramebuffer, FRAMEBUFFER, OBJ, NAME)
550#define VK_NAME_COMMAND_POOL(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkCommandPool, COMMAND_POOL, OBJ, NAME)
552#define VK_NAME_SURFACE(VK, OBJ, NAME) VK_NAME_OBJ_DISABLED(VK, VkSurfaceKHR, OBJ)
553#define VK_NAME_SWAPCHAIN(VK, OBJ, NAME) VK_NAME_OBJ(VK, VkSwapchainKHR, SWAPCHAIN_KHR, OBJ, NAME)
571 const char *layer_name,
572 uint32_t *out_prop_count,
573 VkExtensionProperties **out_props);
583 uint32_t *out_physical_device_count,
584 VkPhysicalDevice **out_physical_devices);
594 VkPhysicalDevice physical_device,
595 const char *layer_name,
596 uint32_t *out_prop_count,
597 VkExtensionProperties **out_props);
609 VkPhysicalDevice physical_device,
610 uint32_t *out_prop_count,
611 VkQueueFamilyProperties **out_props);
613#if defined(VK_KHR_surface) || defined(XRT_DOXYGEN)
622 VkSurfaceKHR surface,
623 uint32_t *out_format_count,
624 VkSurfaceFormatKHR **out_formats);
633 VkSurfaceKHR surface,
634 uint32_t *out_present_mode_count,
635 VkPresentModeKHR **out_present_modes);
638#if defined(VK_KHR_swapchain) || defined(XRT_DOXYGEN)
646 VkSwapchainKHR swapchain,
647 uint32_t *out_image_count,
648 VkImage **out_images);
651#if defined(VK_USE_PLATFORM_DISPLAY_KHR) || defined(XRT_DOXYGEN)
659 VkPhysicalDevice physical_device,
660 uint32_t *out_prop_count,
661 VkDisplayPropertiesKHR **out_props);
670 VkPhysicalDevice physical_device,
671 uint32_t *out_prop_count,
672 VkDisplayPlanePropertiesKHR **out_props);
682 VkPhysicalDevice physical_device,
683 VkDisplayKHR display,
684 uint32_t *out_prop_count,
685 VkDisplayModePropertiesKHR **out_props);
772 bool shader_image_gather_extended;
773 bool shader_storage_image_write_without_format;
774 bool null_descriptor;
775 bool timeline_semaphore;
776 bool synchronization_2;
777 bool ext_fmt_resolve;
778 bool storage_buffer_8bit_access;
783 bool video_maintenance_1;
784 bool image_tiling_control;
795XRT_CHECK_RESULT VkResult
799 VkQueueGlobalPriorityEXT global_priority,
826 os_mutex_lock(&q->
mutex);
833 return os_mutex_trylock(&q->
mutex);
840 os_mutex_unlock(&q->
mutex);
849XRT_CHECK_RESULT VkResult
851 PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr,
853 VkPhysicalDevice physical_device,
855 uint32_t queue_family_index,
856 uint32_t queue_index,
857 bool external_fence_fd_enabled,
858 bool external_semaphore_fd_enabled,
859 bool timeline_semaphore_enabled,
860 bool image_format_list_enabled,
861 bool debug_utils_enabled,
875vk_get_memory_type(
struct vk_bundle *vk, uint32_t type_bits, VkMemoryPropertyFlags memory_props, uint32_t *out_type_id);
909XRT_CHECK_RESULT VkResult
912 const VkMemoryRequirements *requirements,
913 const void *pNext_for_allocate,
914 const char *caller_name,
915 VkDeviceMemory *out_mem);
938XRT_CHECK_RESULT VkResult
943 VkDeviceMemory *out_mem);
958XRT_CHECK_RESULT VkResult
960 VkDeviceMemory device_memory,
971 VkImageUsageFlags usage,
972 VkDeviceMemory *out_mem,
983 struct vk_bundle *vk, VkExtent2D
extent, VkImageUsageFlags usage, VkDeviceMemory *out_mem, VkImage *out_image);
993 VkImageTiling image_tiling,
994 VkImageUsageFlags image_usage_flags,
995 VkMemoryPropertyFlags memory_property_flags,
996 VkDeviceMemory *out_mem,
1003vk_create_sampler(
struct vk_bundle *vk, VkSamplerAddressMode clamp_mode, VkSampler *out_sampler);
1018 VkImageViewType type,
1020 VkImageSubresourceRange subresource_range,
1021 VkImageView *out_view);
1027vk_create_view_swizzle(
struct vk_bundle *vk,
1029 VkImageViewType type,
1031 VkImageSubresourceRange subresource_range,
1032 VkComponentMapping components,
1033 VkImageView *out_view);
1044 VkImageViewType type,
1046 VkImageUsageFlags image_usage,
1047 VkImageSubresourceRange subresource_range,
1048 VkComponentMapping components,
1049 VkImageView *out_view);
1060 VkImageViewType type,
1062 VkImageUsageFlags image_usage,
1063 VkImageSubresourceRange subresource_range,
1064 VkImageView *out_view);
1074vk_init_descriptor_pool(
struct vk_bundle *vk,
1075 const VkDescriptorPoolSize *pool_sizes,
1076 uint32_t pool_size_count,
1078 VkDescriptorPool *out_descriptor_pool);
1081vk_allocate_descriptor_sets(
struct vk_bundle *vk,
1082 VkDescriptorPool descriptor_pool,
1084 const VkDescriptorSetLayout *set_layout,
1085 VkDescriptorSet *sets);
1097 VkBufferUsageFlags usage,
1098 VkMemoryPropertyFlags properties,
1099 VkBuffer *out_buffer,
1100 VkDeviceMemory *out_mem);
1106vk_update_buffer(
struct vk_bundle *vk,
float *buffer,
size_t buffer_size, VkDeviceMemory memory);
1124 VkCommandBuffer cmd_buffer,
1126 VkAccessFlags src_access_mask,
1127 VkAccessFlags dst_access_mask,
1128 VkImageLayout old_image_layout,
1129 VkImageLayout new_image_layout,
1130 VkPipelineStageFlags src_stage_mask,
1131 VkPipelineStageFlags dst_stage_mask,
1132 VkImageSubresourceRange subresource_range);
1143 VkCommandBuffer cmd_buffer,
1145 VkAccessFlags src_access_mask,
1146 VkAccessFlags dst_access_mask,
1147 VkImageLayout old_layout,
1148 VkImageLayout new_layout,
1149 VkImageSubresourceRange subresource_range);
1151#if defined(VK_EXT_debug_utils) || defined(XRT_DOXYGEN)
1195 VkDescriptorPool *out_descriptor_pool);
1204 VkDescriptorPool descriptor_pool,
1205 VkDescriptorSetLayout descriptor_layout,
1206 VkDescriptorSet *out_descriptor_set);
1215 VkDescriptorSetLayout descriptor_set_layout,
1216 VkPipelineLayout *out_pipeline_layout);
1233 VkPipelineCache pipeline_cache,
1234 VkShaderModule shader,
1235 VkPipelineLayout pipeline_layout,
1236 const VkSpecializationInfo *specialization_info,
1237 VkPipeline *out_compute_pipeline);
1252XRT_CHECK_RESULT
bool
1265XRT_CHECK_RESULT VkResult
1283XRT_CHECK_RESULT VkResult
1303XRT_CHECK_RESULT VkResult
1306#if defined(VK_KHR_timeline_semaphore) || defined(XRT_DOXYGEN)
1313XRT_CHECK_RESULT VkResult
1314vk_create_timeline_semaphore_and_native(
struct vk_bundle *vk,
1315 VkSemaphore *out_sem,
1331XRT_CHECK_RESULT VkResult
1334#if defined(VK_KHR_timeline_semaphore) || defined(XRT_DOXYGEN)
1341XRT_CHECK_RESULT VkResult
1352#if defined(VK_EXT_calibrated_timestamps) || defined(VK_KHR_calibrated_timestamps) || defined(XRT_DOXYGEN)
1372XRT_CHECK_RESULT VkResult
u_logging_level
Logging level enum.
Definition u_logging.h:45
VkResult vk_enumerate_display_mode_properties(struct vk_bundle *vk, VkPhysicalDevice physical_device, VkDisplayKHR display, uint32_t *out_prop_count, VkDisplayModePropertiesKHR **out_props)
Enumerate the mode properties of the given VkDisplayKHR, which belongs to the given VkPhysicalDevice.
VkResult vk_enumerate_physical_device_extension_properties(struct vk_bundle *vk, VkPhysicalDevice physical_device, const char *layer_name, uint32_t *out_prop_count, VkExtensionProperties **out_props)
Enumerate the extension properties of the given VkPhysicalDevice for the named layer_name,...
Definition vk_enumerate.c:103
VkResult vk_create_image_advanced(struct vk_bundle *vk, VkExtent3D extent, VkFormat format, VkImageTiling image_tiling, VkImageUsageFlags image_usage_flags, VkMemoryPropertyFlags memory_property_flags, VkDeviceMemory *out_mem, VkImage *out_image)
Helper to create a VkImage, with more options for tiling and memory storage.
Definition vk_helpers.c:268
VkResult vk_enumerate_physical_display_plane_properties(struct vk_bundle *vk, VkPhysicalDevice physical_device, uint32_t *out_prop_count, VkDisplayPlanePropertiesKHR **out_props)
Enumerate the display plane properties of the given VkPhysicalDevice.
void vk_cmd_image_barrier_gpu_locked(struct vk_bundle *vk, VkCommandBuffer cmd_buffer, VkImage image, VkAccessFlags src_access_mask, VkAccessFlags dst_access_mask, VkImageLayout old_layout, VkImageLayout new_layout, VkImageSubresourceRange subresource_range)
Inserts a image barrier command specifically for GPU commands, doesn't take any locks,...
Definition vk_helpers.c:1080
XRT_CHECK_RESULT VkResult vk_init_from_given(struct vk_bundle *vk, PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr, VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, uint32_t queue_family_index, uint32_t queue_index, bool external_fence_fd_enabled, bool external_semaphore_fd_enabled, bool timeline_semaphore_enabled, bool image_format_list_enabled, bool debug_utils_enabled, enum u_logging_level log_level)
Initialize a bundle with objects given to us by client code, used by client_vk_compositor in Composit...
Definition vk_bundle_init.c:1278
VkResult vk_create_image_mutable_rgba(struct vk_bundle *vk, VkExtent2D extent, VkImageUsageFlags usage, VkDeviceMemory *out_mem, VkImage *out_image)
Helper to create a mutable RG88B8A8 VkImage that specializes in the two UNORM and SRGB variants of th...
Definition vk_helpers.c:231
VkResult vk_create_view_swizzle_usage(struct vk_bundle *vk, VkImage image, VkImageViewType type, VkFormat format, VkImageUsageFlags image_usage, VkImageSubresourceRange subresource_range, VkComponentMapping components, VkImageView *out_view)
Creates a swizzled image view with a specific subset of usage, useful for a mutable image where one f...
Definition vk_helpers.c:836
XRT_CHECK_RESULT VkResult vk_convert_timestamps_to_host_ns(struct vk_bundle *vk, uint32_t count, uint64_t *in_out_timestamps)
Convert timestamps in GPU ticks (as return by VkQueryPool timestamp queries) into host CPU nanosecond...
XRT_CHECK_RESULT VkResult vk_create_semaphore_from_native(struct vk_bundle *vk, xrt_graphics_sync_handle_t native, VkSemaphore *out_sem)
Creates a Vulkan semaphore from a native graphics sync handle.
Definition vk_sync_objects.c:461
void vk_cmd_image_barrier_locked(struct vk_bundle *vk, VkCommandBuffer cmd_buffer, VkImage image, VkAccessFlags src_access_mask, VkAccessFlags dst_access_mask, VkImageLayout old_image_layout, VkImageLayout new_image_layout, VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask, VkImageSubresourceRange subresource_range)
Inserts a image barrier command, doesn't take any locks, the calling code will need hold the lock for...
Definition vk_helpers.c:1043
VkResult vk_enumerate_physical_device_display_properties(struct vk_bundle *vk, VkPhysicalDevice physical_device, uint32_t *out_prop_count, VkDisplayPropertiesKHR **out_props)
Enumerate the display properties of the given VkPhysicalDevice.
XRT_CHECK_RESULT VkResult vk_create_timeline_semaphore_from_native(struct vk_bundle *vk, xrt_graphics_sync_handle_t native, VkSemaphore *out_sem)
Creates a Vulkan timeline semaphore from a native graphics sync handle, see vk_create_semaphore_from_...
VkResult vk_create_image_simple(struct vk_bundle *vk, VkExtent2D extent, VkFormat format, VkImageUsageFlags usage, VkDeviceMemory *out_mem, VkImage *out_image)
Helper to create a VkImage.
Definition vk_helpers.c:210
void vk_get_physical_device_queue_family_properties(struct vk_bundle *vk, VkPhysicalDevice physical_device, uint32_t *out_prop_count, VkQueueFamilyProperties **out_props)
Get the queue family properties of the given VkPhysicalDevice, note this function does not return a r...
Definition vk_enumerate.c:128
VkResult vk_select_physical_device(struct vk_bundle *vk, int forced_index)
Setup the physical device, this is called by vk_create_device but has uses for outside of that.
Definition vk_bundle_init.c:885
XRT_CHECK_RESULT VkResult vk_create_device(struct vk_bundle *vk, int forced_index, bool only_compute, VkQueueGlobalPriorityEXT global_priority, struct u_extension_list *required_device_ext_list, struct u_extension_list *optional_device_ext_list, const struct vk_device_features *optional_device_features)
Creates a VkDevice and initialises the VkQueue.
Definition vk_bundle_init.c:891
VkResult vk_enumerate_swapchain_images(struct vk_bundle *vk, VkSwapchainKHR swapchain, uint32_t *out_image_count, VkImage **out_images)
Enumerate the images of the given VkSwapchainKHR.
VkResult vk_deinit_mutex(struct vk_bundle *vk)
De-initialize mutexes in the vk_bundle.
Definition vk_bundle_init.c:1259
XRT_CHECK_RESULT VkResult vk_create_semaphore_and_native(struct vk_bundle *vk, VkSemaphore *out_sem, xrt_graphics_sync_handle_t *out_native)
Creates a Vulkan semaphore and a native graphics sync handle.
Definition vk_sync_objects.c:282
XRT_CHECK_RESULT VkResult vk_create_and_submit_fence_native(struct vk_bundle *vk, xrt_graphics_sync_handle_t *out_native)
Creates a Vulkan fence, submits it to the default VkQueue and return its native graphics sync handle.
Definition vk_sync_objects.c:105
VkResult vk_enumerate_surface_present_modes(struct vk_bundle *vk, VkSurfaceKHR surface, uint32_t *out_present_mode_count, VkPresentModeKHR **out_present_modes)
Enumerate the present modes of the given VkSurfaceKHR.
XRT_CHECK_RESULT VkResult vk_create_image_from_native(struct vk_bundle *vk, const struct xrt_swapchain_create_info *info, struct xrt_image_native *image_native, VkImage *out_image, VkDeviceMemory *out_mem)
Creates a Vulkan device memory and image from a native graphics buffer handle.
Definition vk_helpers.c:384
VkResult vk_get_loader_functions(struct vk_bundle *vk, PFN_vkGetInstanceProcAddr g)
Can be done on a completely bare bundle.
Definition vk_function_loaders.c:41
XRT_CHECK_RESULT bool vk_can_import_and_export_timeline_semaphore(struct vk_bundle *vk)
Is there a good likelihood that the import/export of a timeline semaphore will succeed,...
Definition vk_sync_objects.c:77
VkResult vk_enumerate_physical_devices(struct vk_bundle *vk, uint32_t *out_physical_device_count, VkPhysicalDevice **out_physical_devices)
Enumerate the physical devices of the VkInstance that has been opened on the given vk_bundle.
Definition vk_enumerate.c:80
XRT_CHECK_RESULT VkResult vk_create_fence_sync_from_native(struct vk_bundle *vk, xrt_graphics_sync_handle_t native, VkFence *out_fence)
Creates a Vulkan fence from a native graphics sync handle.
Definition vk_sync_objects.c:338
VkResult vk_enumerate_instance_extensions_properties(struct vk_bundle *vk, const char *layer_name, uint32_t *out_prop_count, VkExtensionProperties **out_props)
Return the VkExtensionProperties of the given layer_name, NULL means the "base" driver instance.
Definition vk_enumerate.c:56
VkResult vk_create_view_usage(struct vk_bundle *vk, VkImage image, VkImageViewType type, VkFormat format, VkImageUsageFlags image_usage, VkImageSubresourceRange subresource_range, VkImageView *out_view)
Creates a image with a specific subset of usage, useful for a mutable images where one format might n...
Definition vk_helpers.c:878
VkResult vk_check_required_instance_extensions(struct vk_bundle *vk, struct u_extension_list *required_instance_ext_list)
Check if the required instance extensions are supported, if not print error message with all extensio...
Definition vk_bundle_init.c:100
XRT_CHECK_RESULT VkResult vk_alloc_and_bind_image_memory(struct vk_bundle *vk, VkImage image, const VkMemoryRequirements *requirements, const void *pNext_for_allocate, const char *caller_name, VkDeviceMemory *out_mem)
Allocate memory for an image and bind it to that image.
Definition vk_helpers.c:91
VkResult vk_enumerate_surface_formats(struct vk_bundle *vk, VkSurfaceKHR surface, uint32_t *out_format_count, VkSurfaceFormatKHR **out_formats)
Enumerate the surface formats of the given VkSurfaceKHR, returns a list of VkSurfaceFormatKHR,...
void vk_name_object(struct vk_bundle *vk, VkObjectType type, uint64_t object, const char *name)
Uses VK_EXT_debug_utils to set a name for an object, for easier debugging.
VkResult vk_get_device_functions(struct vk_bundle *vk)
Requires a device to have been created and set on the bundle.
Definition vk_function_loaders.c:64
XRT_CHECK_RESULT VkResult vk_get_native_handle_from_device_memory(struct vk_bundle *vk, VkDeviceMemory device_memory, xrt_graphics_buffer_handle_t *out_handle)
Given a DeviceMemory handle created to be exportable, outputs the native buffer type (FD on desktop L...
Definition vk_helpers.c:693
VkResult vk_get_instance_functions(struct vk_bundle *vk)
Requires a instance to have been created and set on the bundle.
Definition vk_function_loaders.c:55
void vk_cmd_insert_label(struct vk_bundle *vk, VkCommandBuffer cmd_buffer, const char *name)
Uses VK_EXT_debug_utils to insert debug label into a VkCommandBuffer.
VkResult vk_init_mutex(struct vk_bundle *vk)
Initialize mutexes in the vk_bundle.
Definition vk_bundle_init.c:1243
VkResult vk_build_instance_extensions(struct vk_bundle *vk, struct u_extension_list *required_instance_ext_list, struct u_extension_list *optional_instance_ext_list, struct u_extension_list **out_instance_ext_list)
Build instance extensions from required and optional instance extensions.
Definition vk_bundle_init.c:86
Wrapper around OS threading native functions.
Definition t_rift_blobwatch.c:113
A wrapper around a native mutex.
Definition os_threading.h:69
Definition u_extension_list.cpp:33
Definition vk_helpers.h:263
Definition vk_helpers.h:62
uint32_t family_index
The queue family index.
Definition vk_helpers.h:66
VkQueue queue
The Vulkan queue handle.
Definition vk_helpers.h:64
struct os_mutex mutex
The queue mutex -.
Definition vk_helpers.h:70
uint32_t index
The queue (instance) index.
Definition vk_helpers.h:68
A bundle of Vulkan functions and objects, used by both Compositor and Compositor client code.
Definition vk_helpers.h:81
uint32_t max_bound_descriptor_sets
Maximum number of descriptor sets that can be simultaneously used by a pipeline.
Definition vk_helpers.h:227
bool synchronization_2
Was synchronization2 requested, available, and enabled?
Definition vk_helpers.h:200
uint32_t max_descriptor_set_samplers
Maximum number of samplers that can be included in a pipeline layout.
Definition vk_helpers.h:230
bool timeline_semaphore
Were timeline semaphore requested, available, and enabled?
Definition vk_helpers.h:197
uint32_t max_per_stage_descriptor_samplers
Maximum number of samplers that can be accessible to a single shader stage in a pipeline layout.
Definition vk_helpers.h:236
bool present_id
Was KHR_present_id requested, available, and enabled?
Definition vk_helpers.h:203
bool video_maintenance_1
Was KHR_video_maintenance1 requested, available, and enabled?
Definition vk_helpers.h:215
bool present_id2
Was KHR_present_id2 requested, available, and enabled?
Definition vk_helpers.h:206
uint32_t timestamp_valid_bits
Valid bits in the queue selected.
Definition vk_helpers.h:194
uint32_t max_sampler_allocation_count
Maximum number of sampler objects, as created by vkCreateSampler, which can simultaneously exist on.
Definition vk_helpers.h:224
uint32_t max_descriptor_set_sampled_images
Maximum number of sampled images that can be included in a pipeline layout.
Definition vk_helpers.h:233
uint32_t max_per_stage_descriptor_storage_images
Per stage limit on storage images.
Definition vk_helpers.h:242
bool is_tegra
Is the GPU a tegra device.
Definition vk_helpers.h:246
struct vk_bundle_queue * main_queue
Main queue for general work.
Definition vk_helpers.h:108
bool timestamp_compute_and_graphics
Are timestamps available for compute and graphics queues?
Definition vk_helpers.h:188
bool present_wait
Was KHR_present_wait requested, available, and enabled?
Definition vk_helpers.h:209
bool present_wait2
Was KHR_present_wait2 requested, available, and enabled?
Definition vk_helpers.h:212
struct vk_bundle_queue queues[3]
queues - a free list of unique queues
Definition vk_helpers.h:98
uint32_t max_per_stage_descriptor_sampled_images
Per stage limit on sampled images (includes combined).
Definition vk_helpers.h:239
bool image_tiling_control
Was EXT_image_tiling_control requested, available, and enabled?
Definition vk_helpers.h:218
float timestamp_period
Nanoseconds per gpu tick.
Definition vk_helpers.h:191
struct vk_bundle_queue * graphics_queue
Graphics queue.
Definition vk_helpers.h:117
Arguments to vk_create_descriptor_pool function.
Definition vk_helpers.h:1174
uint32_t descriptor_count
The max count of created descriptors.
Definition vk_helpers.h:1181
uint32_t uniform_per_descriptor_count
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER.
Definition vk_helpers.h:1175
bool freeable
Are descriptors freeable, or must vkResetDescriptorPool be used.
Definition vk_helpers.h:1184
uint32_t sampler_per_descriptor_count
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER.
Definition vk_helpers.h:1176
uint32_t storage_image_per_descriptor_count
VK_DESCRIPTOR_TYPE_STORAGE_IMAGE.
Definition vk_helpers.h:1177
uint32_t storage_buffer_per_descriptor_count
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER.
Definition vk_helpers.h:1178
Used to enable device features as a argument vk_create_device.
Definition vk_helpers.h:771
Definition vk_helpers.h:48
uint32_t index
The queue (instance) index.
Definition vk_helpers.h:52
uint32_t family_index
The queue family index.
Definition vk_helpers.h:50
A single image of a swapchain based on native buffer handles.
Definition xrt_compositor.h:2152
Swapchain creation info.
Definition xrt_compositor.h:932
A collection of strings, like a list of extensions to enable.
Basic logging functionality.
VkResult vk_create_descriptor_set(struct vk_bundle *vk, VkDescriptorPool descriptor_pool, VkDescriptorSetLayout descriptor_layout, VkDescriptorSet *out_descriptor_set)
Creates a descriptor set.
Definition vk_state_creators.c:88
XRT_CHECK_RESULT const char * vk_swapchain_create_flag_string(VkSwapchainCreateFlagsKHR bits, bool null_on_unknown)
Returns the swapchain create flag if one valid bit is set, if multiple bits are set,...
Definition vk_print.c:914
XRT_CHECK_RESULT const char * vk_surface_transform_flag_string(VkSurfaceTransformFlagBitsKHR bits, bool null_on_unknown)
Returns the surface transform flag if one valid bit is set, if multiple bits are set,...
Definition vk_print.c:1027
void vk_fill_in_has_instance_extensions(struct vk_bundle *vk, struct u_extension_list *ext_list)
Fills in has_* in vk_bundle given a string of prefiltered instance extensions.
Definition vk_bundle_init.c:132
VkResult vk_create_pipeline_cache(struct vk_bundle *vk, VkPipelineCache *out_pipeline_cache)
Creates a pipeline cache.
Definition vk_state_creators.c:147
VkResult vk_create_descriptor_pool(struct vk_bundle *vk, const struct vk_descriptor_pool_info *info, VkDescriptorPool *out_descriptor_pool)
Creates a descriptor pool, made for a single layout.
Definition vk_state_creators.c:16
XRT_CHECK_RESULT const char * vk_image_usage_flag_string(VkImageUsageFlagBits bits, bool null_on_unknown)
Returns the image usage flag if one valid bit is set, if multiple bits are set, will return 'MULTIPLE...
Definition vk_print.c:956
XRT_CHECK_RESULT const char * vk_format_feature_flag_string(VkFormatFeatureFlagBits bits, bool null_on_unknown)
Returns the format feature flag if one valid bit is set, if multiple bits are set,...
Definition vk_print.c:894
XRT_CHECK_RESULT const char * vk_composite_alpha_flag_string(VkCompositeAlphaFlagBitsKHR bits, bool null_on_unknown)
Returns the composite alpha flag if one valid bit is set, if multiple bits are set,...
Definition vk_print.c:1008
VkResult vk_create_compute_pipeline(struct vk_bundle *vk, VkPipelineCache pipeline_cache, VkShaderModule shader, VkPipelineLayout pipeline_layout, const VkSpecializationInfo *specialization_info, VkPipeline *out_compute_pipeline)
Creates a compute pipeline, assumes entry function is called 'main'.
Definition vk_state_creators.c:172
VkResult vk_create_pipeline_layout(struct vk_bundle *vk, VkDescriptorSetLayout descriptor_set_layout, VkPipelineLayout *out_pipeline_layout)
Creates a pipeline layout from a single descriptor set layout.
Definition vk_state_creators.c:118
Header holding common defines.
Header declaring XRT graphics interfaces.
int xrt_graphics_buffer_handle_t
The type underlying buffers shared between compositor clients and the main compositor.
Definition xrt_handles.h:252
int xrt_graphics_sync_handle_t
The type underlying synchronization primitives (semaphores, etc) shared between compositor clients an...
Definition xrt_handles.h:354
Include all of the Vulkan headers in one place, and cope with any "messy" includes implied by it.