From 9cc783022a202a1d00b5dc8eaf01ffddbc9fa39f Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 14 Oct 2026 00:03:37 -0500 Subject: Stop Apple OpenGL from waiting on a null fence (#34) glFinish and glWaitSync both crash in GLDFenceRec::getStatus when the fence record is null. On Apple, flush texture uploads instead and do not call glFinish before deleting buffers. --- indra/llrender/llvertexbuffer.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'indra/llrender/llvertexbuffer.cpp') diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index a827927809..6a885d2a09 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -317,14 +317,13 @@ static void delete_buffers(S32 count, GLuint* buffers) { if (gGLManager.mIsApple) { - // Apple's GL/Metal translator crashes in GLDFenceRec::getStatus - // (null fence, fault at +0x24) when glDeleteBuffers waits on a - // sync that was never created. Unbind and finish first. + // Unbind, then delete one name at a time. Do not glFinish(): + // that drains a queued glWaitSync and faults in + // GLDFenceRec::getStatus when Apple's fence record is null. glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); LLVertexBuffer::sGLRenderBuffer = 0; LLVertexBuffer::sGLRenderIndices = 0; - glFinish(); for (GLuint name : sFreeList[idx]) { if (name) -- cgit v1.3