mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 14:50:10 +01:00
glthread: pack the primitive type to 8 bits
The maximum valid enum is only 14. Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27350>
This commit is contained in:
parent
39edcd695a
commit
15bc7e1d62
4 changed files with 32 additions and 22 deletions
|
|
@ -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':
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue