glthread: inline _mesa_unmarshal_dispatch_cmd and convert the switch to a table

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3948>
This commit is contained in:
Marek Olšák 2020-02-19 15:58:34 -05:00 committed by Marge Bot
parent 245f9593b7
commit 19151e2605
5 changed files with 15 additions and 36 deletions

View file

@ -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('')

View file

@ -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('};')

View file

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

View file

@ -31,7 +31,6 @@
#include "main/macros.h"
#include "marshal.h"
#include "dispatch.h"
#include "marshal_generated.h"
struct marshal_cmd_Flush
{

View file

@ -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)
{