Commit fb477cc4 authored by Marek Olšák's avatar Marek Olšák Committed by Marge Bot

mesa: don't unroll glMultiDrawElements with user indices for gallium

Acked-by: Pierre-Eric Pelloux-Prayer's avatarPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Tested-by: Marge Bot <!3591>
Part-of: <!3591>
parent 70298ec4
Pipeline #118715 passed with stages
in 27 minutes and 53 seconds
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment