102 size_t push_constant_size = 0);
109 size_t push_constant_size = 0);
125 void bind_descriptor_sets(
128 const std::vector<DescriptorSetID>& descriptor_set_ids);
146 void dispatch(
CommandBufferID cmd_id, uint32_t x, uint32_t y, uint32_t z);
151 void dispatch_indirect(
153 vk::Buffer indirect_buffer,
154 vk::DeviceSize
offset = 0);
163 std::vector<DescriptorSetID> allocate_pipeline_descriptors(
ComputePipelineID pipeline_id);
171 const std::vector<DescriptorSetID>& descriptor_set_ids,
172 const void* push_constants_data =
nullptr,
173 size_t push_constant_size = 0);
198 void record_sequence(
CommandBufferID cmd_id,
const std::vector<ComputeStage>& stages);
203 void cleanup_pipelines();
214 std::atomic<uint64_t> m_next_pipeline_id { 1 };
ComputePress & operator=(const ComputePress &)=delete
static ComputePress & instance()
ComputePress(ComputePress &&) noexcept=delete
std::unordered_map< ComputePipelineID, PipelineState > m_pipelines
ComputePress(const ComputePress &)=delete
static bool s_initialized
std::shared_ptr< Core::VKDescriptorManager > m_descriptor_manager
Compute-specific pipeline and dispatch orchestration.
Portal-level shader compilation and caching.
uint64_t ComputePipelineID
constexpr ComputePipelineID INVALID_COMPUTE_PIPELINE
MAYAFLUX_API ComputePress & get_compute_press()
vk::PipelineLayout layout
std::vector< vk::DescriptorSetLayout > layouts
std::shared_ptr< Core::VKComputePipeline > pipeline
ComputePipelineID pipeline_id
Pipeline to bind for this stage.
std::vector< uint8_t > push_constant_data
Raw push constant bytes for this stage.
std::array< uint32_t, 3 > groups
Workgroup dispatch counts {x, y, z}.
std::vector< DescriptorSetID > descriptor_set_ids
Descriptor sets to bind.
std::vector< HazardResource > hazard_resources
Resources this stage reads or writes that a subsequent stage in the same sequence depends on.
One pipeline dispatch within a ComputePress::record_sequence call.
Declares a single storage buffer or image binding a compute shader expects.
vk::Buffer buffer
Valid when binding.element_type is anything else.
vk::Image image
Valid when binding.element_type is IMAGE_STORAGE/IMAGE_SAMPLED.
GpuBufferBinding binding
Direction/element_type describing this resource.
One resource this stage's dispatch reads/writes that a later stage in the sequence depends on,...