radeonsi: fix an out-of-bounds access in si_create_vertex_state
authorMarek Olšák <marek.olsak@amd.com>
Tue, 12 Oct 2021 13:36:13 +0000 (09:36 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 13 Oct 2021 03:57:30 +0000 (03:57 +0000)
Fixes: fb8f532ea1b - radeonsi: implement draw_vertex_state for lower display list overhead
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5484

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13309>

src/gallium/drivers/radeonsi/si_state.c

index f77e7f4..2bcd16f 100644 (file)
@@ -5052,11 +5052,11 @@ si_create_vertex_state(struct pipe_screen *screen,
    /* Initialize the vertex element state in state->element.
     * Do it by creating a vertex element state object and copying it there.
     */
-   struct pipe_context ctx = {};
-   ctx.screen = screen;
-   struct si_vertex_elements *velems = si_create_vertex_elements(&ctx, num_elements, elements);
+   struct si_context ctx = {};
+   ctx.b.screen = screen;
+   struct si_vertex_elements *velems = si_create_vertex_elements(&ctx.b, num_elements, elements);
    state->velems = *velems;
-   si_delete_vertex_element(&ctx, velems);
+   si_delete_vertex_element(&ctx.b, velems);
 
    assert(!state->velems.instance_divisor_is_one);
    assert(!state->velems.instance_divisor_is_fetched);