Blender V5.0
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
8
10#include "vk_context.hh"
11
12namespace blender::gpu {
13
15 Direction direction,
16 VkDeviceSize device_buffer_offset,
17 VkDeviceSize region_size)
18 : device_buffer_(device_buffer),
19 device_buffer_offset_(device_buffer_offset),
20 region_size_(region_size == UINT64_MAX ? device_buffer.size_in_bytes() : region_size)
21{
22 VkBufferUsageFlags usage;
23 switch (direction) {
25 usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
26 break;
28 usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT;
29 }
30
31 host_buffer_.create(region_size_,
32 usage,
33 VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE,
34 VMA_ALLOCATION_CREATE_MAPPED_BIT |
35 VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT,
36 0.4f);
37 debug::object_label(host_buffer_.vk_handle(), "StagingBuffer");
38}
39
41{
42 BLI_assert(host_buffer_.is_allocated() && host_buffer_.is_mapped());
44 copy_buffer.src_buffer = host_buffer_.vk_handle();
45 copy_buffer.dst_buffer = device_buffer_.vk_handle();
46 copy_buffer.region.dstOffset = device_buffer_offset_;
47 copy_buffer.region.size = region_size_;
48
49 context.render_graph().add_node(copy_buffer);
50}
51
53{
54 BLI_assert(host_buffer_.is_allocated() && host_buffer_.is_mapped());
56 copy_buffer.src_buffer = device_buffer_.vk_handle();
57 copy_buffer.dst_buffer = host_buffer_.vk_handle();
58 copy_buffer.region.srcOffset = device_buffer_offset_;
59 copy_buffer.region.size = region_size_;
60
61 context.render_graph().add_node(copy_buffer);
62}
63
65{
66 host_buffer_.free();
67}
68
69} // namespace blender::gpu
#define BLI_assert(a)
Definition BLI_assert.h:46
VKStagingBuffer(const VKBuffer &device_buffer, Direction direction, VkDeviceSize device_buffer_offset=0, VkDeviceSize region_size=UINT64_MAX)
void copy_from_device(VKContext &context)
void copy_to_device(VKContext &context)
#define UINT64_MAX
void object_label(GLenum type, GLuint object, const char *name)
Definition gl_debug.cc:329