Previously a storage buffer was used to store draw list commands as it matches already existing APIs. Unfortunately StorageBuffers prefers to be stored on the GPU device and would reduce the benefit of a dynamic draw list. This PR replaces the storage buffer with a regular buffer, which keeps more control where to store the buffer. Pull Request: https://projects.blender.org/blender/blender/pulls/117712
43 lines
1.0 KiB
C++
43 lines
1.0 KiB
C++
/* SPDX-FileCopyrightText: 2022 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup gpu
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "vk_common.hh"
|
|
|
|
#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;
|
|
void multi_draw_indirect(VkBuffer indirect_buf, int count, intptr_t offset, intptr_t stride);
|
|
|
|
VKVertexBuffer *vertex_buffer_get(int index);
|
|
VKVertexBuffer *instance_buffer_get(int index);
|
|
VKIndexBuffer *index_buffer_get();
|
|
|
|
private:
|
|
void draw_setup();
|
|
};
|
|
|
|
BLI_INLINE VKBatch *unwrap(GPUBatch *batch)
|
|
{
|
|
return static_cast<VKBatch *>(batch);
|
|
}
|
|
|
|
} // namespace blender::gpu
|