[Mesa-dev] [PATCH 13/25] mesa: Connect the generated GL command marshalling code to the build.

Timothy Arceri tarceri at itsqueeze.com
Sun Mar 12 07:04:16 UTC 2017


On 10/03/17 21:51, Marek Olšák wrote:
> BTW I don't think that supporting GL compat contexts is worth it.

I'm happy to drop all the compat patches from this series. On the other 
hand they are already done and since we are going to be white listing 
maybe its won't hurt to leave it in?

>
> Marek
>
> On Tue, Mar 7, 2017 at 7:21 AM, Timothy Arceri <tarceri at itsqueeze.com> wrote:
>> From: Eric Anholt <eric at anholt.net>
>>
>> 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.
>> ---
>>  src/mesa/Makefile.sources |  2 ++
>>  src/mesa/main/glthread.c  | 15 +++++++++++++++
>>  2 files changed, 17 insertions(+)
>>
>> diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources
>> index b2d0783..134d5e9 100644
>> --- a/src/mesa/Makefile.sources
>> +++ b/src/mesa/Makefile.sources
>> @@ -125,20 +125,22 @@ MAIN_FILES = \
>>         main/histogram.h \
>>         main/image.c \
>>         main/image.h \
>>         main/imports.c \
>>         main/imports.h \
>>         main/light.c \
>>         main/light.h \
>>         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 \
>>         main/mipmap.h \
>>         main/mm.c \
>>         main/mm.h \
>>         main/mtypes.h \
>>         main/multisample.c \
>>         main/multisample.h \
>>         main/objectlabel.c \
>> diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c
>> index 8877a69..c4d1031 100644
>> --- a/src/mesa/main/glthread.c
>> +++ b/src/mesa/main/glthread.c
>> @@ -47,22 +47,29 @@ glthread_allocate_batch(struct gl_context *ctx)
>>     /* TODO: handle memory allocation failure. */
>>     glthread->batch = calloc(1, sizeof(*glthread->batch));
>>     if (!glthread->batch)
>>        return;
>>     glthread->batch->buffer = malloc(MARSHAL_MAX_CMD_SIZE);
>>  }
>>
>>  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);
>>  }
>>
>>  static void *
>>  glthread_worker(void *data)
>>  {
>>     struct gl_context *ctx = data;
>>     struct glthread_state *glthread = ctx->GLThread;
>>
>> @@ -105,20 +112,28 @@ glthread_worker(void *data)
>>  }
>>
>>  void
>>  _mesa_glthread_init(struct gl_context *ctx)
>>  {
>>     struct glthread_state *glthread = calloc(1, sizeof(*glthread));
>>
>>     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);
>>
>>     glthread->batch_queue_tail = &glthread->batch_queue;
>>     ctx->GLThread = glthread;
>>
>>     glthread_allocate_batch(ctx);
>>
>>     pthread_create(&glthread->thread, NULL, glthread_worker, ctx);
>> --
>> 2.9.3
>>
>> _______________________________________________
>> 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