diff options
author | Marek Olšák <marek.olsak@amd.com> | 2022-12-18 16:44:48 -0500 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2023-01-20 21:34:09 -0500 |
commit | 797b8391110fba4114de9f946f912238a6cf568b (patch) | |
tree | 60b7669c339d021bad2729b86bbd157998281d0f /src | |
parent | aca09e4f71937f602b52c3ad42f2afc7fa91a8b2 (diff) |
glthread: disallow glthread if buffer uploads are unsupported
to remove fail paths that defeat the purpose of glthread.
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20824>
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/main/consts_exts.h | 6 | ||||
-rw-r--r-- | src/mesa/main/glthread.c | 10 | ||||
-rw-r--r-- | src/mesa/main/glthread.h | 3 | ||||
-rw-r--r-- | src/mesa/main/glthread_bufferobj.c | 5 | ||||
-rw-r--r-- | src/mesa/main/glthread_draw.c | 15 | ||||
-rw-r--r-- | 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); |