5#include "testing/testing.h"
11TEST(vk_render_graph, dispatch_read_back)
20 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(
log), resources);
23 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
31 render_graph.add_node(dispatch_info);
34 EXPECT_EQ(
"bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, pipeline=0x2)",
37 "bind_descriptor_sets(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, layout=0x3, "
38 "p_descriptor_sets=0x4)",
40 EXPECT_EQ(
"dispatch(group_count_x=1, group_count_y=1, group_count_z=1)",
log[2]);
46TEST(vk_render_graph, dispatch_dispatch_read_back)
55 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(
log), resources);
60 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
68 render_graph.add_node(dispatch_info);
72 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
80 render_graph.add_node(dispatch_info);
84 EXPECT_EQ(
"bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, pipeline=0x2)",
87 "bind_descriptor_sets(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, layout=0x3, "
88 "p_descriptor_sets=0x4)",
90 EXPECT_EQ(
"dispatch(group_count_x=1, group_count_y=1, group_count_z=1)",
log[2]);
92 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, "
93 "dst_stage_mask=VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT" +
95 " - buffer_barrier(src_access_mask=VK_ACCESS_SHADER_WRITE_BIT, "
96 "dst_access_mask=VK_ACCESS_SHADER_WRITE_BIT, buffer=0x1, offset=0, "
97 "size=18446744073709551615)" +
100 EXPECT_EQ(
"dispatch(group_count_x=2, group_count_y=2, group_count_z=2)",
log[4]);
107TEST(vk_render_graph, dispatch_dispatch_read_back_with_changing_descriptor_sets)
117 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(
log), resources);
122 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
130 render_graph.add_node(dispatch_info);
134 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
142 render_graph.add_node(dispatch_info);
146 EXPECT_EQ(
"bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, pipeline=0x2)",
149 "bind_descriptor_sets(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, layout=0x3, "
150 "p_descriptor_sets=0x4)",
152 EXPECT_EQ(
"dispatch(group_count_x=1, group_count_y=1, group_count_z=1)",
log[2]);
154 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, "
155 "dst_stage_mask=VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT" +
157 " - buffer_barrier(src_access_mask=VK_ACCESS_SHADER_WRITE_BIT, "
158 "dst_access_mask=VK_ACCESS_SHADER_WRITE_BIT, buffer=0x1, offset=0, "
159 "size=18446744073709551615)" +
163 "bind_descriptor_sets(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, layout=0x3, "
164 "p_descriptor_sets=0x5)",
166 EXPECT_EQ(
"dispatch(group_count_x=2, group_count_y=2, group_count_z=2)",
log[5]);
172TEST(vk_render_graph, dispatch_dispatch_read_back_with_changing_pipelines)
182 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(
log), resources);
187 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
195 render_graph.add_node(dispatch_info);
199 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
207 render_graph.add_node(dispatch_info);
211 EXPECT_EQ(
"bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, pipeline=0x2)",
214 "bind_descriptor_sets(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, layout=0x4, "
215 "p_descriptor_sets=0x5)",
217 EXPECT_EQ(
"dispatch(group_count_x=1, group_count_y=1, group_count_z=1)",
log[2]);
219 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, "
220 "dst_stage_mask=VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT" +
222 " - buffer_barrier(src_access_mask=VK_ACCESS_SHADER_WRITE_BIT, "
223 "dst_access_mask=VK_ACCESS_SHADER_WRITE_BIT, buffer=0x1, offset=0, "
224 "size=18446744073709551615)" +
227 EXPECT_EQ(
"bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, pipeline=0x3)",
229 EXPECT_EQ(
"dispatch(group_count_x=2, group_count_y=2, group_count_z=2)",
log[5]);
236TEST(vk_render_graph, dispatch_dispatch_read_back_with_changing_pipelines_descriptor_sets)
247 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(
log), resources);
252 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
260 render_graph.add_node(dispatch_info);
264 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
272 render_graph.add_node(dispatch_info);
276 EXPECT_EQ(
"bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, pipeline=0x2)",
279 "bind_descriptor_sets(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, layout=0x4, "
280 "p_descriptor_sets=0x5)",
282 EXPECT_EQ(
"dispatch(group_count_x=1, group_count_y=1, group_count_z=1)",
log[2]);
284 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, "
285 "dst_stage_mask=VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT" +
287 " - buffer_barrier(src_access_mask=VK_ACCESS_SHADER_WRITE_BIT, "
288 "dst_access_mask=VK_ACCESS_SHADER_WRITE_BIT, buffer=0x1, offset=0, "
289 "size=18446744073709551615)" +
292 EXPECT_EQ(
"bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, pipeline=0x3)",
295 "bind_descriptor_sets(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, layout=0x4, "
296 "p_descriptor_sets=0x6)",
298 EXPECT_EQ(
"dispatch(group_count_x=2, group_count_y=2, group_count_z=2)",
log[6]);
304TEST(vk_render_graph, dispatch_indirect_read_back)
314 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(
log), resources);
319 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
326 render_graph.add_node(dispatch_indirect_info);
330 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
331 "dst_stage_mask=VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT" +
333 " - buffer_barrier(src_access_mask=, "
334 "dst_access_mask=VK_ACCESS_INDIRECT_COMMAND_READ_BIT, buffer=0x2, offset=0, "
335 "size=18446744073709551615)" +
338 EXPECT_EQ(
"bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, pipeline=0x3)",
341 "bind_descriptor_sets(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, layout=0x4, "
342 "p_descriptor_sets=0x5)",
344 EXPECT_EQ(
"dispatch_indirect(buffer=0x2, offset=0)",
log[3]);
347TEST(vk_render_graph, dispatch_indirect_dispatch_indirect_read_back)
357 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(
log), resources);
363 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
371 render_graph.add_node(dispatch_indirect_info);
375 access_info.
buffers.append({buffer, VK_ACCESS_SHADER_WRITE_BIT});
383 render_graph.add_node(dispatch_indirect_info);
389 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
390 "dst_stage_mask=VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT" +
392 " - buffer_barrier(src_access_mask=, "
393 "dst_access_mask=VK_ACCESS_INDIRECT_COMMAND_READ_BIT, buffer=0x2, offset=0, "
394 "size=18446744073709551615)" +
397 EXPECT_EQ(
"bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, pipeline=0x3)",
400 "bind_descriptor_sets(pipeline_bind_point=VK_PIPELINE_BIND_POINT_COMPUTE, layout=0x4, "
401 "p_descriptor_sets=0x5)",
403 EXPECT_EQ(
"dispatch_indirect(buffer=0x2, offset=0)",
log[3]);
405 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, "
406 "VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, "
407 "dst_stage_mask=VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT" +
409 " - buffer_barrier(src_access_mask=VK_ACCESS_SHADER_WRITE_BIT, "
410 "dst_access_mask=VK_ACCESS_SHADER_WRITE_BIT, buffer=0x1, offset=0, "
411 "size=18446744073709551615)" +
414 EXPECT_EQ(
"dispatch_indirect(buffer=0x2, offset=12)",
log[5]);
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
void submit_buffer_for_read(VkBuffer vk_buffer)
void add_buffer(VkBuffer vk_buffer, const char *name=nullptr)
ccl_device_inline float3 log(float3 v)
TEST(vk_render_graph, dispatch_read_back)
BLI_INLINE std::string & endl()
VKDispatchData dispatch_node
VKPipelineData pipeline_data
VKDispatchIndirectData dispatch_indirect_node
VKPipelineData pipeline_data
VkPipelineLayout vk_pipeline_layout
VkDescriptorSet vk_descriptor_set
Vector< VKBufferAccess > buffers