Blender V4.3
vk_command_builder.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 "BLI_set.hh"
12
13#include "vk_common.hh"
15#include "vk_scheduler.hh"
16
18class VKRenderGraph;
19
26
34 private:
35 /* Pool of VKBufferMemoryBarriers that can be reused when building barriers */
36 Vector<VkBufferMemoryBarrier> vk_buffer_memory_barriers_;
37 Vector<VkImageMemoryBarrier> vk_image_memory_barriers_;
38
40 VkBufferMemoryBarrier vk_buffer_memory_barrier_;
42 VkImageMemoryBarrier vk_image_memory_barrier_;
43
44 struct {
49
57 VkPipelineStageFlags src_stage_mask = VK_PIPELINE_STAGE_NONE;
58 VkPipelineStageFlags dst_stage_mask = VK_PIPELINE_STAGE_NONE;
59
66 int debug_level = 0;
67
76
78 const bool subresource_tracking_enabled() const
79 {
81 }
82 } state_;
83
84 public:
86
99 void build_nodes(VKRenderGraph &render_graph,
100 VKCommandBufferInterface &command_buffer,
101 Span<NodeHandle> node_handles);
102
103 private:
113 void build_node_group(VKRenderGraph &render_graph,
114 VKCommandBufferInterface &command_buffer,
115 Span<NodeHandle> node_group,
116 std::optional<NodeHandle> &r_rendering_scope);
117
122 void build_pipeline_barriers(VKRenderGraph &render_graph,
123 VKCommandBufferInterface &command_buffer,
124 NodeHandle node_handle,
125 VkPipelineStageFlags pipeline_stage);
126 void reset_barriers();
127 void send_pipeline_barriers(VKCommandBufferInterface &command_buffer);
128
129 void add_buffer_barriers(VKRenderGraph &render_graph,
130 NodeHandle node_handle,
131 VkPipelineStageFlags node_stages);
132 void add_buffer_barrier(VkBuffer vk_buffer,
133 VkAccessFlags src_access_mask,
134 VkAccessFlags dst_access_mask);
135 void add_buffer_read_barriers(VKRenderGraph &render_graph,
136 NodeHandle node_handle,
137 VkPipelineStageFlags node_stages);
138 void add_buffer_write_barriers(VKRenderGraph &render_graph,
139 NodeHandle node_handle,
140 VkPipelineStageFlags node_stages);
141
142 void add_image_barriers(VKRenderGraph &render_graph,
143 NodeHandle node_handle,
144 VkPipelineStageFlags node_stages);
145 void add_image_barrier(VkImage vk_image,
146 VkAccessFlags src_access_mask,
147 VkAccessFlags dst_access_mask,
148 VkImageLayout old_image_layout,
149 VkImageLayout new_image_layout,
150 VkImageAspectFlags aspect_mask,
151 uint32_t layer_base = 0,
152 uint32_t layer_count = VK_REMAINING_ARRAY_LAYERS);
153 void add_image_read_barriers(VKRenderGraph &render_graph,
154 NodeHandle node_handle,
155 VkPipelineStageFlags node_stages);
156 void add_image_write_barriers(VKRenderGraph &render_graph,
157 NodeHandle node_handle,
158 VkPipelineStageFlags node_stages);
159
168 void activate_debug_group(VKRenderGraph &render_graph,
169 VKCommandBufferInterface &command_buffer,
170 NodeHandle node_handle);
171
175 void finish_debug_groups(VKCommandBufferInterface &command_buffer);
176
177 private:
181 void layer_tracking_begin(const VKRenderGraph &render_graph, NodeHandle node_handle);
182
188 void layer_tracking_update(VkImage vk_image,
189 uint32_t layer,
190 uint32_t layer_count,
191 VkImageLayout old_layout,
192 VkImageLayout new_layout);
193
203 void layer_tracking_end(VKCommandBufferInterface &command_buffer, bool suspend);
204};
205
206} // namespace blender::gpu::render_graph
bool is_empty() const
Definition BLI_set.hh:572
void build_nodes(VKRenderGraph &render_graph, VKCommandBufferInterface &command_buffer, Span< NodeHandle > node_handles)
unsigned int uint32_t
Definition stdint.h:80
__int64 int64_t
Definition stdint.h:89