Blender V4.3
vk_update_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
11#include "vk_node_info.hh"
12
18 VkBuffer dst_buffer;
19 VkDeviceSize dst_offset;
20 VkDeviceSize data_size;
21 void *data;
22};
23
24class VKUpdateBufferNode : public VKNodeInfo<VKNodeType::UPDATE_BUFFER,
25 VKUpdateBufferData,
26 VKUpdateBufferData,
27 VK_PIPELINE_STAGE_TRANSFER_BIT,
28 VKResourceType::BUFFER> {
29 public:
37 template<typename Node> static void set_node_data(Node &node, const CreateInfo &create_info)
38 {
39 node.update_buffer = create_info;
40 }
41
46 VKRenderGraphNodeLinks &node_links,
47 const CreateInfo &create_info) override
48 {
49 ResourceWithStamp dst_resource = resources.get_buffer_and_increase_stamp(
50 create_info.dst_buffer);
51 node_links.outputs.append({dst_resource, VK_ACCESS_TRANSFER_WRITE_BIT});
52 }
53
58 Data &data,
59 VKBoundPipelines & /*r_bound_pipelines*/) override
60 {
61 command_buffer.update_buffer(data.dst_buffer, data.dst_offset, data.data_size, data.data);
62 }
63
64 void free_data(Data &data)
65 {
66 MEM_freeN(data.data);
67 data.data = nullptr;
68 }
69};
70} // namespace blender::gpu::render_graph
virtual void update_buffer(VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize data_size, const void *p_data)=0
ResourceWithStamp get_buffer_and_increase_stamp(VkBuffer vk_buffer)
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, const CreateInfo &create_info)
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105