This PR implements indirect drawing for the Vulkan backend. Indirect drawing is a requirement for workbench-next. NOTE: that this is one of multiple changes needed to get to the same support level. With this patch only objects at the center of the world are drawn correctly. Pull Request: https://projects.blender.org/blender/blender/pulls/111334
35 lines
855 B
C++
35 lines
855 B
C++
/* SPDX-FileCopyrightText: 2022 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup gpu
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "gpu_batch_private.hh"
|
|
|
|
namespace blender::gpu {
|
|
class VKVertexBuffer;
|
|
class VKIndexBuffer;
|
|
|
|
class VKBatch : public Batch {
|
|
public:
|
|
void draw(int vertex_first, int vertex_count, int instance_first, int instance_count) override;
|
|
void draw_indirect(GPUStorageBuf *indirect_buf, intptr_t offset) override;
|
|
void multi_draw_indirect(GPUStorageBuf *indirect_buf,
|
|
int count,
|
|
intptr_t offset,
|
|
intptr_t stride) override;
|
|
|
|
VKVertexBuffer *vertex_buffer_get(int index);
|
|
VKVertexBuffer *instance_buffer_get(int index);
|
|
VKIndexBuffer *index_buffer_get();
|
|
|
|
private:
|
|
void draw_setup();
|
|
};
|
|
|
|
} // namespace blender::gpu
|