A draw list bundles multiple draw commands for the same geometry and sends the draw commands in a single command. This reduces the overhead of pipeline checking, resource validation and can keep the load higher on the gpu as more work needs to be done. Previously the draw list didn't bundle any commands and would still send each call separately to the GPU. This PR implements the bundling of the commands. Pull Request: https://projects.blender.org/blender/blender/pulls/117548
71 lines
1.5 KiB
C++
71 lines
1.5 KiB
C++
/* SPDX-FileCopyrightText: 2022 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup gpu
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "GPU_texture.h"
|
|
|
|
#include "gpu_storage_buffer_private.hh"
|
|
#include "gpu_vertex_buffer_private.hh"
|
|
|
|
#include "vk_bindable_resource.hh"
|
|
#include "vk_buffer.hh"
|
|
|
|
namespace blender::gpu {
|
|
class VertBuf;
|
|
|
|
class VKStorageBuffer : public StorageBuf, public VKBindableResource {
|
|
GPUUsageType usage_;
|
|
VKBuffer buffer_;
|
|
|
|
public:
|
|
VKStorageBuffer(int size, GPUUsageType usage, const char *name);
|
|
|
|
void update(const void *data) override;
|
|
void bind(int slot) override;
|
|
void bind(int slot,
|
|
shader::ShaderCreateInfo::Resource::BindType bind_type,
|
|
const GPUSamplerState sampler_state) override;
|
|
void unbind() override;
|
|
void clear(uint32_t clear_value) override;
|
|
void copy_sub(VertBuf *src, uint dst_offset, uint src_offset, uint copy_size) override;
|
|
void read(void *data) override;
|
|
void async_flush_to_host() override;
|
|
|
|
VkBuffer vk_handle() const
|
|
{
|
|
return buffer_.vk_handle();
|
|
}
|
|
|
|
int64_t size_in_bytes() const
|
|
{
|
|
return buffer_.size_in_bytes();
|
|
}
|
|
|
|
void ensure_allocated();
|
|
|
|
const VKBuffer &buffer_get() const
|
|
{
|
|
return buffer_;
|
|
}
|
|
|
|
private:
|
|
void allocate();
|
|
};
|
|
|
|
BLI_INLINE VKStorageBuffer *unwrap(StorageBuf *storage_buffer)
|
|
{
|
|
return static_cast<VKStorageBuffer *>(storage_buffer);
|
|
}
|
|
BLI_INLINE StorageBuf *wrap(VKStorageBuffer *storage_buffer)
|
|
{
|
|
return static_cast<StorageBuf *>(storage_buffer);
|
|
}
|
|
|
|
} // namespace blender::gpu
|