VapourSynth-llvmexpr
Loading...
Searching...
No Matches
VulkanComputePipeline.hpp
Go to the documentation of this file.
1
19
20#ifndef LLVMEXPR_RUNTIME_VULKAN_VULKANCOMPUTEPIPELINE_HPP
21#define LLVMEXPR_RUNTIME_VULKAN_VULKANCOMPUTEPIPELINE_HPP
22
23#define VK_NO_PROTOTYPES
24
25// NOLINTBEGIN(cppcoreguidelines-macro-usage,cppcoreguidelines-macro-to-enum,modernize-macro-to-enum)
26
27#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
28
29// NOLINTEND(cppcoreguidelines-macro-usage,cppcoreguidelines-macro-to-enum,modernize-macro-to-enum)
30
31#include <vulkan/vulkan_raii.hpp>
32
33#include <cstdint>
34#include <string>
35#include <vector>
36
37namespace vkexpr {
38
39class VulkanContext;
40class VulkanMemory;
41struct VulkanBuffer;
42
44 public:
46 uint32_t width;
47 uint32_t height;
48 uint32_t num_inputs;
49 int32_t frame_number;
50 };
51
52 VulkanComputePipeline(VulkanContext& ctx, const std::string& glsl_source,
53 uint32_t num_input_buffers = 1,
54 uint32_t num_props_floats = 1);
56
61
62 void recordDispatch(vk::raii::CommandBuffer& command_buffer,
63 const std::vector<VulkanBuffer*>& input_buffers,
64 VulkanBuffer& output_buffer, VulkanBuffer* props_buffer,
65 uint32_t width, uint32_t height, int32_t frame_number);
66
67 private:
68 void compileShader(const std::string& glsl_source);
69 void createDescriptorSetLayout(uint32_t num_input_buffers,
70 bool with_props_buffer);
71 void createPipeline();
72 void updateDescriptorSets(const std::vector<VulkanBuffer*>& input_buffers,
73 VulkanBuffer& output_buffer,
74 VulkanBuffer* props_buffer);
75
76 VulkanContext& context;
77 uint32_t num_inputs;
78 bool has_props_buffer;
79
80 std::vector<VkBuffer> cached_input_buffers;
81 VkBuffer cached_output_buffer = VK_NULL_HANDLE;
82 VkBuffer cached_props_buffer = VK_NULL_HANDLE;
83
84 std::vector<uint32_t> spirv_code;
85 vk::raii::ShaderModule shader_module = nullptr;
86 vk::raii::DescriptorSetLayout descriptor_set_layout = nullptr;
87 vk::raii::PipelineLayout pipeline_layout = nullptr;
88 vk::raii::Pipeline pipeline = nullptr;
89
90 vk::raii::DescriptorPool descriptor_pool = nullptr;
91 vk::raii::DescriptorSet descriptor_set = nullptr;
92};
93
94} // namespace vkexpr
95
96#endif // LLVMEXPR_RUNTIME_VULKAN_VULKANCOMPUTEPIPELINE_HPP
VulkanComputePipeline(VulkanContext &ctx, const std::string &glsl_source, uint32_t num_input_buffers=1, uint32_t num_props_floats=1)
VulkanComputePipeline & operator=(const VulkanComputePipeline &)=delete
void recordDispatch(vk::raii::CommandBuffer &command_buffer, const std::vector< VulkanBuffer * > &input_buffers, VulkanBuffer &output_buffer, VulkanBuffer *props_buffer, uint32_t width, uint32_t height, int32_t frame_number)
VulkanComputePipeline(VulkanComputePipeline &&)=delete
VulkanComputePipeline(const VulkanComputePipeline &)=delete
VulkanComputePipeline & operator=(VulkanComputePipeline &&)=delete