Blender V4.3
vk_staging_buffer.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
10#include "vk_context.hh"
11
12namespace blender::gpu {
13
14VKStagingBuffer::VKStagingBuffer(const VKBuffer &device_buffer, Direction direction)
15 : device_buffer_(device_buffer)
16{
17 VkBufferUsageFlags usage;
18 switch (direction) {
20 usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
21 break;
23 usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT;
24 }
25
26 host_buffer_.create(device_buffer.size_in_bytes(), GPU_USAGE_STREAM, usage, true);
27 debug::object_label(host_buffer_.vk_handle(), "StagingBuffer");
28}
29
31{
32 BLI_assert(host_buffer_.is_allocated() && host_buffer_.is_mapped());
34 copy_buffer.src_buffer = host_buffer_.vk_handle();
35 copy_buffer.dst_buffer = device_buffer_.vk_handle();
36 copy_buffer.region.size = device_buffer_.size_in_bytes();
37
38 context.render_graph.add_node(copy_buffer);
39}
40
42{
43 BLI_assert(host_buffer_.is_allocated() && host_buffer_.is_mapped());
45 copy_buffer.src_buffer = device_buffer_.vk_handle();
46 copy_buffer.dst_buffer = host_buffer_.vk_handle();
47 copy_buffer.region.size = device_buffer_.size_in_bytes();
48
49 context.render_graph.add_node(copy_buffer);
50}
51
53{
54 host_buffer_.free();
55}
56
57} // namespace blender::gpu
#define BLI_assert(a)
Definition BLI_assert.h:50
@ GPU_USAGE_STREAM
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
bool is_mapped() const
Definition vk_buffer.cc:157
VkBuffer vk_handle() const
Definition vk_buffer.hh:69
int64_t size_in_bytes() const
Definition vk_buffer.hh:64
void copy_from_device(VKContext &context)
VKStagingBuffer(const VKBuffer &device_buffer, Direction direction)
void copy_to_device(VKContext &context)
void object_label(GLenum type, GLuint object, const char *name)
Definition gl_debug.cc:344