VapourSynth-llvmexpr
Loading...
Searching...
No Matches
vkexpr::VulkanComputePipeline Class Reference

#include <llvmexpr/runtime/vulkan/VulkanComputePipeline.hpp>

Classes

struct  PushConstants

Public Member Functions

 VulkanComputePipeline (VulkanContext &ctx, const std::string &glsl_source, uint32_t num_input_buffers=1, uint32_t num_props_floats=1)
 ~VulkanComputePipeline ()
 VulkanComputePipeline (const VulkanComputePipeline &)=delete
VulkanComputePipelineoperator= (const VulkanComputePipeline &)=delete
 VulkanComputePipeline (VulkanComputePipeline &&)=delete
VulkanComputePipelineoperator= (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)

Detailed Description

Definition at line 43 of file VulkanComputePipeline.hpp.

Constructor & Destructor Documentation

◆ VulkanComputePipeline() [1/3]

vkexpr::VulkanComputePipeline::VulkanComputePipeline ( VulkanContext & ctx,
const std::string & glsl_source,
uint32_t num_input_buffers = 1,
uint32_t num_props_floats = 1 )

Definition at line 60 of file VulkanComputePipeline.cpp.

64 : context(ctx), num_inputs(num_input_buffers),
65 has_props_buffer(num_props_floats > 0) {
66 compileShader(glsl_source);
67 createDescriptorSetLayout(num_input_buffers, has_props_buffer);
68 createPipeline();
69}

Referenced by operator=(), operator=(), VulkanComputePipeline(), and VulkanComputePipeline().

◆ ~VulkanComputePipeline()

vkexpr::VulkanComputePipeline::~VulkanComputePipeline ( )
default

◆ VulkanComputePipeline() [2/3]

vkexpr::VulkanComputePipeline::VulkanComputePipeline ( const VulkanComputePipeline & )
delete

◆ VulkanComputePipeline() [3/3]

vkexpr::VulkanComputePipeline::VulkanComputePipeline ( VulkanComputePipeline && )
delete

Member Function Documentation

◆ operator=() [1/2]

VulkanComputePipeline & vkexpr::VulkanComputePipeline::operator= ( const VulkanComputePipeline & )
delete

◆ operator=() [2/2]

VulkanComputePipeline & vkexpr::VulkanComputePipeline::operator= ( VulkanComputePipeline && )
delete

◆ recordDispatch()

void vkexpr::VulkanComputePipeline::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 )

Definition at line 270 of file VulkanComputePipeline.cpp.

274 {
275 updateDescriptorSets(input_buffers, output_buffer, props_buffer);
276
277 command_buffer.bindPipeline(vk::PipelineBindPoint::eCompute, *pipeline);
278 command_buffer.bindDescriptorSets(vk::PipelineBindPoint::eCompute,
279 *pipeline_layout, 0, *descriptor_set, {});
280
281 PushConstants pc = {.width = width,
282 .height = height,
283 .num_inputs = num_inputs,
284 .frame_number = frame_number};
285 command_buffer.pushConstants<PushConstants>(
286 *pipeline_layout, vk::ShaderStageFlagBits::eCompute, 0, pc);
287
288 uint32_t total_pixels = width * height;
289 uint32_t num_workgroups =
290 (total_pixels + WORKGROUP_SIZE - 1) / WORKGROUP_SIZE;
291 command_buffer.dispatch(num_workgroups, 1, 1);
292}

The documentation for this class was generated from the following files: