VapourSynth-llvmexpr
Loading...
Searching...
No Matches
VulkanContext.hpp
Go to the documentation of this file.
1
19
20#ifndef LLVMEXPR_RUNTIME_VULKAN_VULKANCONTEXT_HPP
21#define LLVMEXPR_RUNTIME_VULKAN_VULKANCONTEXT_HPP
22
23// NOLINTBEGIN(cppcoreguidelines-macro-usage,cppcoreguidelines-macro-to-enum,modernize-macro-to-enum)
24
25#define VK_NO_PROTOTYPES
26#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
27
28// NOLINTEND(cppcoreguidelines-macro-usage,cppcoreguidelines-macro-to-enum,modernize-macro-to-enum)
29
30#include <mutex>
31#include <vk_mem_alloc.h>
32#include <vulkan/vulkan_raii.hpp>
33
34namespace vkexpr {
35
37 public:
38 static VulkanContext& getInstance();
39 static VulkanContext& getInstance(int device_id);
40
41 explicit VulkanContext(int device_id = -1);
43
44 VulkanContext(const VulkanContext&) = delete;
48
49 vk::raii::Context& getContext() { return context; }
50 vk::raii::Instance& getInstanceRef() { return instance; }
51 vk::raii::PhysicalDevice& getPhysicalDevice() { return physical_device; }
52 vk::raii::Device& getDevice() { return device; }
53 vk::raii::Queue& getComputeQueue() { return compute_queue; }
54 [[nodiscard]] uint32_t getQueueFamilyIndex() const {
55 return queue_family_index;
56 }
57
58 void submit(const vk::SubmitInfo& submit_info, const vk::Fence& fence);
59 void waitIdle();
60
61 private:
62 void createInstance();
63 void pickPhysicalDevice();
64 void createDevice();
65
66 int device_id = -1;
67 vk::raii::Context context;
68 vk::raii::Instance instance;
69 vk::raii::PhysicalDevice physical_device = nullptr;
70 vk::raii::Device device = nullptr;
71 vk::raii::Queue compute_queue = nullptr;
72
73 uint32_t queue_family_index = -1;
74 std::mutex queue_mutex;
75};
76
77} // namespace vkexpr
78
79#endif // LLVMEXPR_RUNTIME_VULKAN_VULKANCONTEXT_HPP
uint32_t getQueueFamilyIndex() const
VulkanContext(VulkanContext &&)=delete
vk::raii::Instance & getInstanceRef()
vk::raii::Device & getDevice()
static VulkanContext & getInstance()
VulkanContext & operator=(VulkanContext &&)=delete
void submit(const vk::SubmitInfo &submit_info, const vk::Fence &fence)
VulkanContext(int device_id=-1)
vk::raii::Queue & getComputeQueue()
VulkanContext(const VulkanContext &)=delete
VulkanContext & operator=(const VulkanContext &)=delete
vk::raii::PhysicalDevice & getPhysicalDevice()
vk::raii::Context & getContext()