Blender V4.3
vk_copy_image_to_buffer_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
14#include "vk_common.hh"
15#include "vk_node_info.hh"
16
22 VkImage src_image;
23 VkBuffer dst_buffer;
24 VkBufferImageCopy region;
25};
26
27class VKCopyImageToBufferNode : public VKNodeInfo<VKNodeType::COPY_IMAGE_TO_BUFFER,
28 VKCopyImageToBufferData,
29 VKCopyImageToBufferData,
30 VK_PIPELINE_STAGE_TRANSFER_BIT,
31 VKResourceType::IMAGE | VKResourceType::BUFFER> {
32 public:
40 template<typename Node> static void set_node_data(Node &node, const CreateInfo &create_info)
41 {
42 node.copy_image_to_buffer = create_info;
43 }
44
49 VKRenderGraphNodeLinks &node_links,
50 const CreateInfo &create_info) override
51 {
52 ResourceWithStamp src_resource = resources.get_image(create_info.src_image);
53 ResourceWithStamp dst_resource = resources.get_buffer_and_increase_stamp(
54 create_info.dst_buffer);
55 node_links.inputs.append({src_resource,
56 VK_ACCESS_TRANSFER_READ_BIT,
57 VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
58 create_info.region.imageSubresource.aspectMask});
59 node_links.outputs.append(
60 {dst_resource, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED});
61 }
62
67 Data &data,
68 VKBoundPipelines & /*r_bound_pipelines*/) override
69 {
70 command_buffer.copy_image_to_buffer(
71 data.src_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, data.dst_buffer, 1, &data.region);
72 }
73};
74} // namespace blender::gpu::render_graph
virtual void copy_image_to_buffer(VkImage src_image, VkImageLayout src_image_layout, VkBuffer dst_buffer, uint32_t region_count, const VkBufferImageCopy *p_regions)=0
void build_links(VKResourceStateTracker &resources, VKRenderGraphNodeLinks &node_links, const CreateInfo &create_info) override
static void set_node_data(Node &node, const CreateInfo &create_info)
void build_commands(VKCommandBufferInterface &command_buffer, Data &data, VKBoundPipelines &) override
ResourceWithStamp get_buffer_and_increase_stamp(VkBuffer vk_buffer)
ResourceWithStamp get_image(VkImage vk_image) const