Blender V4.3
vk_draw_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
12#include "vk_node_info.hh"
13
15
27
33
34class VKDrawNode : public VKNodeInfo<VKNodeType::DRAW,
35 VKDrawCreateInfo,
36 VKDrawData,
37 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
38 VKResourceType::IMAGE | VKResourceType::BUFFER> {
39 public:
47 template<typename Node> static void set_node_data(Node &node, const CreateInfo &create_info)
48 {
49 node.draw = create_info.node_data;
50 vk_pipeline_data_copy(node.draw.pipeline_data, create_info.node_data.pipeline_data);
51 }
52
57 VKRenderGraphNodeLinks &node_links,
58 const CreateInfo &create_info) override
59 {
60 create_info.resources.build_links(resources, node_links);
62 resources, node_links, create_info.node_data.vertex_buffers);
63 }
64
69 Data &data,
70 VKBoundPipelines &r_bound_pipelines) override
71 {
73 data.pipeline_data,
74 r_bound_pipelines.graphics.pipeline,
75 VK_PIPELINE_BIND_POINT_GRAPHICS,
76 VK_SHADER_STAGE_ALL_GRAPHICS);
78 command_buffer, data.vertex_buffers, r_bound_pipelines.graphics.vertex_buffers);
79
80 command_buffer.draw(
81 data.vertex_count, data.instance_count, data.first_vertex, data.first_instance);
82 }
83
84 void free_data(Data &data)
85 {
86 vk_pipeline_data_free(data.pipeline_data);
87 }
88};
89} // namespace blender::gpu::render_graph
virtual void draw(uint32_t vertex_count, uint32_t instance_count, uint32_t first_vertex, uint32_t first_instance)=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 &r_bound_pipelines) override
void vk_pipeline_data_copy(VKPipelineData &dst, const VKPipelineData &src)
void vk_vertex_buffer_bindings_build_links(VKResourceStateTracker &resources, VKRenderGraphNodeLinks &node_links, const VKVertexBufferBindings &vertex_buffers)
void vk_pipeline_data_free(VKPipelineData &data)
void vk_vertex_buffer_bindings_build_commands(VKCommandBufferInterface &command_buffer, const VKVertexBufferBindings &vertex_buffer_bindings, VKVertexBufferBindings &r_bound_vertex_buffers)
void vk_pipeline_data_build_commands(VKCommandBufferInterface &command_buffer, const VKPipelineData &pipeline_data, VKBoundPipeline &r_bound_pipeline, VkPipelineBindPoint vk_pipeline_bind_point, VkShaderStageFlags vk_shader_stage_flags)
unsigned int uint32_t
Definition stdint.h:80
struct blender::gpu::render_graph::VKBoundPipelines::@660 graphics
const VKResourceAccessInfo & resources
VKDrawCreateInfo(const VKResourceAccessInfo &resources)
VKVertexBufferBindings vertex_buffers
void build_links(VKResourceStateTracker &resources, VKRenderGraphNodeLinks &node_links) const