mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
i965: Fix software primitive restart with indirect draws.
new_prim was declared as a stack variable within a nested scope; we tried to retain a pointer to that data beyond the scope, which is bogus. GCC with -O1 eliminated most of the code that set new_prim's fields. Move the declaration to fix the bug. v2: Also fix new_ib (thanks to Matt Turner and Ben Widawsky). Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=81025 Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Ben Widawsky <ben@bwidawsk.net> Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
parent
f55ded764c
commit
406df68736
1 changed files with 4 additions and 2 deletions
|
|
@ -167,6 +167,8 @@ vbo_sw_primitive_restart(struct gl_context *ctx,
|
|||
struct gl_buffer_object *indirect)
|
||||
{
|
||||
GLuint prim_num;
|
||||
struct _mesa_prim new_prim;
|
||||
struct _mesa_index_buffer new_ib;
|
||||
struct sub_primitive *sub_prims;
|
||||
struct sub_primitive *sub_prim;
|
||||
GLuint num_sub_prims;
|
||||
|
|
@ -182,8 +184,6 @@ vbo_sw_primitive_restart(struct gl_context *ctx,
|
|||
|
||||
/* If there is an indirect buffer, map it and extract the draw params */
|
||||
if (indirect && prims[0].is_indirect) {
|
||||
struct _mesa_prim new_prim = *prims;
|
||||
struct _mesa_index_buffer new_ib = *ib;
|
||||
const uint32_t *indirect_params;
|
||||
if (!ctx->Driver.MapBufferRange(ctx, 0, indirect->Size, GL_MAP_READ_BIT,
|
||||
indirect, MAP_INTERNAL)) {
|
||||
|
|
@ -195,6 +195,7 @@ vbo_sw_primitive_restart(struct gl_context *ctx,
|
|||
}
|
||||
|
||||
assert(nr_prims == 1);
|
||||
new_prim = prims[0];
|
||||
indirect_params = (const uint32_t *)
|
||||
ADD_POINTERS(indirect->Mappings[MAP_INTERNAL].Pointer,
|
||||
new_prim.indirect_offset);
|
||||
|
|
@ -206,6 +207,7 @@ vbo_sw_primitive_restart(struct gl_context *ctx,
|
|||
new_prim.basevertex = indirect_params[3];
|
||||
new_prim.base_instance = indirect_params[4];
|
||||
|
||||
new_ib = *ib;
|
||||
new_ib.count = new_prim.count;
|
||||
|
||||
prims = &new_prim;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue