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:
Marek Olšák 2024-01-07 20:42:14 -05:00 committed by Marge Bot
parent 39edcd695a
commit 15bc7e1d62
4 changed files with 32 additions and 22 deletions

View file

@ -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':

View file

@ -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,

View file

@ -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;

View file

@ -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;