WebGPU wrapper finished: add multi draw indirect count support

This commit is contained in:
Nikita Lisitsa 2024-01-01 17:39:42 +03:00
parent 082b8e0493
commit 7c122c5664
2 changed files with 24 additions and 0 deletions

View file

@ -90,6 +90,10 @@ namespace psemek::wgpu
void draw_indexed(std::uint32_t index_count, std::uint32_t instance_count, std::uint32_t first_index, std::uint32_t base_vertex, std::uint32_t first_instance); void draw_indexed(std::uint32_t index_count, std::uint32_t instance_count, std::uint32_t first_index, std::uint32_t base_vertex, std::uint32_t first_instance);
void draw_indirect(buffer const & indirect_buffer, std::uint64_t offset); void draw_indirect(buffer const & indirect_buffer, std::uint64_t offset);
void draw_indexed_indirect(buffer const & indirect_buffer, std::uint64_t offset); void draw_indexed_indirect(buffer const & indirect_buffer, std::uint64_t offset);
void multi_draw_indirect(buffer const & indirect_buffer, std::uint64_t offset, std::uint32_t count);
void multi_draw_indexed_indirect(buffer const & indirect_buffer, std::uint64_t offset, std::uint32_t count);
void multi_draw_indirect_count(buffer const & indirect_buffer, std::uint64_t offset, buffer const & count_buffer, std::uint64_t count_offset, std::uint32_t max_count);
void multi_draw_indexed_indirect_count(buffer const & indirect_buffer, std::uint64_t offset, buffer const & count_buffer, std::uint64_t count_offset, std::uint32_t max_count);
void execute_bundles(std::vector<render_bundle> const & bundles); void execute_bundles(std::vector<render_bundle> const & bundles);
void begin_occlusion_query(std::uint32_t query_index); void begin_occlusion_query(std::uint32_t query_index);
void end_occlusion_query(); void end_occlusion_query();

View file

@ -71,6 +71,26 @@ namespace psemek::wgpu
wgpuRenderPassEncoderDrawIndexedIndirect((WGPURenderPassEncoder)get(), (WGPUBuffer)indirect_buffer.get(), offset); wgpuRenderPassEncoderDrawIndexedIndirect((WGPURenderPassEncoder)get(), (WGPUBuffer)indirect_buffer.get(), offset);
} }
void render_pass_encoder::multi_draw_indirect(buffer const & indirect_buffer, std::uint64_t offset, std::uint32_t count)
{
wgpuRenderPassEncoderMultiDrawIndirect((WGPURenderPassEncoder)get(), (WGPUBuffer)indirect_buffer.get(), offset, count);
}
void render_pass_encoder::multi_draw_indexed_indirect(buffer const & indirect_buffer, std::uint64_t offset, std::uint32_t count)
{
wgpuRenderPassEncoderMultiDrawIndexedIndirect((WGPURenderPassEncoder)get(), (WGPUBuffer)indirect_buffer.get(), offset, count);
}
void render_pass_encoder::multi_draw_indirect_count(buffer const & indirect_buffer, std::uint64_t offset, buffer const & count_buffer, std::uint64_t count_offset, std::uint32_t max_count)
{
wgpuRenderPassEncoderMultiDrawIndirectCount((WGPURenderPassEncoder)get(), (WGPUBuffer)indirect_buffer.get(), offset, (WGPUBuffer)count_buffer.get(), count_offset, max_count);
}
void render_pass_encoder::multi_draw_indexed_indirect_count(buffer const & indirect_buffer, std::uint64_t offset, buffer const & count_buffer, std::uint64_t count_offset, std::uint32_t max_count)
{
wgpuRenderPassEncoderMultiDrawIndexedIndirectCount((WGPURenderPassEncoder)get(), (WGPUBuffer)indirect_buffer.get(), offset, (WGPUBuffer)count_buffer.get(), count_offset, max_count);
}
void render_pass_encoder::execute_bundles(std::vector<render_bundle> const & bundles) void render_pass_encoder::execute_bundles(std::vector<render_bundle> const & bundles)
{ {
static_assert(sizeof(WGPURenderBundle) == sizeof(render_bundle)); static_assert(sizeof(WGPURenderBundle) == sizeof(render_bundle));