<div dir="ltr"><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>></div><div><br></div><div>Marek<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Feb 25, 2019 at 5:03 PM Brian Paul <<a href="mailto:brianp@vmware.com">brianp@vmware.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">This fixes a failed assertion in glDeleteLists() for the following<br>
case:<br>
<br>
list = glGenLists(1);<br>
glDeleteLists(list, 1);<br>
<br>
when those are the first display list commands issued by the<br>
application.<br>
<br>
When we generate display lists, we plug in empty lists created with<br>
the make_list() helper.  This function uses the OPCODE_END_OF_LIST<br>
opcode but does not call dlist_alloc() which would set the<br>
InstSize[OPCODE_END_OF_LIST] element to non-zero.<br>
<br>
When the empty list was deleted, we failed the InstSize[opcode] > 0<br>
assertion.<br>
<br>
Typically, display lists are created with glNewList/glEndList so we<br>
set InstSize[OPCODE_END_OF_LIST] = 1 in dlist_alloc().  That's why<br>
this bug wasn't found before.<br>
<br>
To fix this failure, simply initialize the InstSize[OPCODE_END_OF_LIST]<br>
element in make_list().<br>
<br>
The game oolite was hitting this.<br>
<br>
Fixes: <a href="https://github.com/OoliteProject/oolite/issues/325" rel="noreferrer" target="_blank">https://github.com/OoliteProject/oolite/issues/325</a><br>
---<br>
 src/mesa/main/dlist.c | 2 ++<br>
 1 file changed, 2 insertions(+)<br>
<br>
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c<br>
index 97461ce..8dcf8bd 100644<br>
--- a/src/mesa/main/dlist.c<br>
+++ b/src/mesa/main/dlist.c<br>
@@ -962,6 +962,8 @@ make_list(GLuint name, GLuint count)<br>
    dlist->Name = name;<br>
    dlist->Head = malloc(sizeof(Node) * count);<br>
    dlist->Head[0].opcode = OPCODE_END_OF_LIST;<br>
+   /* All InstSize[] entries must be non-zero */<br>
+   InstSize[OPCODE_END_OF_LIST] = 1;<br>
    return dlist;<br>
 }<br>
<br>
-- <br>
1.8.5.6<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a></blockquote></div>