Mesa (master): mesa: don't unroll glMultiDrawElements with user indices for gallium
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Mar 11 19:27:49 UTC 2020
Module: Mesa
Branch: master
Commit: fb477cc42186d4809b955072a1c2336d64f07944
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fb477cc42186d4809b955072a1c2336d64f07944
Author: Marek Olšák <marek.olsak at amd.com>
Date: Wed Feb 12 17:49:45 2020 -0500
mesa: don't unroll glMultiDrawElements with user indices for gallium
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3591>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3591>
---
src/mesa/main/draw.c | 18 ++++++++++++------
src/mesa/main/mtypes.h | 3 +++
src/mesa/state_tracker/st_extensions.c | 3 +++
3 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/src/mesa/main/draw.c b/src/mesa/main/draw.c
index c77bbade008..e856d9c5ef3 100644
--- a/src/mesa/main/draw.c
+++ b/src/mesa/main/draw.c
@@ -1216,12 +1216,18 @@ _mesa_validated_multidrawelements(struct gl_context *ctx, GLenum mode,
}
}
- /* If the index buffer isn't in a VBO, then treating the application's
- * subranges of the index buffer as one large index buffer may lead to
- * us reading unmapped memory.
- */
- if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj))
- fallback = GL_TRUE;
+ if (ctx->Const.MultiDrawWithUserIndices) {
+ /* Check whether prim[i].start would overflow. */
+ if (((max_index_ptr - min_index_ptr) >> ib.index_size_shift) > UINT_MAX)
+ fallback = GL_TRUE;
+ } else {
+ /* If the index buffer isn't in a VBO, then treating the application's
+ * subranges of the index buffer as one large index buffer may lead to
+ * us reading unmapped memory.
+ */
+ if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj))
+ fallback = GL_TRUE;
+ }
if (!fallback) {
struct _mesa_prim *prim;
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 7396de5b5d0..c7889668f58 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -4172,6 +4172,9 @@ struct gl_constants
/** Whether the vertex buffer offset is a signed 32-bit integer. */
bool VertexBufferOffsetIsInt32;
+ /** Whether the driver can handle MultiDrawElements with non-VBO indices. */
+ bool MultiDrawWithUserIndices;
+
/** GL_ARB_gl_spirv */
struct spirv_supported_capabilities SpirVCapabilities;
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 7b44c1b4b50..b26d3904b8f 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -569,6 +569,9 @@ void st_init_limits(struct pipe_screen *screen,
c->VertexBufferOffsetIsInt32 =
screen->get_param(screen, PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET);
+
+ c->MultiDrawWithUserIndices =
+ screen->get_param(screen, PIPE_CAP_DRAW_INFO_START_WITH_USER_INDICES);
}
More information about the mesa-commit
mailing list