mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 17:48:10 +02:00
mesa: fix display list corner case assertion
This fixes a failed assertion in glDeleteLists() for the following
case:
list = glGenLists(1);
glDeleteLists(list, 1);
when those are the first display list commands issued by the
application.
When we generate display lists, we plug in empty lists created with
the make_list() helper. This function uses the OPCODE_END_OF_LIST
opcode but does not call dlist_alloc() which would set the
InstSize[OPCODE_END_OF_LIST] element to non-zero.
When the empty list was deleted, we failed the InstSize[opcode] > 0
assertion.
Typically, display lists are created with glNewList/glEndList so we
set InstSize[OPCODE_END_OF_LIST] = 1 in dlist_alloc(). That's why
this bug wasn't found before.
To fix this failure, simply initialize the InstSize[OPCODE_END_OF_LIST]
element in make_list().
The game oolite was hitting this.
Fixes: https://github.com/OoliteProject/oolite/issues/325
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
(cherry picked from commit 6dabcb5bcf)
This commit is contained in:
parent
62d457eee1
commit
f3454823d1
1 changed files with 2 additions and 0 deletions
|
|
@ -962,6 +962,8 @@ make_list(GLuint name, GLuint count)
|
|||
dlist->Name = name;
|
||||
dlist->Head = malloc(sizeof(Node) * count);
|
||||
dlist->Head[0].opcode = OPCODE_END_OF_LIST;
|
||||
/* All InstSize[] entries must be non-zero */
|
||||
InstSize[OPCODE_END_OF_LIST] = 1;
|
||||
return dlist;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue