[Mesa-dev] [PATCH] glthread: get rid of unmarshal dispatch enum/table

Marek Olšák maraeo at gmail.com
Sat Jul 1 16:46:29 UTC 2017


Instead of passing the function pointer through the queue, passing
just a call ID (uint16_t) is preferable.

If the switch statement is an issue, doing a function pointer lookup
from a static array should be OK.

Marek

On Fri, Jun 30, 2017 at 7:14 PM, Grigori Goronzy <greg at chown.ath.cx> wrote:
> On 2017-06-30 15:27, Nicolai Hähnle wrote:
>>
>> On 30.06.2017 02:29, Grigori Goronzy wrote:
>>>
>>> Use function pointers to identify the unmarshalling function, which
>>> is simpler and gets rid of a lot generated code.
>>>
>>> This removes an indirection and possibly results in a slight speedup
>>> as well.
>>
>>
>> The fact that it blows up cmd_base from 4 bytes to 16 bytes might
>> result in a slowdown. Marek's recent changes clearly indicated that
>> looking at memory behavior matters quite a bit for glthread. So I'm
>> inclined to say No on this unless you can demonstrate a consistent
>> speedup.
>>
>
> That's indeed a notable difference. I suspect it isn't so much the byte size
> of the marshalled commands that affects throughput, but the number of
> commands per batch and their associated costs when unmarshalling, so the
> larger size of cmd_base might not matter much (perhaps with adjusted max
> batch size). In any case, I'll try get hold of some numbers.
>
> Best regards
> Grigori
>
>
>> Cheers,
>> Nicolai
>>
>>
>>> ---
>>>   src/mapi/glapi/gen/Makefile.am     |  4 --
>>>   src/mapi/glapi/gen/gl_marshal.py   | 36 ++--------------
>>>   src/mapi/glapi/gen/gl_marshal_h.py | 86
>>> --------------------------------------
>>>   src/mesa/Android.gen.mk            |  7 ----
>>>   src/mesa/Makefile.sources          |  1 -
>>>   src/mesa/SConscript                |  8 ----
>>>   src/mesa/main/.gitignore           |  1 -
>>>   src/mesa/main/glthread.c           |  9 +++-
>>>   src/mesa/main/glthread.h           |  2 -
>>>   src/mesa/main/marshal.c            | 19 ++++-----
>>>   src/mesa/main/marshal.h            | 14 +++----
>>>   11 files changed, 26 insertions(+), 161 deletions(-)
>>>   delete mode 100644 src/mapi/glapi/gen/gl_marshal_h.py
>>>
>>> diff --git a/src/mapi/glapi/gen/Makefile.am
>>> b/src/mapi/glapi/gen/Makefile.am
>>> index bd04519..62007a4 100644
>>> --- a/src/mapi/glapi/gen/Makefile.am
>>> +++ b/src/mapi/glapi/gen/Makefile.am
>>> @@ -76,7 +76,6 @@ EXTRA_DIST= \
>>>         gl_genexec.py \
>>>         gl_gentable.py \
>>>         gl_marshal.py \
>>> -       gl_marshal_h.py \
>>>         gl_procs.py \
>>>         gl_SPARC_asm.py \
>>>         gl_table.py \
>>> @@ -297,9 +296,6 @@ $(MESA_DIR)/main/api_exec.c: gl_genexec.py apiexec.py
>>> $(COMMON)
>>>   $(MESA_DIR)/main/marshal_generated.c: gl_marshal.py marshal_XML.py
>>> $(COMMON)
>>>         $(PYTHON_GEN) $(srcdir)/gl_marshal.py -f
>>> $(srcdir)/gl_and_es_API.xml > $@
>>>   -$(MESA_DIR)/main/marshal_generated.h: gl_marshal_h.py marshal_XML.py
>>> $(COMMON)
>>> -       $(PYTHON_GEN) $(srcdir)/gl_marshal_h.py -f
>>> $(srcdir)/gl_and_es_API.xml > $@
>>> -
>>>   $(MESA_DIR)/main/dispatch.h: gl_table.py $(COMMON)
>>>         $(PYTHON_GEN) $(srcdir)/gl_table.py -f
>>> $(srcdir)/gl_and_es_API.xml -m remap_table > $@
>>>   diff --git a/src/mapi/glapi/gen/gl_marshal.py
>>> b/src/mapi/glapi/gen/gl_marshal.py
>>> index efa4d9e..e71ede3 100644
>>> --- a/src/mapi/glapi/gen/gl_marshal.py
>>> +++ b/src/mapi/glapi/gen/gl_marshal.py
>>> @@ -34,7 +34,6 @@ header = """
>>>   #include "dispatch.h"
>>>   #include "glthread.h"
>>>   #include "marshal.h"
>>> -#include "marshal_generated.h"
>>>   """
>>>     @@ -106,7 +105,7 @@ class PrintCode(gl_XML.gl_print_base):
>>>         def print_async_dispatch(self, func):
>>>           out('cmd = _mesa_glthread_allocate_command(ctx, '
>>> -            'DISPATCH_CMD_{0}, cmd_size);'.format(func.name))
>>> +            '(unmarshal_func)_mesa_unmarshal_{0},
>>> cmd_size);'.format(func.name))
>>>           for p in func.fixed_params:
>>>               if p.count:
>>>                   out('memcpy(cmd->{0}, {0}, {1});'.format(
>>> @@ -166,7 +165,7 @@ class PrintCode(gl_XML.gl_print_base):
>>>           out('};')
>>>         def print_async_unmarshal(self, func):
>>> -        out('static inline void')
>>> +        out('static void')
>>>           out(('_mesa_unmarshal_{0}(struct gl_context *ctx, '
>>>                'const struct marshal_cmd_{0} *cmd)').format(func.name))
>>>           out('{')
>>> @@ -205,6 +204,7 @@ class PrintCode(gl_XML.gl_print_base):
>>>                       else:
>>>                           out('variable_data +=
>>> {0};'.format(p.size_string(False)))
>>>   +            out('debug_print_unmarshal("{0}");'.format(func.name))
>>>               self.print_sync_call(func)
>>>           out('}')
>>>   @@ -276,35 +276,6 @@ class PrintCode(gl_XML.gl_print_base):
>>>           out('')
>>>           out('')
>>>   -    def print_unmarshal_dispatch_cmd(self, api):
>>> -        out('size_t')
>>> -        out('_mesa_unmarshal_dispatch_cmd(struct gl_context *ctx, '
>>> -            'const void *cmd)')
>>> -        out('{')
>>> -        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('')
>>> -        out('')
>>> -
>>>       def print_create_marshal_table(self, api):
>>>           out('struct _glapi_table *')
>>>           out('_mesa_create_marshal_table(const struct gl_context *ctx)')
>>> @@ -338,7 +309,6 @@ class PrintCode(gl_XML.gl_print_base):
>>>                   async_funcs.append(func)
>>>               elif flavor == 'sync':
>>>                   self.print_sync_body(func)
>>> -        self.print_unmarshal_dispatch_cmd(api)
>>>           self.print_create_marshal_table(api)
>>>     diff --git a/src/mapi/glapi/gen/gl_marshal_h.py
>>> b/src/mapi/glapi/gen/gl_marshal_h.py
>>> deleted file mode 100644
>>> index 6e39148..0000000
>>> --- a/src/mapi/glapi/gen/gl_marshal_h.py
>>> +++ /dev/null
>>> @@ -1,86 +0,0 @@
>>> -#!/usr/bin/env python
>>> -
>>> -# Copyright (C) 2012 Intel Corporation
>>> -#
>>> -# Permission is hereby granted, free of charge, to any person obtaining
>>> a
>>> -# copy of this software and associated documentation files (the
>>> "Software"),
>>> -# to deal in the Software without restriction, including without
>>> limitation
>>> -# the rights to use, copy, modify, merge, publish, distribute,
>>> sublicense,
>>> -# and/or sell copies of the Software, and to permit persons to whom the
>>> -# Software is furnished to do so, subject to the following conditions:
>>> -#
>>> -# The above copyright notice and this permission notice (including the
>>> next
>>> -# paragraph) shall be included in all copies or substantial portions of
>>> the
>>> -# Software.
>>> -#
>>> -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>>> EXPRESS OR
>>> -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>>> MERCHANTABILITY,
>>> -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT
>>> SHALL
>>> -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
>>> OTHER
>>> -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>>> ARISING
>>> -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>>> DEALINGS
>>> -# IN THE SOFTWARE.
>>> -
>>> -import getopt
>>> -import gl_XML
>>> -import license
>>> -import marshal_XML
>>> -import sys
>>> -
>>> -
>>> -header = """
>>> -#ifndef MARSHAL_GENERATABLE_H
>>> -#define MARSHAL_GENERATABLE_H
>>> -"""
>>> -
>>> -footer = """
>>> -#endif /* MARSHAL_GENERATABLE_H */
>>> -"""
>>> -
>>> -
>>> -class PrintCode(gl_XML.gl_print_base):
>>> -    def __init__(self):
>>> -        super(PrintCode, self).__init__()
>>> -
>>> -        self.name = 'gl_marshal_h.py'
>>> -        self.license = license.bsd_license_template % (
>>> -            'Copyright (C) 2012 Intel Corporation', 'INTEL CORPORATION')
>>> -
>>> -    def printRealHeader(self):
>>> -        print header
>>> -
>>> -    def printRealFooter(self):
>>> -        print footer
>>> -
>>> -    def printBody(self, api):
>>> -        print 'enum marshal_dispatch_cmd_id'
>>> -        print '{'
>>> -        for func in api.functionIterateAll():
>>> -            flavor = func.marshal_flavor()
>>> -            if flavor in ('skip', 'sync'):
>>> -                continue
>>> -            print '   DISPATCH_CMD_{0},'.format(func.name)
>>> -        print '};'
>>> -
>>> -
>>> -def show_usage():
>>> -    print 'Usage: %s [-f input_file_name]' % sys.argv[0]
>>> -    sys.exit(1)
>>> -
>>> -
>>> -if __name__ == '__main__':
>>> -    file_name = 'gl_API.xml'
>>> -
>>> -    try:
>>> -        (args, trail) = getopt.getopt(sys.argv[1:], 'm:f:')
>>> -    except Exception,e:
>>> -        show_usage()
>>> -
>>> -    for (arg,val) in args:
>>> -        if arg == '-f':
>>> -            file_name = val
>>> -
>>> -    printer = PrintCode()
>>> -
>>> -    api = gl_XML.parse_GL_API(file_name,
>>> marshal_XML.marshal_item_factory())
>>> -    printer.Print(api)
>>> diff --git a/src/mesa/Android.gen.mk b/src/mesa/Android.gen.mk
>>> index ee2d1de..691fb3b 100644
>>> --- a/src/mesa/Android.gen.mk
>>> +++ b/src/mesa/Android.gen.mk
>>> @@ -41,7 +41,6 @@ sources := \
>>>         main/remap_helper.h \
>>>         main/get_hash.h \
>>>         main/marshal_generated.c \
>>> -       main/marshal_generated.h
>>>     LOCAL_SRC_FILES := $(filter-out $(sources), $(LOCAL_SRC_FILES))
>>>   @@ -110,12 +109,6 @@ $(intermediates)/main/marshal_generated.c:
>>> PRIVATE_XML := -f $(glapi)/gl_and_es_
>>>   $(intermediates)/main/marshal_generated.c: $(dispatch_deps)
>>>         $(call es-gen)
>>>   -$(intermediates)/main/marshal_generated.h: PRIVATE_SCRIPT :=
>>> $(MESA_PYTHON2) $(glapi)/gl_marshal_h.py
>>> -$(intermediates)/main/marshal_generated.h: PRIVATE_XML := -f
>>> $(glapi)/gl_and_es_API.xml
>>> -
>>> -$(intermediates)/main/marshal_generated.h: $(dispatch_deps)
>>> -       $(call es-gen)
>>> -
>>>   GET_HASH_GEN := $(LOCAL_PATH)/main/get_hash_generator.py
>>>     $(intermediates)/main/get_hash.h: PRIVATE_SCRIPT := $(MESA_PYTHON2)
>>> $(GET_HASH_GEN)
>>> diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources
>>> index 86fbf39..e9b1b82 100644
>>> --- a/src/mesa/Makefile.sources
>>> +++ b/src/mesa/Makefile.sources
>>> @@ -137,7 +137,6 @@ MAIN_FILES = \
>>>         main/marshal.c \
>>>         main/marshal.h \
>>>         main/marshal_generated.c \
>>> -       main/marshal_generated.h \
>>>         main/matrix.c \
>>>         main/matrix.h \
>>>         main/mipmap.c \
>>> diff --git a/src/mesa/SConscript b/src/mesa/SConscript
>>> index b63e15a..27bcb85 100644
>>> --- a/src/mesa/SConscript
>>> +++ b/src/mesa/SConscript
>>> @@ -133,14 +133,6 @@ env.CodeGenerate(
>>>       command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
>>>       )
>>>   -# The marshal_generated.h file is generated from the GL/ES API.xml
>>> file
>>> -env.CodeGenerate(
>>> -    target = 'main/marshal_generated.h',
>>> -    script = GLAPI + 'gen/gl_marshal_h.py',
>>> -    source = [GLAPI + 'gen/gl_and_es_API.xml'] + env.Glob(GLAPI +
>>> 'gen/*.xml'),
>>> -    command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
>>> -    )
>>> -
>>>   #
>>>   # Libraries
>>>   #
>>> diff --git a/src/mesa/main/.gitignore b/src/mesa/main/.gitignore
>>> index 8cc33cf..31dae60 100644
>>> --- a/src/mesa/main/.gitignore
>>> +++ b/src/mesa/main/.gitignore
>>> @@ -10,4 +10,3 @@ format_info.c
>>>   format_pack.c
>>>   format_unpack.c
>>>   marshal_generated.c
>>> -marshal_generated.h
>>> diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c
>>> index c71c037..8c7a8e0 100644
>>> --- a/src/mesa/main/glthread.c
>>> +++ b/src/mesa/main/glthread.c
>>> @@ -35,10 +35,15 @@
>>>   #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"
>>>   +static size_t glthread_unmarshal_cmd(struct gl_context *ctx, const
>>> void *cmd)
>>> +{
>>> +    const struct marshal_cmd_base *cmd_base = (struct marshal_cmd_base
>>> *)cmd;
>>> +    cmd_base->cmd_func(ctx, cmd);
>>> +    return cmd_base->cmd_size;
>>> +}
>>>     static void
>>>   glthread_unmarshal_batch(void *job, int thread_index)
>>> @@ -50,7 +55,7 @@ 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]);
>>> +      pos += glthread_unmarshal_cmd(ctx, &batch->buffer[pos]);
>>>        assert(pos == batch->used);
>>>      batch->used = 0;
>>> diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h
>>> index 306246c..07bccba 100644
>>> --- a/src/mesa/main/glthread.h
>>> +++ b/src/mesa/main/glthread.h
>>> @@ -49,8 +49,6 @@
>>>   #include <stdbool.h>
>>>   #include "util/u_queue.h"
>>>   -enum marshal_dispatch_cmd_id;
>>> -
>>>   /** A single batch of commands queued up for execution. */
>>>   struct glthread_batch
>>>   {
>>> diff --git a/src/mesa/main/marshal.c b/src/mesa/main/marshal.c
>>> index 8db4531..6c5c687 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
>>>   {
>>> @@ -52,7 +51,7 @@ _mesa_marshal_Flush(void)
>>>   {
>>>      GET_CURRENT_CONTEXT(ctx);
>>>      struct marshal_cmd_Flush *cmd =
>>> -      _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_Flush,
>>> +      _mesa_glthread_allocate_command(ctx,
>>> (unmarshal_func)_mesa_unmarshal_Flush,
>>>                                         sizeof(struct
>>> marshal_cmd_Flush));
>>>      (void) cmd;
>>>      _mesa_post_marshal_hook(ctx);
>>> @@ -91,7 +90,7 @@ _mesa_marshal_Enable(GLenum cap)
>>>         _mesa_glthread_finish(ctx);
>>>         _mesa_glthread_restore_dispatch(ctx);
>>>      } else {
>>> -      cmd = _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_Enable,
>>> +      cmd = _mesa_glthread_allocate_command(ctx,
>>> (unmarshal_func)_mesa_unmarshal_Enable,
>>>                                               sizeof(*cmd));
>>>         cmd->cap = cap;
>>>         _mesa_post_marshal_hook(ctx);
>>> @@ -172,7 +171,7 @@ _mesa_marshal_ShaderSource(GLuint shader, GLsizei
>>> count,
>>>        if (total_cmd_size <= MARSHAL_MAX_CMD_SIZE) {
>>>         struct marshal_cmd_ShaderSource *cmd =
>>> -         _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_ShaderSource,
>>> +         _mesa_glthread_allocate_command(ctx,
>>> (unmarshal_func)_mesa_unmarshal_ShaderSource,
>>>                                            total_cmd_size);
>>>         GLint *cmd_length = (GLint *) (cmd + 1);
>>>         GLchar *cmd_strings = (GLchar *) (cmd_length + count);
>>> @@ -277,7 +276,7 @@ _mesa_marshal_BindBuffer(GLenum target, GLuint
>>> buffer)
>>>      track_vbo_binding(ctx, target, buffer);
>>>        if (cmd_size <= MARSHAL_MAX_CMD_SIZE) {
>>> -      cmd = _mesa_glthread_allocate_command(ctx,
>>> DISPATCH_CMD_BindBuffer,
>>> +      cmd = _mesa_glthread_allocate_command(ctx,
>>> (unmarshal_func)_mesa_unmarshal_BindBuffer,
>>>                                               cmd_size);
>>>         cmd->target = target;
>>>         cmd->buffer = buffer;
>>> @@ -334,7 +333,7 @@ _mesa_marshal_BufferData(GLenum target, GLsizeiptr
>>> size, const GLvoid * data,
>>>      if (target != GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD &&
>>>          cmd_size <= MARSHAL_MAX_CMD_SIZE) {
>>>         struct marshal_cmd_BufferData *cmd =
>>> -         _mesa_glthread_allocate_command(ctx, DISPATCH_CMD_BufferData,
>>> +         _mesa_glthread_allocate_command(ctx,
>>> (unmarshal_func)_mesa_unmarshal_BufferData,
>>>                                            cmd_size);
>>>           cmd->target = target;
>>> @@ -393,7 +392,7 @@ _mesa_marshal_BufferSubData(GLenum target, GLintptr
>>> offset, GLsizeiptr size,
>>>      if (target != GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD &&
>>>          cmd_size <= MARSHAL_MAX_CMD_SIZE) {
>>>         struct marshal_cmd_BufferSubData *cmd =
>>> -         _mesa_glthread_allocate_command(ctx,
>>> DISPATCH_CMD_BufferSubData,
>>> +         _mesa_glthread_allocate_command(ctx,
>>> (unmarshal_func)_mesa_unmarshal_BufferSubData,
>>>                                            cmd_size);
>>>         cmd->target = target;
>>>         cmd->offset = offset;
>>> @@ -447,7 +446,7 @@ _mesa_marshal_NamedBufferData(GLuint buffer,
>>> GLsizeiptr size,
>>>        if (buffer > 0 && cmd_size <= MARSHAL_MAX_CMD_SIZE) {
>>>         struct marshal_cmd_NamedBufferData *cmd =
>>> -         _mesa_glthread_allocate_command(ctx,
>>> DISPATCH_CMD_NamedBufferData,
>>> +         _mesa_glthread_allocate_command(ctx,
>>> (unmarshal_func)_mesa_unmarshal_NamedBufferData,
>>>                                            cmd_size);
>>>         cmd->name = buffer;
>>>         cmd->size = size;
>>> @@ -501,7 +500,7 @@ _mesa_marshal_NamedBufferSubData(GLuint buffer,
>>> GLintptr offset,
>>>        if (buffer > 0 && cmd_size <= MARSHAL_MAX_CMD_SIZE) {
>>>         struct marshal_cmd_NamedBufferSubData *cmd =
>>> -         _mesa_glthread_allocate_command(ctx,
>>> DISPATCH_CMD_NamedBufferSubData,
>>> +         _mesa_glthread_allocate_command(ctx,
>>> (unmarshal_func)_mesa_unmarshal_NamedBufferSubData,
>>>                                            cmd_size);
>>>         cmd->name = buffer;
>>>         cmd->offset = offset;
>>> @@ -569,7 +568,7 @@ _mesa_marshal_ClearBufferfv(GLenum buffer, GLint
>>> drawbuffer,
>>>      size_t cmd_size = sizeof(struct marshal_cmd_ClearBufferfv) + size;
>>>      if (cmd_size <= MARSHAL_MAX_CMD_SIZE) {
>>>         struct marshal_cmd_ClearBufferfv *cmd =
>>> -         _mesa_glthread_allocate_command(ctx,
>>> DISPATCH_CMD_ClearBufferfv,
>>> +         _mesa_glthread_allocate_command(ctx,
>>> (unmarshal_func)_mesa_unmarshal_ClearBufferfv,
>>>                                            cmd_size);
>>>         cmd->buffer = buffer;
>>>         cmd->drawbuffer = drawbuffer;
>>> diff --git a/src/mesa/main/marshal.h b/src/mesa/main/marshal.h
>>> index 999c75e..02893f8 100644
>>> --- a/src/mesa/main/marshal.h
>>> +++ b/src/mesa/main/marshal.h
>>> @@ -34,12 +34,15 @@
>>>   #include "main/context.h"
>>>   #include "main/macros.h"
>>>   +
>>> +typedef void (*unmarshal_func)(struct gl_context *ctx, const void
>>> *data);
>>> +
>>>   struct marshal_cmd_base
>>>   {
>>>      /**
>>> -    * Type of command.  See enum marshal_dispatch_cmd_id.
>>> +    * Pointer to unmarshalling function.
>>>       */
>>> -   uint16_t cmd_id;
>>> +   unmarshal_func cmd_func;
>>>        /**
>>>       * Size of command, in multiples of 4 bytes, including cmd_base.
>>> @@ -49,7 +52,7 @@ struct marshal_cmd_base
>>>     static inline void *
>>>   _mesa_glthread_allocate_command(struct gl_context *ctx,
>>> -                                uint16_t cmd_id,
>>> +                                unmarshal_func func,
>>>                                   size_t size)
>>>   {
>>>      struct glthread_state *glthread = ctx->GLThread;
>>> @@ -64,7 +67,7 @@ _mesa_glthread_allocate_command(struct gl_context *ctx,
>>>        cmd_base = (struct marshal_cmd_base *)&next->buffer[next->used];
>>>      next->used += aligned_size;
>>> -   cmd_base->cmd_id = cmd_id;
>>> +   cmd_base->cmd_func = func;
>>>      cmd_base->cmd_size = aligned_size;
>>>      return cmd_base;
>>>   }
>>> @@ -136,9 +139,6 @@ debug_print_unmarshal(const char *func)
>>>   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)
>>>   {
>>>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list