Blender V5.0
vk_render_graph_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
26#include "nodes/vk_draw_node.hh"
34
36
41
76
86 union {
101 };
102
111 template<typename NodeInfo>
113 const typename NodeInfo::CreateInfo &create_info)
114 {
116 /* Instance of NodeInfo is needed to call virtual methods. CPP doesn't support overloading of
117 * static methods. */
118 NodeInfo node_info;
119 type = NodeInfo::node_type;
120 node_info.set_node_data(*this, storage, create_info);
121 }
122
128 template<typename NodeInfo>
130 VKRenderGraphNodeLinks &node_links,
131 const typename NodeInfo::CreateInfo &create_info)
132 {
133 /* Instance of NodeInfo is needed to call virtual methods. CPP doesn't support overloading of
134 * static methods. */
135 NodeInfo node_info;
136 node_info.build_links(resources, node_links, create_info);
137 }
138
144 VkPipelineStageFlags pipeline_stage_get() const
145 {
146 switch (type) {
148 return VK_PIPELINE_STAGE_NONE;
179 case VKNodeType::DRAW:
195 }
197 return VK_PIPELINE_STAGE_NONE;
198 }
199
207 VKRenderGraphStorage &storage,
208 VKBoundPipelines &r_bound_pipelines)
209 {
210 switch (type) {
211 case VKNodeType::UNUSED: {
212 break;
213 }
214#define BUILD_COMMANDS_STORAGE(NODE_TYPE, NODE_CLASS, ATTRIBUTE_NAME) \
215 case NODE_TYPE: { \
216 NODE_CLASS node_info; \
217 node_info.build_commands( \
218 command_buffer, storage.ATTRIBUTE_NAME[storage_index], r_bound_pipelines); \
219 break; \
220 }
221
222#define BUILD_COMMANDS(NODE_TYPE, NODE_CLASS, ATTRIBUTE_NAME) \
223 case NODE_TYPE: { \
224 NODE_CLASS node_info; \
225 node_info.build_commands(command_buffer, ATTRIBUTE_NAME, r_bound_pipelines); \
226 break; \
227 }
228
258#undef BUILD_COMMANDS
259#undef BUILD_COMMANDS_STORAGE
260 }
261 }
262
267 {
268 switch (type) {
269
270#define FREE_DATA_STORAGE(NODE_TYPE, NODE_CLASS, ATTRIBUTE_NAME) \
271 case NODE_TYPE: { \
272 NODE_CLASS node_info; \
273 node_info.free_data(storage.ATTRIBUTE_NAME[storage_index]); \
274 break; \
275 }
276
277#define FREE_DATA(NODE_TYPE, NODE_CLASS, ATTRIBUTE_NAME) \
278 case NODE_TYPE: { \
279 NODE_CLASS node_info; \
280 node_info.free_data(ATTRIBUTE_NAME); \
281 break; \
282 }
283
292#undef FREE_DATA
293#undef FREE_DATA_STORAGE
294
312 break;
313 }
314 }
315
323 {
324 free_data(storage);
326 storage_index = -1;
327 }
328};
329
331 "VKRenderGraphNode should be kept small. Consider moving data to the "
332 "VKRenderGraphStorage class.");
333
334} // namespace blender::gpu::render_graph
#define BLI_assert_unreachable()
Definition BLI_assert.h:93
#define BLI_STATIC_ASSERT(a, msg)
Definition BLI_assert.h:83
#define BLI_assert(a)
Definition BLI_assert.h:46
long long int int64_t
unsigned long long int uint64_t
void build_links(VKResourceStateTracker &resources, VKRenderGraphNodeLinks &node_links, const typename NodeInfo::CreateInfo &create_info)
void free_data(VKRenderGraphStorage &storage)
VKClearDepthStencilImageNode::Data clear_depth_stencil_image
void set_node_data(VKRenderGraphStorage &storage, const typename NodeInfo::CreateInfo &create_info)
void build_commands(VKCommandBufferInterface &command_buffer, VKRenderGraphStorage &storage, VKBoundPipelines &r_bound_pipelines)
Vector< VKClearAttachmentsNode::Data, 1024 > clear_attachments
Vector< VKBlitImageNode::Data, 1024 > blit_image
Vector< VKCopyImageToBufferNode::Data, 1024 > copy_image_to_buffer
Vector< VKCopyBufferToImageNode::Data, 1024 > copy_buffer_to_image
Vector< VKCopyImageNode::Data, 1024 > copy_image
Vector< VKDrawIndexedNode::Data, 1024 > draw_indexed
Vector< VKDrawIndirectNode::Data, 1024 > draw_indirect
Vector< VKDrawIndexedIndirectNode::Data, 1024 > draw_indexed_indirect
Vector< VKBeginRenderingNode::Data, 1024 > begin_rendering
#define FREE_DATA_STORAGE(NODE_TYPE, NODE_CLASS, ATTRIBUTE_NAME)
#define BUILD_COMMANDS(NODE_TYPE, NODE_CLASS, ATTRIBUTE_NAME)
#define BUILD_COMMANDS_STORAGE(NODE_TYPE, NODE_CLASS, ATTRIBUTE_NAME)
#define FREE_DATA(NODE_TYPE, NODE_CLASS, ATTRIBUTE_NAME)