Blender V4.5
GHOST_XrGraphicsBindingVulkan.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include <list>
12
13#define VMA_VULKAN_VERSION 1002000 // Vulkan 1.2
14#include "vk_mem_alloc.h"
15
16#include "GHOST_ContextVK.hh"
18#include "GHOST_Types.h"
19
21 public:
24
29 XrInstance instance,
30 XrSystemId system_id,
31 std::string *r_requirement_info) const override;
32
33 void initFromGhostContext(GHOST_Context &ghost_ctx,
34 XrInstance instance,
35 XrSystemId system_id) override;
36 std::optional<int64_t> chooseSwapchainFormat(const std::vector<int64_t> &runtime_formats,
37 GHOST_TXrSwapchainFormat &r_format,
38 bool &r_is_srgb_format) const override;
39 std::vector<XrSwapchainImageBaseHeader *> createSwapchainImages(uint32_t image_count) override;
40
41 void submitToSwapchainBegin() override;
42 void submitToSwapchainImage(XrSwapchainImageBaseHeader &swapchain_image,
43 const GHOST_XrDrawViewInfo &draw_info) override;
44 void submitToSwapchainEnd() override;
45
46 bool needsUpsideDownDrawing(GHOST_Context &ghost_ctx) const override;
47
48 private:
49 GHOST_ContextVK &m_ghost_ctx;
50
51 VkInstance m_vk_instance = VK_NULL_HANDLE;
52 VkPhysicalDevice m_vk_physical_device = VK_NULL_HANDLE;
53 uint32_t m_graphics_queue_family = 0;
54 VkQueue m_vk_queue = VK_NULL_HANDLE;
55 VkDevice m_vk_device = VK_NULL_HANDLE;
56 VmaAllocator m_vma_allocator = VK_NULL_HANDLE;
57 VmaAllocation m_vk_buffer_allocation = VK_NULL_HANDLE;
58 VkBuffer m_vk_buffer = VK_NULL_HANDLE;
59 VmaAllocationInfo m_vk_buffer_allocation_info = {};
60 GHOST_TVulkanXRModes m_data_transfer_mode = GHOST_kVulkanXRModeCPU;
61
62 std::list<std::vector<XrSwapchainImageVulkan2KHR>> m_image_cache;
63 VkCommandPool m_vk_command_pool = VK_NULL_HANDLE;
64
65 struct ImportedMemory {
66 char view_idx;
67 VkImage vk_image_blender;
68 VkImage vk_image_xr;
69 VkDeviceMemory vk_device_memory_xr;
70 };
71 std::vector<ImportedMemory> m_imported_memory;
72
73 GHOST_TVulkanXRModes choseDataTransferMode();
74 void submitToSwapchainImageCpu(XrSwapchainImageVulkan2KHR &swapchain_image,
75 const GHOST_XrDrawViewInfo &draw_info);
76 void submitToSwapchainImageGpu(XrSwapchainImageVulkan2KHR &swapchain_image,
77 const GHOST_XrDrawViewInfo &draw_info);
78
84 VkCommandBuffer m_vk_command_buffer = VK_NULL_HANDLE;
85
86 static PFN_xrGetVulkanGraphicsRequirements2KHR s_xrGetVulkanGraphicsRequirements2KHR_fn;
87 static PFN_xrGetVulkanGraphicsDevice2KHR s_xrGetVulkanGraphicsDevice2KHR_fn;
88 static PFN_xrCreateVulkanInstanceKHR s_xrCreateVulkanInstanceKHR_fn;
89 static PFN_xrCreateVulkanDeviceKHR s_xrCreateVulkanDeviceKHR_fn;
90};
GHOST_IXrGraphicsBinding()=default
std::vector< XrSwapchainImageBaseHeader * > createSwapchainImages(uint32_t image_count) override
std::optional< int64_t > chooseSwapchainFormat(const std::vector< int64_t > &runtime_formats, GHOST_TXrSwapchainFormat &r_format, bool &r_is_srgb_format) const override
void initFromGhostContext(GHOST_Context &ghost_ctx, XrInstance instance, XrSystemId system_id) override
void submitToSwapchainImage(XrSwapchainImageBaseHeader &swapchain_image, const GHOST_XrDrawViewInfo &draw_info) override
bool needsUpsideDownDrawing(GHOST_Context &ghost_ctx) const override
bool checkVersionRequirements(GHOST_Context &ghost_ctx, XrInstance instance, XrSystemId system_id, std::string *r_requirement_info) const override
GHOST_XrGraphicsBindingVulkan(GHOST_Context &ghost_ctx)