Blender V4.3
vk_index_buffer.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include "vk_index_buffer.hh"
10#include "vk_shader.hh"
12#include "vk_staging_buffer.hh"
13#include "vk_state_manager.hh"
14
15namespace blender::gpu {
16
18{
19 if (is_subrange_) {
21 return;
22 }
23
24 if (!buffer_.is_allocated()) {
25 allocate();
26 }
27
28 if (data_ == nullptr) {
29 return;
30 }
31
32 VKContext &context = *VKContext::get();
35 staging_buffer.copy_to_device(context);
37}
38
43
49
51{
52 VKContext &context = *VKContext::get();
54 staging_buffer.copy_from_device(context);
55 staging_buffer.host_buffer_get().read(context, data);
56}
57
58void VKIndexBuffer::update_sub(uint /*start*/, uint /*len*/, const void * /*data*/)
59{
61}
62
63void VKIndexBuffer::strip_restart_indices()
64{
66}
67
68void VKIndexBuffer::allocate()
69{
71 buffer_.create(size_get(),
72 usage,
73 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
74 VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
75 false);
76 debug::object_label(buffer_.vk_handle(), "IndexBuffer");
77}
78
79const VKBuffer &VKIndexBuffer::buffer_get() const
80{
81 return is_subrange_ ? unwrap(src_)->buffer_ : buffer_;
82}
83VKBuffer &VKIndexBuffer::buffer_get()
84{
85 return is_subrange_ ? unwrap(src_)->buffer_ : buffer_;
86}
87
88} // namespace blender::gpu
unsigned int uint
@ GPU_USAGE_STATIC
@ GPU_USAGE_DEVICE_ONLY
#define MEM_SAFE_FREE(v)
virtual void upload_data()=0
void update_immediately(const void *data) const
Definition vk_buffer.cc:109
bool is_allocated() const
Definition vk_buffer.cc:22
bool create(size_t size, GPUUsageType usage, VkBufferUsageFlags buffer_usage, bool is_host_visible=true)
Definition vk_buffer.cc:53
void read(VKContext &context, void *data) const
Definition vk_buffer.cc:142
VkBuffer vk_handle() const
Definition vk_buffer.hh:69
VKStateManager & state_manager_get() const
static VKContext * get()
Definition vk_context.hh:97
void read(uint32_t *data) const override
void update_sub(uint start, uint len, const void *data) override
void bind_as_ssbo(uint binding) override
const VKBuffer & host_buffer_get() const
void copy_from_device(VKContext &context)
void copy_to_device(VKContext &context)
void storage_buffer_bind(BindSpaceStorageBuffers::Type resource_type, void *resource, int binding)
void object_label(GLenum type, GLuint object, const char *name)
Definition gl_debug.cc:344
static Context * unwrap(GPUContext *ctx)
unsigned int uint32_t
Definition stdint.h:80
#define NOT_YET_IMPLEMENTED
Definition vk_common.hh:132