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 <tarc...@itsqueeze.com> wrote:
From: Eric Anholt <e...@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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev