Blender V5.0
vk_copy_buffer_to_image_node.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include "vk_node_info.hh"
12
18 VkBuffer src_buffer;
19 VkImage dst_image;
20 VkBufferImageCopy region;
21};
22
27
28class VKCopyBufferToImageNode : public VKNodeInfo<VKNodeType::COPY_BUFFER_TO_IMAGE,
29 VKCopyBufferToImageCreateInfo,
30 VKCopyBufferToImageData,
31 VK_PIPELINE_STAGE_TRANSFER_BIT,
32 VKResourceType::IMAGE | VKResourceType::BUFFER> {
33 public:
41 template<typename Node, typename Storage>
42 static void set_node_data(Node &node, Storage &storage, const CreateInfo &create_info)
43 {
44 node.storage_index = storage.copy_buffer_to_image.append_and_get_index(create_info.node_data);
45 }
46
51 VKRenderGraphNodeLinks &node_links,
52 const CreateInfo &create_info) override
53 {
54 ResourceWithStamp src_resource = resources.get_buffer(create_info.node_data.src_buffer);
55 ResourceWithStamp dst_resource = resources.get_image_and_increase_stamp(
56 create_info.node_data.dst_image);
57 node_links.inputs.append(
58 {src_resource, VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_UNDEFINED});
59 node_links.outputs.append({dst_resource,
60 VK_ACCESS_TRANSFER_WRITE_BIT,
61 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
62 create_info.vk_image_aspects});
63 }
64
69 Data &data,
70 VKBoundPipelines & /*r_bound_pipelines*/) override
71 {
72 command_buffer.copy_buffer_to_image(
73 data.src_buffer, data.dst_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &data.region);
74 }
75};
76} // namespace blender::gpu::render_graph
BMesh const char void * data
virtual void copy_buffer_to_image(VkBuffer src_buffer, VkImage dst_image, VkImageLayout dst_image_layout, uint32_t region_count, const VkBufferImageCopy *p_regions)=0
void build_links(VKResourceStateTracker &resources, VKRenderGraphNodeLinks &node_links, const CreateInfo &create_info) override
void build_commands(VKCommandBufferInterface &command_buffer, Data &data, VKBoundPipelines &) override
static void set_node_data(Node &node, Storage &storage, const CreateInfo &create_info)
ResourceWithStamp get_image_and_increase_stamp(VkImage vk_image)
ResourceWithStamp get_buffer(VkBuffer vk_buffer) const