From: Marek Olšák Date: Wed, 19 Feb 2020 20:58:34 +0000 (-0500) Subject: glthread: inline _mesa_unmarshal_dispatch_cmd and convert the switch to a table X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=19151e2605c95498f9dbc85fa85e10e851df374d;p=mesa.git glthread: inline _mesa_unmarshal_dispatch_cmd and convert the switch to a table Reviewed-by: Timothy Arceri Part-of: --- diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py index 9d5d5ad9e27..1e5f75da399 100644 --- a/src/mapi/glapi/gen/gl_marshal.py +++ b/src/mapi/glapi/gen/gl_marshal.py @@ -35,7 +35,6 @@ header = """ #include "dispatch.h" #include "glthread.h" #include "marshal.h" -#include "marshal_generated.h" """ @@ -282,31 +281,14 @@ class PrintCode(gl_XML.gl_print_base): out('') def print_unmarshal_dispatch_cmd(self, api): - out('size_t') - out('_mesa_unmarshal_dispatch_cmd(struct gl_context *ctx, ' - 'const void *cmd)') - out('{') + out('const _mesa_unmarshal_func _mesa_unmarshal_dispatch[NUM_DISPATCH_CMD] = {') with indent(): - out('const struct marshal_cmd_base *cmd_base = cmd;') - out('switch (cmd_base->cmd_id) {') for func in api.functionIterateAll(): flavor = func.marshal_flavor() if flavor in ('skip', 'sync'): continue - out('case DISPATCH_CMD_{0}:'.format(func.name)) - with indent(): - out('debug_print_unmarshal("{0}");'.format(func.name)) - out(('_mesa_unmarshal_{0}(ctx, (const struct marshal_cmd_{0} *)' - ' cmd);').format(func.name)) - out('break;') - out('default:') - with indent(): - out('assert(!"Unrecognized command ID");') - out('break;') - out('}') - out('') - out('return cmd_base->cmd_size;') - out('}') + out('[DISPATCH_CMD_{0}] = (_mesa_unmarshal_func)_mesa_unmarshal_{0},'.format(func.name)) + out('};') out('') out('') diff --git a/src/mapi/glapi/gen/gl_marshal_h.py b/src/mapi/glapi/gen/gl_marshal_h.py index a7a9eda5731..94926b99a0f 100644 --- a/src/mapi/glapi/gen/gl_marshal_h.py +++ b/src/mapi/glapi/gen/gl_marshal_h.py @@ -61,6 +61,7 @@ class PrintCode(gl_XML.gl_print_base): if flavor in ('skip', 'sync'): continue print(' DISPATCH_CMD_{0},'.format(func.name)) + print(' NUM_DISPATCH_CMD,') print('};') diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c index 82baad597f9..3b605183483 100644 --- a/src/mesa/main/glthread.c +++ b/src/mesa/main/glthread.c @@ -35,7 +35,6 @@ #include "main/mtypes.h" #include "main/glthread.h" #include "main/marshal.h" -#include "main/marshal_generated.h" #include "util/u_atomic.h" #include "util/u_thread.h" @@ -49,8 +48,13 @@ glthread_unmarshal_batch(void *job, int thread_index) _glapi_set_dispatch(ctx->CurrentServerDispatch); - while (pos < batch->used) - pos += _mesa_unmarshal_dispatch_cmd(ctx, &batch->buffer[pos]); + while (pos < batch->used) { + const struct marshal_cmd_base *cmd = + (const struct marshal_cmd_base *)&batch->buffer[pos]; + + _mesa_unmarshal_dispatch[cmd->cmd_id](ctx, cmd); + pos += cmd->cmd_size; + } assert(pos == batch->used); batch->used = 0; diff --git a/src/mesa/main/marshal.c b/src/mesa/main/marshal.c index 43deafb2c80..b2428e5e7cd 100644 --- a/src/mesa/main/marshal.c +++ b/src/mesa/main/marshal.c @@ -31,7 +31,6 @@ #include "main/macros.h" #include "marshal.h" #include "dispatch.h" -#include "marshal_generated.h" struct marshal_cmd_Flush { diff --git a/src/mesa/main/marshal.h b/src/mesa/main/marshal.h index 63e0295576e..b2556ca9841 100644 --- a/src/mesa/main/marshal.h +++ b/src/mesa/main/marshal.h @@ -33,6 +33,7 @@ #include "main/glthread.h" #include "main/context.h" #include "main/macros.h" +#include "marshal_generated.h" struct marshal_cmd_base { @@ -47,6 +48,9 @@ struct marshal_cmd_base uint16_t cmd_size; }; +typedef void (*_mesa_unmarshal_func)(struct gl_context *ctx, const void *cmd); +extern const _mesa_unmarshal_func _mesa_unmarshal_dispatch[NUM_DISPATCH_CMD]; + static inline void * _mesa_glthread_allocate_command(struct gl_context *ctx, uint16_t cmd_id, @@ -125,20 +129,9 @@ debug_print_marshal(const char *func) #endif } -static inline void -debug_print_unmarshal(const char *func) -{ -#if DEBUG_MARSHAL_PRINT_CALLS - printf("unmarshal: %s\n", func); -#endif -} - struct _glapi_table * _mesa_create_marshal_table(const struct gl_context *ctx); -size_t -_mesa_unmarshal_dispatch_cmd(struct gl_context *ctx, const void *cmd); - static inline void _mesa_post_marshal_hook(struct gl_context *ctx) {