X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmapi%2Fglapi%2Fgen%2Fgl_marshal.py;h=c12a086942bb93405a3fbf8a80f6b6be609d14ec;hb=9dbf5ec9f7844dda9d2473a3168e3f8b0009a66d;hp=5b35357ac548dc358f2e9c05f969f325dad70319;hpb=b39bdb07164211c483a3c8a8625689169be09cc4;p=mesa.git diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py index 5b35357ac54..c12a086942b 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" """ @@ -189,11 +188,11 @@ class PrintCode(gl_XML.gl_print_base): if func.variable_params: for p in func.variable_params: - out('const {0} * {1};'.format( + out('{0} * {1};'.format( p.get_base_type_string(), p.name)) out('const char *variable_data = (const char *) (cmd + 1);') for p in func.variable_params: - out('{0} = (const {1} *) variable_data;'.format( + out('{0} = ({1} *) variable_data;'.format( p.name, p.get_base_type_string())) if p.img_null_flag: @@ -238,7 +237,7 @@ class PrintCode(gl_XML.gl_print_base): if p.img_null_flag: size = '({0} ? {1} : 0)'.format(p.name, size) size_terms.append(size) - out('size_t cmd_size = {0};'.format(' + '.join(size_terms))) + out('int cmd_size = {0};'.format(' + '.join(size_terms))) out('{0} *cmd;'.format(struct)) out('debug_print_marshal("{0}");'.format(func.name)) @@ -249,24 +248,28 @@ class PrintCode(gl_XML.gl_print_base): out('if ({0}) {{'.format(func.marshal_fail)) with indent(): out('_mesa_glthread_finish(ctx);') - out('_mesa_glthread_restore_dispatch(ctx);') + out('_mesa_glthread_restore_dispatch(ctx, __func__);') self.print_sync_dispatch(func) out('return;') out('}') - out('if (cmd_size <= MARSHAL_MAX_CMD_SIZE) {') + if len(func.variable_params) > 0: + with indent(): + out('if (cmd_size <= MARSHAL_MAX_CMD_SIZE) {') + with indent(): + self.print_async_dispatch(func) + out('return;') + out('}') + out('') + if need_fallback_sync: + out('fallback_to_sync:') + with indent(): + out('_mesa_glthread_finish(ctx);') + self.print_sync_dispatch(func) + else: with indent(): self.print_async_dispatch(func) - out('return;') - out('}') - - out('') - if need_fallback_sync: - out('fallback_to_sync:') - with indent(): - out('_mesa_glthread_finish(ctx);') - self.print_sync_dispatch(func) - + assert not need_fallback_sync out('}') def print_async_body(self, func): @@ -278,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('')