Blender
V4.3
source
blender
gpu
vulkan
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
9
#include "
vk_staging_buffer.hh
"
10
#include "
vk_context.hh
"
11
12
namespace
blender::gpu
{
13
14
VKStagingBuffer::VKStagingBuffer
(
const
VKBuffer
&device_buffer,
Direction
direction)
15
: device_buffer_(device_buffer)
16
{
17
VkBufferUsageFlags usage;
18
switch
(direction) {
19
case
Direction::HostToDevice
:
20
usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
21
break
;
22
case
Direction::DeviceToHost
:
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
30
void
VKStagingBuffer::copy_to_device
(
VKContext
&context)
31
{
32
BLI_assert
(host_buffer_.is_allocated() && host_buffer_.is_mapped());
33
render_graph::VKCopyBufferNode::CreateInfo
copy_buffer = {};
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
41
void
VKStagingBuffer::copy_from_device
(
VKContext
&context)
42
{
43
BLI_assert
(host_buffer_.is_allocated() && host_buffer_.is_mapped());
44
render_graph::VKCopyBufferNode::CreateInfo
copy_buffer = {};
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
52
void
VKStagingBuffer::free
()
53
{
54
host_buffer_.free();
55
}
56
57
}
// namespace blender::gpu
BLI_assert
#define BLI_assert(a)
Definition
BLI_assert.h:50
GPU_USAGE_STREAM
@ GPU_USAGE_STREAM
Definition
GPU_vertex_buffer.hh:41
blender::gpu::VKBuffer
Definition
vk_buffer.hh:23
blender::gpu::VKBuffer::size_in_bytes
int64_t size_in_bytes() const
Definition
vk_buffer.hh:64
blender::gpu::VKContext
Definition
vk_context.hh:29
blender::gpu::VKStagingBuffer::free
void free()
Definition
vk_staging_buffer.cc:52
blender::gpu::VKStagingBuffer::Direction
Direction
Definition
vk_staging_buffer.hh:26
blender::gpu::VKStagingBuffer::Direction::DeviceToHost
@ DeviceToHost
Definition
vk_staging_buffer.hh:34
blender::gpu::VKStagingBuffer::Direction::HostToDevice
@ HostToDevice
Definition
vk_staging_buffer.hh:30
blender::gpu::VKStagingBuffer::copy_from_device
void copy_from_device(VKContext &context)
Definition
vk_staging_buffer.cc:41
blender::gpu::VKStagingBuffer::VKStagingBuffer
VKStagingBuffer(const VKBuffer &device_buffer, Direction direction)
Definition
vk_staging_buffer.cc:14
blender::gpu::VKStagingBuffer::copy_to_device
void copy_to_device(VKContext &context)
Definition
vk_staging_buffer.cc:30
blender::gpu::render_graph::VKNodeInfo< VKNodeType::COPY_BUFFER, VKCopyBufferData, VKCopyBufferData, VK_PIPELINE_STAGE_TRANSFER_BIT, VKResourceType::BUFFER >::CreateInfo
VKCopyBufferData CreateInfo
Definition
vk_node_info.hh:162
blender::gpu::debug::object_label
void object_label(GLenum type, GLuint object, const char *name)
Definition
gl_debug.cc:344
blender::gpu
Definition
blf_internal_types.hh:23
blender::gpu::render_graph::VKCopyBufferData::region
VkBufferCopy region
Definition
vk_copy_buffer_node.hh:20
blender::gpu::render_graph::VKCopyBufferData::src_buffer
VkBuffer src_buffer
Definition
vk_copy_buffer_node.hh:18
blender::gpu::render_graph::VKCopyBufferData::dst_buffer
VkBuffer dst_buffer
Definition
vk_copy_buffer_node.hh:19
vk_context.hh
vk_staging_buffer.hh
Generated on Sat Oct 4 2025 05:32:23 for Blender by
doxygen
1.14.0