Blender V5.0
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#if !defined(_WIN32) or defined(_M_ARM64)
15/* Silence compilation warning on non-windows x64 systems. */
16# define VMA_EXTERNAL_MEMORY_WIN32 0
17#endif
18#include "vk_mem_alloc.h"
19
20#include "GHOST_ContextVK.hh"
22#include "GHOST_Types.h"
23
25 public:
28
33 XrInstance instance,
34 XrSystemId system_id,
35 std::string *r_requirement_info) const override;
36
37 void initFromGhostContext(GHOST_Context &ghost_ctx,
38 XrInstance instance,
39 XrSystemId system_id) override;
40 std::optional<int64_t> chooseSwapchainFormat(const std::vector<int64_t> &runtime_formats,
41 GHOST_TXrSwapchainFormat &r_format,
42 bool &r_is_srgb_format) const override;
43 std::vector<XrSwapchainImageBaseHeader *> createSwapchainImages(uint32_t image_count) override;
44
45 void submitToSwapchainBegin() override;
46 void submitToSwapchainImage(XrSwapchainImageBaseHeader &swapchain_image,
47 const GHOST_XrDrawViewInfo &draw_info) override;
48 void submitToSwapchainEnd() override;
49
50 bool needsUpsideDownDrawing(GHOST_Context &ghost_ctx) const override;
51
52 private:
53 GHOST_ContextVK &ghost_ctx_;
54
55 VkInstance vk_instance_ = VK_NULL_HANDLE;
56 VkPhysicalDevice vk_physical_device_ = VK_NULL_HANDLE;
57 uint32_t graphics_queue_family_ = 0;
58 VkQueue vk_queue_ = VK_NULL_HANDLE;
59 VkDevice vk_device_ = VK_NULL_HANDLE;
60 VmaAllocator vma_allocator_ = VK_NULL_HANDLE;
61 VmaAllocation vk_buffer_allocation_ = VK_NULL_HANDLE;
62 VkBuffer vk_buffer_ = VK_NULL_HANDLE;
63 VmaAllocationInfo vk_buffer_allocation_info_ = {};
64 GHOST_TVulkanXRModes data_transfer_mode_ = GHOST_kVulkanXRModeCPU;
65
66 std::list<std::vector<XrSwapchainImageVulkan2KHR>> image_cache_;
67 VkCommandPool vk_command_pool_ = VK_NULL_HANDLE;
68
69 struct ImportedMemory {
70 char view_idx;
71 VkImage vk_image_blender;
72 VkImage vk_image_xr;
73 VkDeviceMemory vk_device_memory_xr;
74 };
75 std::vector<ImportedMemory> imported_memory_;
76
77 GHOST_TVulkanXRModes choseDataTransferMode();
78 void submitToSwapchainImageCpu(XrSwapchainImageVulkan2KHR &swapchain_image,
79 const GHOST_XrDrawViewInfo &draw_info);
80 void submitToSwapchainImageGpu(XrSwapchainImageVulkan2KHR &swapchain_image,
81 const GHOST_XrDrawViewInfo &draw_info);
82
88 VkCommandBuffer vk_command_buffer_ = VK_NULL_HANDLE;
89
90 static PFN_xrGetVulkanGraphicsRequirements2KHR s_xrGetVulkanGraphicsRequirements2KHR_fn;
91 static PFN_xrGetVulkanGraphicsDevice2KHR s_xrGetVulkanGraphicsDevice2KHR_fn;
92 static PFN_xrCreateVulkanInstanceKHR s_xrCreateVulkanInstanceKHR_fn;
93 static PFN_xrCreateVulkanDeviceKHR s_xrCreateVulkanDeviceKHR_fn;
94};
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)