Module: Mesa
Branch: main
Commit: 797b8391110fba4114de9f946f912238a6cf568b
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=797b8391110fba4114de9f946f912238a6cf568b

Author: Marek Olšák <[email protected]>
Date:   Sun Dec 18 16:44:48 2022 -0500

glthread: disallow glthread if buffer uploads are unsupported

to remove fail paths that defeat the purpose of glthread.

Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20824>

---

 src/mesa/main/consts_exts.h            |  6 ------
 src/mesa/main/glthread.c               | 10 +++++-----
 src/mesa/main/glthread.h               |  3 ---
 src/mesa/main/glthread_bufferobj.c     |  5 +----
 src/mesa/main/glthread_draw.c          | 15 ++-------------
 src/mesa/state_tracker/st_extensions.c |  3 ---
 6 files changed, 8 insertions(+), 34 deletions(-)

diff --git a/src/mesa/main/consts_exts.h b/src/mesa/main/consts_exts.h
index e7be7f21be5..33e6d7ec9d9 100644
--- a/src/mesa/main/consts_exts.h
+++ b/src/mesa/main/consts_exts.h
@@ -923,12 +923,6 @@ struct gl_constants
    /** When drivers are OK with mapped buffers during draw and other calls. */
    bool AllowMappedBuffersDuringExecution;
 
-   /**
-    * Whether buffer creation, unsynchronized mapping, unmapping, and
-    * deletion is thread-safe.
-    */
-   bool BufferCreateMapUnsynchronizedThreadSafe;
-
    /** Override GL_MAP_UNSYNCHRONIZED_BIT */
    bool ForceMapBufferSynchronized;
 
diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c
index af9da31e106..680fc1a154c 100644
--- a/src/mesa/main/glthread.c
+++ b/src/mesa/main/glthread.c
@@ -107,10 +107,14 @@ _mesa_glthread_init_dispatch(struct gl_context *ctx,
 void
 _mesa_glthread_init(struct gl_context *ctx)
 {
+   struct pipe_screen *screen = ctx->screen;
    struct glthread_state *glthread = &ctx->GLThread;
-
    assert(!glthread->enabled);
 
+   if (!screen->get_param(screen, PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE) ||
+       !screen->get_param(screen, 
PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION))
+      return;
+
    if (!util_queue_init(&glthread->queue, "gl", MARSHAL_MAX_BATCHES - 2,
                         1, 0, NULL)) {
       return;
@@ -144,10 +148,6 @@ _mesa_glthread_init(struct gl_context *ctx)
    glthread->enabled = true;
    glthread->stats.queue = &glthread->queue;
 
-   glthread->SupportsBufferUploads =
-      ctx->Const.BufferCreateMapUnsynchronizedThreadSafe &&
-      ctx->Const.AllowMappedBuffersDuringExecution;
-
    ctx->CurrentClientDispatch = ctx->MarshalExec;
 
    glthread->LastDListChangeBatchIndex = -1;
diff --git a/src/mesa/main/glthread.h b/src/mesa/main/glthread.h
index 23cfce82806..d752ca9ef7a 100644
--- a/src/mesa/main/glthread.h
+++ b/src/mesa/main/glthread.h
@@ -204,9 +204,6 @@ struct glthread_state
    unsigned upload_offset;
    int upload_buffer_private_refcount;
 
-   /** Caps. */
-   GLboolean SupportsBufferUploads;
-
    /** Primitive restart state. */
    bool PrimitiveRestart;
    bool PrimitiveRestartFixedIndex;
diff --git a/src/mesa/main/glthread_bufferobj.c 
b/src/mesa/main/glthread_bufferobj.c
index 00d79942720..34e6ce5a907 100644
--- a/src/mesa/main/glthread_bufferobj.c
+++ b/src/mesa/main/glthread_bufferobj.c
@@ -32,8 +32,6 @@
 static struct gl_buffer_object *
 new_upload_buffer(struct gl_context *ctx, GLsizeiptr size, uint8_t **ptr)
 {
-   assert(ctx->GLThread.SupportsBufferUploads);
-
    struct gl_buffer_object *obj =
       _mesa_bufferobj_alloc(ctx, -1);
    if (!obj)
@@ -506,8 +504,7 @@ _mesa_marshal_BufferSubData_merged(GLuint target_or_name, 
GLintptr offset,
     *       If offset == 0 and size == buffer_size, it's better to discard
     *       the buffer storage, but we don't know the buffer size in glthread.
     */
-   if (ctx->GLThread.SupportsBufferUploads &&
-       ctx->Const.AllowGLThreadBufferSubDataOpt &&
+   if (ctx->Const.AllowGLThreadBufferSubDataOpt &&
        data && offset > 0 && size > 0) {
       struct gl_buffer_object *upload_buffer = NULL;
       unsigned upload_offset = 0;
diff --git a/src/mesa/main/glthread_draw.c b/src/mesa/main/glthread_draw.c
index 006663a9ca6..30ecb504854 100644
--- a/src/mesa/main/glthread_draw.c
+++ b/src/mesa/main/glthread_draw.c
@@ -455,13 +455,6 @@ draw_arrays(GLenum mode, GLint first, GLsizei count, 
GLsizei instance_count,
 
    /* Upload and draw. */
    struct glthread_attrib_binding buffers[VERT_ATTRIB_MAX];
-   if (!ctx->GLThread.SupportsBufferUploads) {
-      _mesa_glthread_finish_before(ctx, "DrawArrays");
-      CALL_DrawArraysInstancedBaseInstance(ctx->CurrentServerDispatch,
-                                           (mode, first, count, instance_count,
-                                            baseinstance));
-      return;
-   }
 
    if (!upload_vertices(ctx, user_buffer_mask, first, count, baseinstance,
                         instance_count, buffers))
@@ -572,8 +565,7 @@ _mesa_marshal_MultiDrawArrays(GLenum mode, const GLint 
*first,
    assert(draw_count > 0);
 
    /* If the draw count is too high, the queue can't be used. */
-   if (!ctx->GLThread.SupportsBufferUploads ||
-       draw_count > MARSHAL_MAX_CMD_SIZE / 16)
+   if (draw_count > MARSHAL_MAX_CMD_SIZE / 16)
       goto sync;
 
    unsigned min_index = ~0;
@@ -927,9 +919,6 @@ draw_elements(GLenum mode, GLsizei count, GLenum type, 
const GLvoid *indices,
       return;
    }
 
-   if (!ctx->GLThread.SupportsBufferUploads)
-      goto sync;
-
    bool need_index_bounds = user_buffer_mask & ~vao->NonZeroDivisorMask;
    unsigned index_size = get_index_size(type);
 
@@ -1179,7 +1168,7 @@ _mesa_marshal_MultiDrawElementsBaseVertex(GLenum mode, 
const GLsizei *count,
    bool need_index_bounds = user_buffer_mask & ~vao->NonZeroDivisorMask;
 
    /* If the draw count is negative, the queue can't be used. */
-   if (!ctx->GLThread.SupportsBufferUploads || draw_count < 0)
+   if (draw_count < 0)
       goto sync;
 
    unsigned index_size = get_index_size(type);
diff --git a/src/mesa/state_tracker/st_extensions.c 
b/src/mesa/state_tracker/st_extensions.c
index d232a4764c5..2a8b3700cbc 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -587,9 +587,6 @@ void st_init_limits(struct pipe_screen *screen,
    c->AllowMappedBuffersDuringExecution =
       screen->get_param(screen, 
PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION);
 
-   c->BufferCreateMapUnsynchronizedThreadSafe =
-      screen->get_param(screen, PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE);
-
    c->UseSTD430AsDefaultPacking =
       screen->get_param(screen, PIPE_CAP_LOAD_CONSTBUF);
 

Reply via email to