mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 04:00:10 +01:00
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:
parent
245f9593b7
commit
19151e2605
5 changed files with 15 additions and 36 deletions
|
|
@ -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('')
|
||||
|
||||
|
|
|
|||
|
|
@ -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('};')
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
#include "main/macros.h"
|
||||
#include "marshal.h"
|
||||
#include "dispatch.h"
|
||||
#include "marshal_generated.h"
|
||||
|
||||
struct marshal_cmd_Flush
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue