diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py index 74bd57beb32..43f70efb988 100644 --- a/src/mapi/glapi/gen/gl_marshal.py +++ b/src/mapi/glapi/gen/gl_marshal.py @@ -127,6 +127,8 @@ class PrintCode(gl_XML.gl_print_base): if p.count: out('memcpy(cmd->{0}, {0}, {1});'.format( p.name, p.size_string())) + elif p.type_string() == 'GLenum': + out('cmd->{0} = MIN2({0}, 0xffff); /* clamped to 0xffff (invalid enum) */'.format(p.name)) else: out('cmd->{0} = {0};'.format(p.name)) if variable_params: @@ -164,10 +166,10 @@ class PrintCode(gl_XML.gl_print_base): 'GLboolean': 1, 'GLbyte': 1, 'GLubyte': 1, + 'GLenum': 2, # uses GLenum16, clamped to 0xffff (invalid enum) 'GLshort': 2, 'GLushort': 2, 'GLhalfNV': 2, - 'GLenum': 4, 'GLint': 4, 'GLuint': 4, 'GLbitfield': 4, @@ -212,7 +214,10 @@ class PrintCode(gl_XML.gl_print_base): out('{0} {1}[{2}];'.format( p.get_base_type_string(), p.name, p.count)) else: - out('{0} {1};'.format(p.type_string(), p.name)) + type = p.type_string() + if type == 'GLenum': + type = 'GLenum16' + out('{0} {1};'.format(type, p.name)) for p in variable_params: if p.img_null_flag: diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h index 6ed17a3c69d..efc579ac3e4 100644 --- a/src/mesa/main/glthread.h +++ b/src/mesa/main/glthread.h @@ -52,6 +52,7 @@ #include "GL/gl.h" #include "compiler/shader_enums.h" #include "main/config.h" +#include "glheader.h" #ifdef __cplusplus extern "C" { @@ -128,7 +129,7 @@ struct glthread_client_attrib { struct glthread_attrib_node { GLbitfield Mask; int ActiveTexture; - GLenum MatrixMode; + GLenum16 MatrixMode; bool CullFace; bool DepthTest; }; @@ -157,7 +158,7 @@ struct glthread_state bool inside_begin_end; /** Display lists. */ - GLenum ListMode; /**< Zero if not inside display list, else list mode. */ + GLenum16 ListMode; /**< Zero if not inside display list, else list mode. */ unsigned ListBase; unsigned ListCallDepth; @@ -226,7 +227,7 @@ struct glthread_state /** Basic matrix state tracking. */ int ActiveTexture; - GLenum MatrixMode; + GLenum16 MatrixMode; gl_matrix_index MatrixIndex; struct glthread_attrib_node AttribStack[MAX_ATTRIB_STACK_DEPTH]; int AttribStackDepth; diff --git a/src/mesa/main/glthread_draw.c b/src/mesa/main/glthread_draw.c index 3af1d3d3e06..2e709c44fd2 100644 --- a/src/mesa/main/glthread_draw.c +++ b/src/mesa/main/glthread_draw.c @@ -568,8 +568,8 @@ sync: struct marshal_cmd_DrawElementsInstancedARB { struct marshal_cmd_base cmd_base; - GLenum mode; - GLenum type; + GLenum16 mode; + GLenum16 type; GLsizei count; GLsizei instance_count; GLint basevertex; @@ -606,8 +606,8 @@ _mesa_unmarshal_DrawElementsInstancedARB(struct gl_context *ctx, struct marshal_cmd_DrawRangeElementsBaseVertex { struct marshal_cmd_base cmd_base; - GLenum mode; - GLenum type; + GLenum16 mode; + GLenum16 type; GLsizei count; GLint basevertex; GLuint min_index; @@ -645,9 +645,9 @@ draw_elements_async(struct gl_context *ctx, GLenum mode, GLsizei count, struct marshal_cmd_DrawRangeElementsBaseVertex *cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawRangeElementsBaseVertex, cmd_size); - cmd->mode = mode; + cmd->mode = MIN2(mode, 0xffff); + cmd->type = MIN2(type, 0xffff); cmd->count = count; - cmd->type = type; cmd->indices = indices; cmd->basevertex = basevertex; cmd->min_index = min_index; @@ -657,9 +657,9 @@ draw_elements_async(struct gl_context *ctx, GLenum mode, GLsizei count, struct marshal_cmd_DrawElementsInstancedARB *cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawElementsInstancedARB, cmd_size); - cmd->mode = mode; + cmd->mode = MIN2(mode, 0xffff); + cmd->type = MIN2(type, 0xffff); cmd->count = count; - cmd->type = type; cmd->indices = indices; cmd->instance_count = instance_count; cmd->basevertex = basevertex; @@ -671,8 +671,8 @@ struct marshal_cmd_DrawElementsInstancedBaseVertexBaseInstance { struct marshal_cmd_base cmd_base; bool index_bounds_valid; - GLenum mode; - GLenum type; + GLenum16 mode; + GLenum16 type; GLsizei count; GLsizei instance_count; GLint basevertex; @@ -756,9 +756,9 @@ draw_elements_async_user(struct gl_context *ctx, GLenum mode, GLsizei count, struct marshal_cmd_DrawElementsInstancedBaseVertexBaseInstance *cmd; cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawElementsInstancedBaseVertexBaseInstance, cmd_size); - cmd->mode = mode; + cmd->mode = MIN2(mode, 0xffff); + cmd->type = MIN2(type, 0xffff); cmd->count = count; - cmd->type = type; cmd->indices = indices; cmd->instance_count = instance_count; cmd->basevertex = basevertex; @@ -887,8 +887,8 @@ struct marshal_cmd_MultiDrawElementsBaseVertex { struct marshal_cmd_base cmd_base; bool has_base_vertex; - GLenum mode; - GLenum type; + GLenum16 mode; + GLenum16 type; GLsizei draw_count; GLuint user_buffer_mask; struct gl_buffer_object *index_buffer; @@ -972,8 +972,8 @@ multi_draw_elements_async(struct gl_context *ctx, GLenum mode, } cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_MultiDrawElementsBaseVertex, cmd_size); - cmd->mode = mode; - cmd->type = type; + cmd->mode = MIN2(mode, 0xffff); + cmd->type = MIN2(type, 0xffff); cmd->draw_count = draw_count; cmd->user_buffer_mask = user_buffer_mask; cmd->index_buffer = index_buffer; diff --git a/src/mesa/main/glthread_marshal.h b/src/mesa/main/glthread_marshal.h index 9c56e57e78c..f390cb9453c 100644 --- a/src/mesa/main/glthread_marshal.h +++ b/src/mesa/main/glthread_marshal.h @@ -613,7 +613,7 @@ _mesa_glthread_MatrixMode(struct gl_context *ctx, GLenum mode) return; ctx->GLThread.MatrixIndex = _mesa_get_matrix_index(ctx, mode); - ctx->GLThread.MatrixMode = mode; + ctx->GLThread.MatrixMode = MIN2(mode, 0xffff); } static inline void @@ -756,10 +756,10 @@ _mesa_glthread_CallLists(struct gl_context *ctx, GLsizei n, GLenum type, } static inline void -_mesa_glthread_NewList(struct gl_context *ctx, GLuint list, GLuint mode) +_mesa_glthread_NewList(struct gl_context *ctx, GLuint list, GLenum mode) { if (!ctx->GLThread.ListMode) - ctx->GLThread.ListMode = mode; + ctx->GLThread.ListMode = MIN2(mode, 0xffff); } static inline void