From fcb3246d4fbc37ad6d5cf700a3f93e1d1881e0c4 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Thu, 11 Mar 2021 03:05:34 -0700 Subject: [PATCH] nv2a: Connect draw arrays primitives originally within BEGIN/END --- hw/xbox/nv2a/nv2a_int.h | 1 + hw/xbox/nv2a/pgraph.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/hw/xbox/nv2a/nv2a_int.h b/hw/xbox/nv2a/nv2a_int.h index 9c0162e201..4d7c752a9a 100644 --- a/hw/xbox/nv2a/nv2a_int.h +++ b/hw/xbox/nv2a/nv2a_int.h @@ -344,6 +344,7 @@ typedef struct PGRAPHState { /* FIXME: Unknown size, possibly endless, 1000 will do for now */ GLint gl_draw_arrays_start[1000]; GLsizei gl_draw_arrays_count[1000]; + bool draw_arrays_prevent_connect; GLuint gl_memory_buffer; GLuint gl_vertex_array; diff --git a/hw/xbox/nv2a/pgraph.c b/hw/xbox/nv2a/pgraph.c index 177e49613c..8357cab7e6 100644 --- a/hw/xbox/nv2a/pgraph.c +++ b/hw/xbox/nv2a/pgraph.c @@ -940,6 +940,7 @@ int pgraph_method(NV2AState *d, unsigned int subchannel, LAMP(1, NV097_SET_BEGIN_END, pg->primitive_mode) && LAM(2, NV097_DRAW_ARRAYS)) { num_words_consumed += 4; + pg->draw_arrays_prevent_connect = true; } #undef LAM @@ -2755,7 +2756,7 @@ DEF_METHOD(NV097, DRAW_ARRAYS) assert(pg->draw_arrays_length < ARRAY_SIZE(pg->gl_draw_arrays_start)); /* Attempt to connect primitives */ - if (pg->draw_arrays_length > 0) { + if (!pg->draw_arrays_prevent_connect && pg->draw_arrays_length > 0) { unsigned int last_start = pg->gl_draw_arrays_start[pg->draw_arrays_length - 1]; GLsizei* last_count = @@ -2769,6 +2770,7 @@ DEF_METHOD(NV097, DRAW_ARRAYS) pg->gl_draw_arrays_start[pg->draw_arrays_length] = start; pg->gl_draw_arrays_count[pg->draw_arrays_length] = count; pg->draw_arrays_length++; + pg->draw_arrays_prevent_connect = false; } DEF_METHOD(NV097, INLINE_ARRAY)