mesa: Connect the generated GL command marshalling code to the build.
authorEric Anholt <eric@anholt.net>
Wed, 2 Jan 2013 22:12:04 +0000 (14:12 -0800)
committerTimothy Arceri <tarceri@itsqueeze.com>
Thu, 16 Mar 2017 03:14:18 +0000 (14:14 +1100)
v2: Rebase on the Begin/End changes, and just disable this feature on
    non-GL-core.
v3: (Timothy Arceri) enable for non-GL-core contexts. Remove
    unrelated safe_mul() hunk. while loop style fix.

Acked-by: Timothy Arceri <tarceri@itsqueeze.com>
Acked-by: Marek Olšák <maraeo@gmail.com>
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
Tested-by: Mike Lothian <mike@fireburn.co.uk>
src/mesa/Makefile.sources
src/mesa/main/glthread.c

index b2d078368a40504af05f4b7bc559f5a2af5dd141..134d5e94f5233bfcac09b52f8970c8a67c71b0a9 100644 (file)
@@ -132,6 +132,8 @@ MAIN_FILES = \
        main/lines.c \
        main/lines.h \
        main/macros.h \
+       main/marshal_generated.c \
+       main/marshal_generated.h \
        main/matrix.c \
        main/matrix.h \
        main/mipmap.c \
index 8877a695f0c4c0d94b377fd1d061034adef1035a..c4d1031f4c67176f1dcd8ab4dbd47fcab2b128b5 100644 (file)
@@ -54,8 +54,15 @@ glthread_allocate_batch(struct gl_context *ctx)
 static void
 glthread_unmarshal_batch(struct gl_context *ctx, struct glthread_batch *batch)
 {
+   size_t pos = 0;
+
    _glapi_set_dispatch(ctx->CurrentServerDispatch);
 
+   while (pos < batch->used)
+      pos += _mesa_unmarshal_dispatch_cmd(ctx, &batch->buffer[pos]);
+
+   assert(pos == batch->used);
+
    free(batch->buffer);
    free(batch);
 }
@@ -112,6 +119,14 @@ _mesa_glthread_init(struct gl_context *ctx)
    if (!glthread)
       return;
 
+   ctx->MarshalExec = _mesa_create_marshal_table(ctx);
+   if (!ctx->MarshalExec) {
+      free(glthread);
+      return;
+   }
+
+   ctx->CurrentClientDispatch = ctx->MarshalExec;
+
    pthread_mutex_init(&glthread->mutex, NULL);
    pthread_cond_init(&glthread->new_work, NULL);
    pthread_cond_init(&glthread->work_done, NULL);