From c41f6ad7649c8d1b8f4d6f5641bb439311f41538 Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Tue, 20 Feb 2024 11:42:06 +0100 Subject: [PATCH] mesa: deal with vbo_save_vertex_list::modes being NULL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This case was forgotten in the 9aa205668bc. Fixes: 9aa205668bc ("mesa: inline {Create,Draw}GalliumVertexState callbacks") Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10619 Reviewed-by: Marek Olšák Part-of: --- src/mesa/vbo/vbo_save_draw.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/mesa/vbo/vbo_save_draw.c b/src/mesa/vbo/vbo_save_draw.c index d5e640288d1..7b1715967c2 100644 --- a/src/mesa/vbo/vbo_save_draw.c +++ b/src/mesa/vbo/vbo_save_draw.c @@ -292,21 +292,25 @@ vbo_save_playback_vertex_list_gallium(struct gl_context *ctx, const uint8_t *mode = node->modes; unsigned num_draws = node->num_draws; - /* Find consecutive draws where mode doesn't vary. */ - for (unsigned i = 0, first = 0; i <= num_draws; i++) { - if (i == num_draws || mode[i] != mode[first]) { - unsigned current_num_draws = i - first; + if (!mode) { + pipe->draw_vertex_state(pipe, state, velem_mask, info, draws, num_draws); + } else { + /* Find consecutive draws where mode doesn't vary. */ + for (unsigned i = 0, first = 0; i <= num_draws; i++) { + if (i == num_draws || mode[i] != mode[first]) { + unsigned current_num_draws = i - first; - /* Increase refcount to be able to use take_vertex_state_ownership - * with all draws. - */ - if (i != num_draws && info.take_vertex_state_ownership) - p_atomic_inc(&state->reference.count); + /* Increase refcount to be able to use take_vertex_state_ownership + * with all draws. + */ + if (i != num_draws && info.take_vertex_state_ownership) + p_atomic_inc(&state->reference.count); - info.mode = mode[first]; - pipe->draw_vertex_state(pipe, state, velem_mask, info, &draws[first], - current_num_draws); - first = i; + info.mode = mode[first]; + pipe->draw_vertex_state(pipe, state, velem_mask, info, &draws[first], + current_num_draws); + first = i; + } } } } else if (node->num_draws) {