2 Replies Latest reply on Nov 29, 2011 1:37 PM by corecode

    ATI Catalyst glLineWidth Crash

    techraven
      Crash/Heap Corruption in ATI Catalyst from 10.6 through at least 11.9 (latest driver)

      The code below should reproduce it if you create a FSAA databuffer.

      GdiFlush(); wglMakeCurrent(hDC, hGLRC); // This loop will crash on the second pass through if glLineWidth > 2, FSAA is enabled and a clip plane is enabled for(int q = 0; q < 3; ++q) { glClearColor(1, 0, 0, 1); glClearColor(1, 1, 1, 1); glClear (GL_COLOR_BUFFER_BIT | GL_ACCUM_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); double y = 2, x = 2, z = 2; double cubePlanes[8][4] = { { 0, 1, 0, y/2 } // Top , { 0, -1, 0, y/2 } // Bottom , { 1, 0, 0, x/2 } // Left , { -1, 0, 0, x/2 } // Right , { 0, 0, 1, z/2 } // Front , { 0, 0, -1, z/2 } // Back } ; for(int i = 0; i < 8; ++i) { glEnable (GL_CLIP_PLANE0+i); glClipPlane(GL_CLIP_PLANE0+i, cubePlanes[i]); } const int NLines = 100; double LinePts[NLines*3]; srand(0); glLineWidth(3); // !!! If this is anything 2 or less it _WILL NOT CRASH__ glDisable(GL_LIGHTING); for(int i = 0; i < (NLines*3); i += 3) { LinePts[i+0] = rand()/(double)RAND_MAX; LinePts[i+1] = rand()/(double)RAND_MAX; LinePts[i+2] = rand()/(double)RAND_MAX; } glBegin(GL_LINE_STRIP); for(size_t i = 0; i < (NLines*3); ++i) glVertex3d(LinePts[i+0], LinePts[i+1], LinePts[i+2]); glEnd(); glFlush(); SwapBuffers(hDC); } Call Stack On Heap Corruption Report: HEAP[XXXXXXXX.exe]: Heap block at 0E0C2E30 modified at 0E0C2E4B past requested size of 13 0x0E0C2E30 08 0d 13 20 b9 d6 12 1d 67 6c 5f 43 6c 69 70 44 69 73 74 61 ... .Ö..gl_ClipDista 0x0E0C2E44 6e 63 65 5b 2d 32 30 5d 00 ab ab ab ab ab ab fe ee fe ee fe nce[-20].««««««þîþîþ > ntdll.dll!_RtlpBreakPointHeap@4() + 0x23 bytes ntdll.dll!_RtlpCheckBusyBlockTail@8() + 0x170 bytes ntdll.dll!_RtlpValidateHeapEntry@12() + 0x45d79 bytes ntdll.dll!_RtlDebugFreeHeap@12() + 0x9a bytes ntdll.dll!@RtlpFreeHeap@16() + 0x576be bytes ntdll.dll!_RtlFreeHeap@12() + 0x54ed bytes kernel32.dll!_HeapFree@12() + 0x14 bytes atioglxx.dll!69e6e80f() [Frames below may be incorrect and/or missing, no symbols loaded for atioglxx.dll] atioglxx.dll!69e02d94() Pixel Buffer Format: pixelDesc {nSize=40 nVersion=1 dwFlags=33797 ...} tagPIXELFORMATDESCRIPTOR nSize 40 unsigned short nVersion 1 unsigned short dwFlags 33797 unsigned long iPixelType 0 unsigned char cColorBits 32 ' ' unsigned char cRedBits 8 ' ' unsigned char cRedShift 16 ' ' unsigned char cGreenBits 8 ' ' unsigned char cGreenShift 8 ' ' unsigned char cBlueBits 8 ' ' unsigned char cBlueShift 0 unsigned char cAlphaBits 8 ' ' unsigned char cAlphaShift 24 ' ' unsigned char cAccumBits 0 unsigned char cAccumRedBits 0 unsigned char cAccumGreenBits 0 unsigned char cAccumBlueBits 0 unsigned char cAccumAlphaBits 0 unsigned char cDepthBits 24 ' ' unsigned char cStencilBits 8 ' ' unsigned char cAuxBuffers 0 unsigned char iLayerType 0 unsigned char bReserved 0 unsigned char dwLayerMask 0 unsigned long dwVisibleMask 0 unsigned long dwDamageMask 0 unsigned long