diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py index 1458c33fc76..69a5b1d4a08 100644 --- a/src/mapi/glapi/gen/gl_marshal.py +++ b/src/mapi/glapi/gen/gl_marshal.py @@ -225,6 +225,8 @@ class PrintCode(gl_XML.gl_print_base): if p.count: out('memcpy(cmd->{0}, {0}, {1});'.format( p.name, p.size_string())) + elif type == 'GLenum8': + out('cmd->{0} = MIN2({0}, 0xff); /* clamped to 0xff (invalid enum) */'.format(p.name)) elif type == 'GLenum16': out('cmd->{0} = MIN2({0}, 0xffff); /* clamped to 0xffff (invalid enum) */'.format(p.name)) elif type == 'GLclamped16i': diff --git a/src/mapi/glapi/gen/marshal_XML.py b/src/mapi/glapi/gen/marshal_XML.py index 9aa99d19682..165c0b73a1a 100644 --- a/src/mapi/glapi/gen/marshal_XML.py +++ b/src/mapi/glapi/gen/marshal_XML.py @@ -30,6 +30,13 @@ import gl_XML def get_marshal_type(func_name, param): type = param.type_string() + if ('Draw' in func_name and + ('Arrays' in func_name or + 'Elements' in func_name or + 'TransformFeedback' in func_name)): + if (type, param.name) == ('GLenum', 'mode'): + return 'GLenum8' + if type == 'GLenum': return 'GLenum16' # clamped to 0xffff (always invalid enum) @@ -58,6 +65,7 @@ def get_type_size(func_name, param): 'GLboolean': 1, 'GLbyte': 1, 'GLubyte': 1, + 'GLenum8': 1, # clamped by glthread 'GLenum16': 2, # clamped by glthread 'GLshort': 2, 'GLushort': 2, diff --git a/src/mesa/main/glthread_draw.c b/src/mesa/main/glthread_draw.c index 2511089af15..4dbddcdfd32 100644 --- a/src/mesa/main/glthread_draw.c +++ b/src/mesa/main/glthread_draw.c @@ -294,7 +294,7 @@ _mesa_unmarshal_DrawArraysInstancedBaseInstance(struct gl_context *ctx, struct marshal_cmd_DrawArraysInstancedBaseInstanceDrawID { struct marshal_cmd_base cmd_base; - GLenum mode; + GLenum8 mode; GLint first; GLsizei count; GLsizei instance_count; @@ -324,8 +324,8 @@ _mesa_unmarshal_DrawArraysInstancedBaseInstanceDrawID(struct gl_context *ctx, struct marshal_cmd_DrawArraysUserBuf { struct marshal_cmd_base cmd_base; + GLenum8 mode; uint16_t num_slots; - GLenum mode; GLint first; GLsizei count; GLsizei instance_count; @@ -416,7 +416,7 @@ draw_arrays(GLuint drawid, GLenum mode, GLint first, GLsizei count, struct marshal_cmd_DrawArrays *cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawArrays, cmd_size); - cmd->mode = mode; + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->first = first; cmd->count = count; } else if (drawid == 0) { @@ -424,7 +424,7 @@ draw_arrays(GLuint drawid, GLenum mode, GLint first, GLsizei count, struct marshal_cmd_DrawArraysInstancedBaseInstance *cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawArraysInstancedBaseInstance, cmd_size); - cmd->mode = mode; + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->first = first; cmd->count = count; cmd->instance_count = instance_count; @@ -434,7 +434,7 @@ draw_arrays(GLuint drawid, GLenum mode, GLint first, GLsizei count, struct marshal_cmd_DrawArraysInstancedBaseInstanceDrawID *cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawArraysInstancedBaseInstanceDrawID, cmd_size); - cmd->mode = mode; + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->first = first; cmd->count = count; cmd->instance_count = instance_count; @@ -459,7 +459,7 @@ draw_arrays(GLuint drawid, GLenum mode, GLint first, GLsizei count, cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawArraysUserBuf, cmd_size); cmd->num_slots = align(cmd_size, 8) / 8; - cmd->mode = mode; + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->first = first; cmd->count = count; cmd->instance_count = instance_count; @@ -475,8 +475,8 @@ draw_arrays(GLuint drawid, GLenum mode, GLint first, GLsizei count, struct marshal_cmd_MultiDrawArraysUserBuf { struct marshal_cmd_base cmd_base; + GLenum8 mode; uint16_t num_slots; - GLenum mode; GLsizei draw_count; GLuint user_buffer_mask; }; @@ -571,7 +571,7 @@ _mesa_marshal_MultiDrawArrays(GLenum mode, const GLint *first, cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_MultiDrawArraysUserBuf, cmd_size); cmd->num_slots = align(cmd_size, 8) / 8; - cmd->mode = mode; + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->draw_count = draw_count; cmd->user_buffer_mask = user_buffer_mask; @@ -651,7 +651,7 @@ _mesa_unmarshal_DrawElementsInstancedBaseVertexBaseInstance(struct gl_context *c struct marshal_cmd_DrawElementsInstancedBaseVertexBaseInstanceDrawID { struct marshal_cmd_base cmd_base; - GLenum16 mode; + GLenum8 mode; GLenum16 type; GLsizei count; GLsizei instance_count; @@ -779,7 +779,7 @@ draw_elements(GLuint drawid, GLenum mode, GLsizei count, GLenum type, struct marshal_cmd_DrawElementsBaseVertex *cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawElementsBaseVertex, cmd_size); - cmd->mode = MIN2(mode, 0xffff); + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->type = MIN2(type, 0xffff); cmd->count = count; cmd->indices = indices; @@ -790,7 +790,7 @@ draw_elements(GLuint drawid, GLenum mode, GLsizei count, GLenum type, struct marshal_cmd_DrawElementsInstanced *cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawElementsInstanced, cmd_size); - cmd->mode = MIN2(mode, 0xffff); + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->type = MIN2(type, 0xffff); cmd->count = count; cmd->instance_count = instance_count; @@ -800,7 +800,7 @@ draw_elements(GLuint drawid, GLenum mode, GLsizei count, GLenum type, struct marshal_cmd_DrawElementsInstancedBaseVertexBaseInstance *cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawElementsInstancedBaseVertexBaseInstance, cmd_size); - cmd->mode = MIN2(mode, 0xffff); + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->type = MIN2(type, 0xffff); cmd->count = count; cmd->instance_count = instance_count; @@ -812,7 +812,7 @@ draw_elements(GLuint drawid, GLenum mode, GLsizei count, GLenum type, struct marshal_cmd_DrawElementsInstancedBaseVertexBaseInstanceDrawID *cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawElementsInstancedBaseVertexBaseInstanceDrawID, cmd_size); - cmd->mode = MIN2(mode, 0xffff); + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->type = MIN2(type, 0xffff); cmd->count = count; cmd->instance_count = instance_count; @@ -890,7 +890,7 @@ draw_elements(GLuint drawid, GLenum mode, GLsizei count, GLenum type, cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawElementsUserBuf, cmd_size); cmd->num_slots = align(cmd_size, 8) / 8; - cmd->mode = MIN2(mode, 0xffff); + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->type = MIN2(type, 0xffff); cmd->count = count; cmd->indices = indices; @@ -908,10 +908,10 @@ draw_elements(GLuint drawid, GLenum mode, GLsizei count, GLenum type, struct marshal_cmd_MultiDrawElementsUserBuf { struct marshal_cmd_base cmd_base; - uint16_t num_slots; bool has_base_vertex; GLenum8 mode; GLenum16 type; + uint16_t num_slots; GLsizei draw_count; GLuint user_buffer_mask; struct gl_buffer_object *index_buffer; @@ -1318,7 +1318,7 @@ _mesa_marshal_DrawArraysIndirect(GLenum mode, const GLvoid *indirect) struct marshal_cmd_DrawArraysIndirect *cmd; cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawArraysIndirect, cmd_size); - cmd->mode = MIN2(mode, 0xffff); /* clamped to 0xffff (invalid enum) */ + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->indirect = indirect; return; } @@ -1353,7 +1353,7 @@ _mesa_marshal_DrawElementsIndirect(GLenum mode, GLenum type, const GLvoid *indir struct marshal_cmd_DrawElementsIndirect *cmd; cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_DrawElementsIndirect, cmd_size); - cmd->mode = MIN2(mode, 0xffff); /* clamped to 0xffff (invalid enum) */ + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->type = MIN2(type, 0xffff); /* clamped to 0xffff (invalid enum) */ cmd->indirect = indirect; return; @@ -1393,7 +1393,7 @@ _mesa_marshal_MultiDrawArraysIndirect(GLenum mode, const GLvoid *indirect, cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_MultiDrawArraysIndirect, cmd_size); - cmd->mode = MIN2(mode, 0xffff); /* clamped to 0xffff (invalid enum) */ + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->indirect = indirect; cmd->primcount = primcount; cmd->stride = stride; @@ -1438,7 +1438,7 @@ _mesa_marshal_MultiDrawElementsIndirect(GLenum mode, GLenum type, cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_MultiDrawElementsIndirect, cmd_size); - cmd->mode = MIN2(mode, 0xffff); /* clamped to 0xffff (invalid enum) */ + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->type = MIN2(type, 0xffff); /* clamped to 0xffff (invalid enum) */ cmd->indirect = indirect; cmd->primcount = primcount; @@ -1489,7 +1489,7 @@ _mesa_marshal_MultiDrawArraysIndirectCountARB(GLenum mode, GLintptr indirect, _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_MultiDrawArraysIndirectCountARB, cmd_size); - cmd->mode = MIN2(mode, 0xffff); /* clamped to 0xffff (invalid enum) */ + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->indirect = indirect; cmd->drawcount = drawcount; cmd->maxdrawcount = maxdrawcount; @@ -1540,7 +1540,7 @@ _mesa_marshal_MultiDrawElementsIndirectCountARB(GLenum mode, GLenum type, struct marshal_cmd_MultiDrawElementsIndirectCountARB *cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_MultiDrawElementsIndirectCountARB, cmd_size); - cmd->mode = MIN2(mode, 0xffff); /* clamped to 0xffff (invalid enum) */ + cmd->mode = MIN2(mode, 0xff); /* clamped to 0xff (invalid enum) */ cmd->type = MIN2(type, 0xffff); /* clamped to 0xffff (invalid enum) */ cmd->indirect = indirect; cmd->drawcount = drawcount; diff --git a/src/mesa/main/glthread_marshal.h b/src/mesa/main/glthread_marshal.h index 3cc1853e890..c687adb58c0 100644 --- a/src/mesa/main/glthread_marshal.h +++ b/src/mesa/main/glthread_marshal.h @@ -63,8 +63,8 @@ extern const char *_mesa_unmarshal_func_name[NUM_DISPATCH_CMD]; struct marshal_cmd_DrawElementsUserBuf { struct marshal_cmd_base cmd_base; + GLenum8 mode; uint16_t num_slots; - GLenum16 mode; GLenum16 type; GLsizei count; GLsizei instance_count;