/* * Copyright (c) 2024, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #ifdef USE_VULKAN # include namespace Gfx { struct VulkanContext { uint32_t api_version { VK_API_VERSION_1_0 }; VkInstance instance { VK_NULL_HANDLE }; VkPhysicalDevice physical_device { VK_NULL_HANDLE }; VkDevice logical_device { VK_NULL_HANDLE }; VkQueue graphics_queue { VK_NULL_HANDLE }; uint32_t graphics_queue_family { 0 }; # ifdef USE_VULKAN_DMABUF_IMAGES VkCommandPool command_pool { VK_NULL_HANDLE }; VkCommandBuffer command_buffer { VK_NULL_HANDLE }; struct { PFN_vkGetMemoryFdKHR get_memory_fd { nullptr }; PFN_vkGetImageDrmFormatModifierPropertiesEXT get_image_drm_format_modifier_properties { nullptr }; } ext_procs; # endif }; ErrorOr create_vulkan_context(); } #endif