mesa: don't unroll glMultiDrawElements with user indices for gallium
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@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>
This commit is contained in:
@@ -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;
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user