36#ifndef ComputePipeline_h
37#define ComputePipeline_h
94 vk::WriteDescriptorSet(
nullptr,
i, 0, vk::DescriptorType::eStorageBuffer, {},
m_bufferInfo[
i]);
176 LogWarning(
"Attempted to bind an empty buffer\n");
189 vk::WriteDescriptorSet(
nullptr,
i, 0, vk::DescriptorType::eStorageBuffer, {},
m_bufferInfo[
i]);
205 cmdBuf.pipelineBarrier(
206 vk::PipelineStageFlagBits::eComputeShader,
207 vk::PipelineStageFlagBits::eComputeShader,
210 vk::AccessFlagBits::eShaderWrite,
211 vk::AccessFlagBits::eShaderRead),
221 void Bind(vk::raii::CommandBuffer& cmdBuf)
250 cmdBuf.pushConstants<
T>(
252 vk::ShaderStageFlagBits::eCompute,
258 cmdBuf.pushDescriptorSetKHR(
259 vk::PipelineBindPoint::eCompute,
267 cmdBuf.bindDescriptorSets(
268 vk::PipelineBindPoint::eCompute,
274 cmdBuf.dispatch(x, y,
z);
297 cmdBuf.pushDescriptorSetKHR(
298 vk::PipelineBindPoint::eCompute,
305 cmdBuf.pushConstants<
T>(
307 vk::ShaderStageFlagBits::eCompute,
310 cmdBuf.dispatch(x, y,
z);
Declaration of AcceleratorBuffer.
Definition AcceleratorBuffer.h:204
Encapsulates a Vulkan compute pipeline and all necessary resources to use it.
Definition ComputePipeline.h:55
std::unique_ptr< vk::raii::DescriptorPool > m_descriptorPool
Pool for allocating m_descriptorSet from.
Definition ComputePipeline.h:344
size_t m_numStorageImages
Number of output image bindings in the shader.
Definition ComputePipeline.h:323
size_t m_numSampledImages
Number of input image bindings in the shader.
Definition ComputePipeline.h:326
void BindBuffer(size_t i, AcceleratorBuffer< T > &buf, bool outputOnly=false)
Binds an input or output SSBO to a descriptor slot.
Definition ComputePipeline.h:83
std::unique_ptr< vk::raii::DescriptorSetLayout > m_descriptorSetLayout
Layout of our descriptor set.
Definition ComputePipeline.h:341
std::string m_shaderPath
Filesystem path to the compiled SPIR-V shader binary.
Definition ComputePipeline.h:317
size_t m_pushConstantSize
Size of the push constants, in bytes.
Definition ComputePipeline.h:329
std::vector< vk::WriteDescriptorSet > m_writeDescriptors
Set of bindings to be written to m_descriptorSet.
Definition ComputePipeline.h:350
void BindStorageImage(size_t i, vk::Sampler sampler, vk::ImageView view, vk::ImageLayout layout)
Binds a storage (output) image to a descriptor slot.
Definition ComputePipeline.h:111
std::unique_ptr< vk::raii::PipelineLayout > m_pipelineLayout
Layout of the compute pipeline.
Definition ComputePipeline.h:338
std::unique_ptr< vk::raii::Pipeline > m_computePipeline
Handle to the Vulkan compute pipeline.
Definition ComputePipeline.h:335
void BindBufferNonblocking(size_t i, AcceleratorBuffer< T > &buf, vk::raii::CommandBuffer &cmdBuf, bool outputOnly=false)
Binds an input or output SSBO to a descriptor slot.
Definition ComputePipeline.h:171
void DispatchNoRebind(vk::raii::CommandBuffer &cmdBuf, T pushConstants, uint32_t x, uint32_t y=1, uint32_t z=1)
Similar to Dispatch() but does not bind descriptor sets.
Definition ComputePipeline.h:293
static void AddComputeMemoryBarrier(vk::raii::CommandBuffer &cmdBuf)
Helper function to insert a shader write-to-read memory barrier in a command buffer.
Definition ComputePipeline.h:203
std::vector< vk::DescriptorBufferInfo > m_bufferInfo
Details about our SSBOs.
Definition ComputePipeline.h:353
void BindSampledImage(size_t i, vk::Sampler sampler, vk::ImageView view, vk::ImageLayout layout)
Binds a sampled (input) image to a descriptor slot.
Definition ComputePipeline.h:139
std::unique_ptr< vk::raii::DescriptorSet > m_descriptorSet
The actual descriptor set storing our inputs and outputs.
Definition ComputePipeline.h:347
void Dispatch(vk::raii::CommandBuffer &cmdBuf, T pushConstants, uint32_t x, uint32_t y=1, uint32_t z=1)
Adds a vkCmdDispatch operation to a command buffer to execute the compute shader.
Definition ComputePipeline.h:244
std::unique_ptr< vk::raii::ShaderModule > m_shaderModule
Handle to the shader module object.
Definition ComputePipeline.h:332
void Bind(vk::raii::CommandBuffer &cmdBuf)
Binds the pipeline to a command buffer.
Definition ComputePipeline.h:221
std::vector< vk::DescriptorImageInfo > m_sampledImageInfo
Details about our input images.
Definition ComputePipeline.h:359
void Reinitialize(const std::string &shaderPath, size_t numSSBOs, size_t pushConstantSize, size_t numStorageImages=0, size_t numSampledImages=0)
Wipes the state of this object and recreates it with a new shader binary and configuration.
Definition ComputePipeline.cpp:86
size_t m_numSSBOs
Number of SSBO bindings in the shader.
Definition ComputePipeline.h:320
std::vector< vk::DescriptorImageInfo > m_storageImageInfo
Details about our output images.
Definition ComputePipeline.h:356
void DeferredInit()
Performs deferred initialization of the compute pipeline the first time the object is used.
Definition ComputePipeline.cpp:128
bool g_hasPushDescriptor
Indicates whether the VK_KHR_push_descriptor extension is available.
Definition VulkanInit.cpp:213
std::shared_ptr< vk::raii::Device > g_vkComputeDevice
The Vulkan device selected for compute operations (may or may not be same device as rendering)
Definition VulkanInit.cpp:71
Main library include file.