Blender V4.3
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
9#pragma once
10
11#include "vk_node_info.hh"
12
18 VkBuffer src_buffer;
19 VkImage dst_image;
20 VkBufferImageCopy region;
21};
22
23class VKCopyBufferToImageNode : public VKNodeInfo<VKNodeType::COPY_BUFFER_TO_IMAGE,
24 VKCopyBufferToImageData,
25 VKCopyBufferToImageData,
26 VK_PIPELINE_STAGE_TRANSFER_BIT,
27 VKResourceType::IMAGE | VKResourceType::BUFFER> {
28 public:
36 template<typename Node> static void set_node_data(Node &node, const CreateInfo &create_info)
37 {
38 node.copy_buffer_to_image = create_info;
39 }
40
45 VKRenderGraphNodeLinks &node_links,
46 const CreateInfo &create_info) override
47 {
48 ResourceWithStamp src_resource = resources.get_buffer(create_info.src_buffer);
49 ResourceWithStamp dst_resource = resources.get_image_and_increase_stamp(create_info.dst_image);
50 node_links.inputs.append(
51 {src_resource, VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_UNDEFINED});
52 node_links.outputs.append({dst_resource,
53 VK_ACCESS_TRANSFER_WRITE_BIT,
54 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
55 create_info.region.imageSubresource.aspectMask});
56 }
57
62 Data &data,
63 VKBoundPipelines & /*r_bound_pipelines*/) override
64 {
65 command_buffer.copy_buffer_to_image(
66 data.src_buffer, data.dst_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &data.region);
67 }
68};
69} // namespace blender::gpu::render_graph
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
static void set_node_data(Node &node, const CreateInfo &create_info)
void build_links(VKResourceStateTracker &resources, VKRenderGraphNodeLinks &node_links, const CreateInfo &create_info) override
void build_commands(VKCommandBufferInterface &command_buffer, Data &data, VKBoundPipelines &) override
ResourceWithStamp get_image_and_increase_stamp(VkImage vk_image)
ResourceWithStamp get_buffer(VkBuffer vk_buffer) const