turnip: fix vbs emission when there are holes in bindings
authorDanylo Piliaiev <dpiliaiev@igalia.com>
Tue, 5 Oct 2021 11:25:52 +0000 (14:25 +0300)
committerMarge Bot <eric+marge@anholt.net>
Wed, 6 Oct 2021 10:05:50 +0000 (10:05 +0000)
Otherwise we read garbage for bindings with value above
vertexBindingDescriptionCount.

Fixes vkd3d test "test_append_aligned_element"

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13195>

src/freedreno/vulkan/tu_pipeline.c

index 4b9b7bb..d490f5c 100644 (file)
@@ -2650,7 +2650,11 @@ tu_pipeline_builder_parse_vertex_input(struct tu_pipeline_builder *builder,
    const struct ir3_shader_variant *vs = builder->variants[MESA_SHADER_VERTEX];
    const struct ir3_shader_variant *bs = builder->binning_variant;
 
-   pipeline->num_vbs = vi_info->vertexBindingDescriptionCount;
+   /* Bindings may contain holes */
+   for (unsigned i = 0; i < vi_info->vertexBindingDescriptionCount; i++) {
+      pipeline->num_vbs =
+         MAX2(pipeline->num_vbs, vi_info->pVertexBindingDescriptions[i].binding + 1);
+   }
 
    struct tu_cs vi_cs;
    tu_cs_begin_sub_stream(&pipeline->cs,