From 09f94632e033805bee57a963ca15df131e7c7f7c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 21 Mar 2020 02:24:28 -0400 Subject: [PATCH] glthread: initialize VAOs properly Part-of: --- src/mesa/main/glthread.c | 2 ++ src/mesa/main/glthread.h | 1 + src/mesa/main/glthread_varray.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c index 8769f8b4033..ac86081b679 100644 --- a/src/mesa/main/glthread.c +++ b/src/mesa/main/glthread.c @@ -89,6 +89,8 @@ _mesa_glthread_init(struct gl_context *ctx) util_queue_destroy(&glthread->queue); return; } + + _mesa_glthread_reset_vao(&glthread->DefaultVAO); glthread->CurrentVAO = &glthread->DefaultVAO; ctx->MarshalExec = _mesa_create_marshal_table(ctx); diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h index 2c6e59adac9..f979e5931d4 100644 --- a/src/mesa/main/glthread.h +++ b/src/mesa/main/glthread.h @@ -161,6 +161,7 @@ void _mesa_glthread_upload(struct gl_context *ctx, const void *data, GLsizeiptr size, unsigned *out_offset, struct gl_buffer_object **out_buffer, uint8_t **out_ptr); +void _mesa_glthread_reset_vao(struct glthread_vao *vao); void _mesa_glthread_BindBuffer(struct gl_context *ctx, GLenum target, GLuint buffer); diff --git a/src/mesa/main/glthread_varray.c b/src/mesa/main/glthread_varray.c index 2aa4a6d65fb..ac83c7a93cd 100644 --- a/src/mesa/main/glthread_varray.c +++ b/src/mesa/main/glthread_varray.c @@ -37,6 +37,35 @@ * - Handle ARB_vertex_attrib_binding (incl. EXT_dsa and ARB_dsa) */ +void +_mesa_glthread_reset_vao(struct glthread_vao *vao) +{ + static unsigned default_elem_size[VERT_ATTRIB_MAX] = { + [VERT_ATTRIB_NORMAL] = 12, + [VERT_ATTRIB_COLOR1] = 12, + [VERT_ATTRIB_FOG] = 4, + [VERT_ATTRIB_COLOR_INDEX] = 4, + [VERT_ATTRIB_EDGEFLAG] = 1, + [VERT_ATTRIB_POINT_SIZE] = 4, + }; + + vao->CurrentElementBufferName = 0; + vao->Enabled = 0; + vao->UserPointerMask = 0; + vao->NonZeroDivisorMask = 0; + + for (unsigned i = 0; i < ARRAY_SIZE(vao->Attrib); i++) { + unsigned elem_size = default_elem_size[i]; + if (!elem_size) + elem_size = 16; + + vao->Attrib[i].ElementSize = elem_size; + vao->Attrib[i].Stride = elem_size; + vao->Attrib[i].Divisor = 0; + vao->Attrib[i].Pointer = NULL; + } +} + static struct glthread_vao * lookup_vao(struct gl_context *ctx, GLuint id) { @@ -127,6 +156,7 @@ _mesa_glthread_GenVertexArrays(struct gl_context *ctx, continue; /* Is that all we can do? */ vao->Name = id; + _mesa_glthread_reset_vao(vao); _mesa_HashInsertLocked(glthread->VAOs, id, vao); } } -- 2.30.2