Skip to content

Commit 87dde59

Browse files
committed
add draw_vbo_change_dynamic
this tests binding a vertex buffer with dynamic vertex input
1 parent bb9526a commit 87dde59

File tree

Image for: File tree

3 files changed

Image for: 3 files changed
+43
-2
lines changed

3 files changed

Image for: 3 files changed
+43
-2
lines changed

‎src/pipeline.c

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,29 @@ create_basic_pipelines(VkRenderPass render_pass, VkPipelineLayout layout, VkPipe
249249
pipelines[i] = create_pipeline_helper(layout, render_pass, modules, 1, 0);
250250
}
251251

252+
VkPipeline
253+
create_basic_pipeline_dynamic(VkRenderPass render_pass, VkPipelineLayout layout, VkPipeline *pipelines)
254+
{
255+
VkShaderModule modules[5] = {
256+
create_shader_module(basic_vert_spirv, basic_vert_spirv_len),
257+
VK_NULL_HANDLE,
258+
VK_NULL_HANDLE,
259+
VK_NULL_HANDLE,
260+
create_shader_module(basic_frag_spirv, basic_frag_spirv_len),
261+
};
262+
263+
VkVertexInputBindingDescription vbinding;
264+
VkVertexInputAttributeDescription vattr;
265+
VkPipelineVertexInputStateCreateInfo vertex_input_state = {0};
266+
vertex_input_state.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
267+
vertex_input_state.pVertexBindingDescriptions = &vbinding;
268+
vertex_input_state.vertexBindingDescriptionCount = 1;
269+
vertex_input_state.pVertexAttributeDescriptions = &vattr;
270+
vertex_input_state.vertexAttributeDescriptionCount = 1;
271+
generate_vattribs(&vbinding, &vattr, 1);
272+
return create_pipeline(layout, render_pass, modules, &vertex_input_state, 1, true, NULL, 0);
273+
}
274+
252275
VkPipeline
253276
create_multirt_pipeline(VkRenderPass render_pass, VkPipelineLayout layout)
254277
{
@@ -514,4 +537,4 @@ create_gpl_vert_pipeline(VkRenderPass render_pass, VkPipelineLayout layout, VkPi
514537
};
515538

516539
return create_pipeline(layout, render_pass, NULL, vertex_input_state, 1, false, &gplci, 0);
517-
}
540+
}

‎src/vkoverhead.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ static VkDescriptorUpdateTemplateKHR template_image_many_push;
138138
static VkPipeline pipelines_basic[NUM_PIPELINE_VARIANTS];
139139
static VkPipeline pipelines_vattrib[NUM_PIPELINE_VARIANTS];
140140
static VkPipeline pipelines_dyn[NUM_PIPELINE_VARIANTS];
141+
static VkPipeline pipeline_basic_dynamic;
141142
static VkPipeline pipeline_vattrib_dynamic;
142143
static VkPipeline pipeline_multirt;
143144
static VkPipeline pipeline_multrt_dyn;
@@ -768,6 +769,18 @@ draw_vbo_change(unsigned iterations)
768769
}
769770
}
770771

772+
static void
773+
draw_vbo_change_dynamic(unsigned iterations)
774+
{
775+
iterations = filter_overflow(draw_vbo_change_dynamic, iterations, 1);
776+
begin_rp();
777+
VkDeviceSize offset[] = {0, 16};
778+
for (unsigned i = 0; i < iterations; i++, count++) {
779+
VK(CmdBindVertexBuffers)(cmdbuf, 0, 1, &vbo[i & 1], &offset[i & 1]);
780+
VK(CmdDrawIndexed)(cmdbuf, 3, 1, 0, 0, 0);
781+
}
782+
}
783+
771784
static void
772785
draw_rp_begin_end(unsigned iterations)
773786
{
@@ -2341,6 +2354,7 @@ struct perf_case {
23412354
};
23422355

23432356
#define CASE_BASIC(name, ...) {#name, name, pipelines_basic, __VA_ARGS__}
2357+
#define CASE_BASIC_DYN(name, ...) {#name, name, &pipeline_basic_dynamic, __VA_ARGS__}
23442358
#define CASE_DYN_BASIC(name, ...) {#name, name, pipelines_dyn, __VA_ARGS__}
23452359
#define CASE_MULTIRT(name, ...) {#name, name, &pipeline_multirt, __VA_ARGS__}
23462360
#define CASE_DYN_MULTIRT(name, ...) {#name, name, &pipeline_multrt_dyn, __VA_ARGS__}
@@ -2378,6 +2392,7 @@ static struct perf_case cases_draw[] = {
23782392
CASE_MULTIRT(draw_multirt_begin_end_dontcare),
23792393
CASE_DYN_MULTIRT(draw_multirt_begin_end_dontcare_dynrender, check_dynamic_rendering),
23802394
CASE_BASIC(draw_vbo_change),
2395+
CASE_BASIC_DYN(draw_vbo_change_dynamic, check_dynamic_vertex_input),
23812396
CASE_BASIC(draw_1vattrib_change),
23822397
CASE_VATTRIB(draw_16vattrib),
23832398
CASE_VATTRIB(draw_16vattrib_16vbo_change),
@@ -3450,8 +3465,10 @@ main(int argc, char *argv[])
34503465
if (check_dynamic_rendering())
34513466
create_basic_pipelines(VK_NULL_HANDLE, layout_basic, pipelines_dyn);
34523467
create_vattrib_pipelines(render_pass_clear, layout_basic, pipelines_vattrib);
3453-
if (check_dynamic_vertex_input())
3468+
if (check_dynamic_vertex_input()) {
34543469
pipeline_vattrib_dynamic = create_vattrib_pipeline_dynamic(render_pass_clear, layout_basic);
3470+
pipeline_basic_dynamic = create_vattrib_pipeline_dynamic(render_pass_clear, layout_basic);
3471+
}
34553472
pipeline_multirt = create_multirt_pipeline(render_pass_multirt_clear, layout_basic);
34563473
if (check_dynamic_rendering())
34573474
pipeline_multrt_dyn = create_multirt_pipeline(VK_NULL_HANDLE, layout_basic);

‎src/vkoverhead.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ VkFramebuffer create_framebuffer(unsigned num_rts, VkRenderPass render_pass);
4949
VkPipelineLayout create_pipeline_layout(VkDescriptorSetLayout *desc_layouts, unsigned num_desc_layouts);
5050
void create_basic_pipelines(VkRenderPass render_pass, VkPipelineLayout layout, VkPipeline *pipelines);
5151
void create_vattrib_pipelines(VkRenderPass render_pass, VkPipelineLayout layout, VkPipeline *pipelines);
52+
VkPipeline create_basic_pipeline_dynamic(VkRenderPass render_pass, VkPipelineLayout layout, VkPipeline *pipelines);
5253
VkPipeline create_multirt_pipeline(VkRenderPass render_pass, VkPipelineLayout layout);
5354
VkPipeline create_ubo_pipeline(VkRenderPass render_pass, VkPipelineLayout layout, VkPipelineCreateFlags flags);
5455
VkPipeline create_sampler_pipeline(VkRenderPass render_pass, VkPipelineLayout layout);

0 commit comments

Image for: 0 commit comments
Comments
 (0)