So then I check glxinfo to make sure that the driver wasn’t the software rasterizer:
$ glxinfo | grep -i renderer
OpenGL renderer string: Gallium 0.4 on NV36
I took a minute and tried to trace what is happening when we try to render using opengl under Mesa.
Code:
==3752== Command: ./testdraw2 --renderer opengl
==3752==
SDL_CreateWindow called
==3752== Syscall param ioctl(generic) points to uninitialised byte(s)
==3752== at 0x4CEE7829: ioctl (in /lib/libc-2.14.90.so)
==3752== by 0x42377A63: drmIoctl (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x4237A44C: drmCommandWriteRead (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x49B63C3: nouveau_device_get_param (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B64AE: nouveau_device_open_existing (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x455882C: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x42380FF3: ??? (in /usr/lib/libdrm.so.2.4.0)
==3752== Address 0xbeb507b8 is on thread 1’s stack
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x49B637D: nouveau_device_get_param (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752==
==3752== Syscall param ioctl(generic) points to uninitialised byte(s)
==3752== at 0x4CEE7829: ioctl (in /lib/libc-2.14.90.so)
==3752== by 0x42377A63: drmIoctl (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x4237A44C: drmCommandWriteRead (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x49B8079: nouveau_bo_wrap (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B69A9: nouveau_channel_alloc (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x45D6F0D: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x4565CF4: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x45588DE: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x42380FF3: ??? (in /usr/lib/libdrm.so.2.4.0)
==3752== Address 0xbeb506cc is on thread 1’s stack
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x49B7FE0: nouveau_bo_wrap (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752==
==3752== Syscall param ioctl(generic) points to uninitialised byte(s)
==3752== at 0x4CEE7829: ioctl (in /lib/libc-2.14.90.so)
==3752== by 0x42377A63: drmIoctl (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x4237A44C: drmCommandWriteRead (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x49B6CC9: nouveau_pushbuf_init (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B6A4C: nouveau_channel_alloc (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x45D6F0D: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x4565CF4: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x45588DE: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x42380FF3: ??? (in /usr/lib/libdrm.so.2.4.0)
==3752== Address 0xbeb506b4 is on thread 1’s stack
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x49B6C7F: nouveau_pushbuf_init (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752==
==3752== Syscall param ioctl(generic) points to uninitialised byte(s)
==3752== at 0x4CEE7829: ioctl (in /lib/libc-2.14.90.so)
==3752== by 0x42377A63: drmIoctl (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x4237A44C: drmCommandWriteRead (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x49B7AAD: ??? (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B7EDE: nouveau_bo_new_tile (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B7F5B: nouveau_bo_new (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B6D1A: nouveau_pushbuf_init (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B6A4C: nouveau_channel_alloc (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x45D6F0D: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x4565CF4: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x45588DE: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x42380FF3: ??? (in /usr/lib/libdrm.so.2.4.0)
==3752== Address 0xbeb505c0 is on thread 1’s stack
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x49B79FF: ??? (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752==
SDL_CreateWindow called
==3752== Syscall param writev(vector[…]) points to uninitialised byte(s)
==3752== at 0x4CEE794E: writev (in /lib/libc-2.14.90.so)
==3752== by 0x40D200D: X11_GL_GetVisual (SDL_x11opengl.c:427)
==3752== by 0x40CB4C3: XCreateWindow (SDL_x11sym.h:37)
==3752== by 0x40D4EFF: X11_CreateWindow (SDL_x11window.c:480)
==3752== by 0x40C7255: SDL_CreateWindow (SDL_video.c:1204)
==3752== by 0x804B7E5: CommonInit (common.c:730)
==3752== by 0x80497F3: main (testdraw2.c:228)
==3752== Address 0x4173bb3 is 35 bytes inside a block of size 16,384 alloc’d
==3752== at 0x4006467: calloc (vg_replace_malloc.c:467)
==3752== by 0x41C1B971: XOpenDisplay (in /usr/lib/libX11.so.6.3.0)
==3752== by 0x40CBDFB: XOpenDisplay (SDL_x11sym.h:77)
==3752== by 0x40D3EFF: X11_CreateDevice (SDL_x11video.c:162)
==3752== by 0x40C6FA6: SDL_VideoInit (SDL_video.c:457)
==3752== by 0x804B531: CommonInit (common.c:583)
==3752== by 0x4CE156B2: (below main) (in /lib/libc-2.14.90.so)
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x41C27A1F: XStoreColors (in /usr/lib/libX11.so.6.3.0)
==3752==
==3752== Syscall param writev(vector[…]) points to uninitialised byte(s)
==3752== at 0x4CEE794E: writev (in /lib/libc-2.14.90.so)
==3752== Address 0x4173bd7 is 71 bytes inside a block of size 16,384 alloc’d
==3752== at 0x4006467: calloc (vg_replace_malloc.c:467)
==3752== by 0x41C1B971: XOpenDisplay (in /usr/lib/libX11.so.6.3.0)
==3752== by 0x40CBDFB: XOpenDisplay (SDL_x11sym.h:77)
==3752== by 0x40D3EFF: X11_CreateDevice (SDL_x11video.c:162)
==3752== by 0x40C6FA6: SDL_VideoInit (SDL_video.c:457)
==3752== by 0x804B531: CommonInit (common.c:583)
==3752== by 0x4CE156B2: (below main) (in /lib/libc-2.14.90.so)
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x41C27A1F: XStoreColors (in /usr/lib/libX11.so.6.3.0)
==3752==
==3752== Syscall param writev(vector[…]) points to uninitialised byte(s)
==3752== at 0x4CEE794E: writev (in /lib/libc-2.14.90.so)
==3752== by 0x4222B9F: ???
==3752== Address 0x4173bd7 is 71 bytes inside a block of size 16,384 alloc’d
==3752== at 0x4006467: calloc (vg_replace_malloc.c:467)
==3752== by 0x41C1B971: XOpenDisplay (in /usr/lib/libX11.so.6.3.0)
==3752== by 0x40CBDFB: XOpenDisplay (SDL_x11sym.h:77)
==3752== by 0x40D3EFF: X11_CreateDevice (SDL_x11video.c:162)
==3752== by 0x40C6FA6: SDL_VideoInit (SDL_video.c:457)
==3752== by 0x804B531: CommonInit (common.c:583)
==3752== by 0x4CE156B2: (below main) (in /lib/libc-2.14.90.so)
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x41C27A1F: XStoreColors (in /usr/lib/libX11.so.6.3.0)
==3752==
==3752== Syscall param writev(vector[…]) points to uninitialised byte(s)
==3752== at 0x4CEE794E: writev (in /lib/libc-2.14.90.so)
==3752== by 0x5: ???
==3752== Address 0x4173bb3 is 35 bytes inside a block of size 16,384 alloc’d
==3752== at 0x4006467: calloc (vg_replace_malloc.c:467)
==3752== by 0x41C1B971: XOpenDisplay (in /usr/lib/libX11.so.6.3.0)
==3752== by 0x40CBDFB: XOpenDisplay (SDL_x11sym.h:77)
==3752== by 0x40D3EFF: X11_CreateDevice (SDL_x11video.c:162)
==3752== by 0x40C6FA6: SDL_VideoInit (SDL_video.c:457)
==3752== by 0x804B531: CommonInit (common.c:583)
==3752== by 0x4CE156B2: (below main) (in /lib/libc-2.14.90.so)
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x41C27A1F: XStoreColors (in /usr/lib/libX11.so.6.3.0)
==3752==
==3752== Syscall param writev(vector[…]) points to uninitialised byte(s)
==3752== at 0x4CEE794E: writev (in /lib/libc-2.14.90.so)
==3752== by 0x422739F: ???
==3752== Address 0x4173bd7 is 71 bytes inside a block of size 16,384 alloc’d
==3752== at 0x4006467: calloc (vg_replace_malloc.c:467)
==3752== by 0x41C1B971: XOpenDisplay (in /usr/lib/libX11.so.6.3.0)
==3752== by 0x40CBDFB: XOpenDisplay (SDL_x11sym.h:77)
==3752== by 0x40D3EFF: X11_CreateDevice (SDL_x11video.c:162)
==3752== by 0x40C6FA6: SDL_VideoInit (SDL_video.c:457)
==3752== by 0x804B531: CommonInit (common.c:583)
==3752== by 0x4CE156B2: (below main) (in /lib/libc-2.14.90.so)
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x41C27A1F: XStoreColors (in /usr/lib/libX11.so.6.3.0)
==3752==
Couldn’t create renderer:
==3752==
==3752== HEAP SUMMARY:
==3752== in use at exit: 233,606 bytes in 831 blocks
==3752== total heap usage: 6,147 allocs, 5,316 frees, 670,782 bytes allocated
==3752==
==3752== LEAK SUMMARY:
==3752== definitely lost: 420 bytes in 7 blocks
==3752== indirectly lost: 101,255 bytes in 147 blocks
==3752== possibly lost: 0 bytes in 0 blocks
==3752== still reachable: 131,931 bytes in 677 blocks
==3752== suppressed: 0 bytes in 0 blocks
==3752== Rerun with --leak-check=full to see details of leaked memory
==3752==
==3752== For counts of detected and suppressed errors, rerun with: -v
==3752== ERROR SUMMARY: 16 errors from 9 contexts (suppressed: 0 from 0)
And it looks like SDL keeps calling the same code over and over until it fails.
Can you do --track-origin=yes so we can see where the uninit’d values came
from?On Tue, May 15, 2012 at 10:27 AM, greno wrote:
**
I took a minute and tried to trace what is happening when we try to render
using opengl under Mesa.
Code:
==3752== Command: ./testdraw2 --renderer opengl
==3752==
SDL_CreateWindow called
==3752== Syscall param ioctl(generic) points to uninitialised byte(s)
==3752== at 0x4CEE7829: ioctl (in /lib/libc-2.14.90.so)
==3752== by 0x42377A63: drmIoctl (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x4237A44C: drmCommandWriteRead (in
/usr/lib/libdrm.so.2.4.0)
==3752== by 0x49B63C3: nouveau_device_get_param (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B64AE: nouveau_device_open_existing (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x455882C: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x42380FF3: ??? (in /usr/lib/libdrm.so.2.4.0)
==3752== Address 0xbeb507b8 is on thread 1’s stack
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x49B637D: nouveau_device_get_param (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752==
==3752== Syscall param ioctl(generic) points to uninitialised byte(s)
==3752== at 0x4CEE7829: ioctl (in /lib/libc-2.14.90.so)
==3752== by 0x42377A63: drmIoctl (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x4237A44C: drmCommandWriteRead (in
/usr/lib/libdrm.so.2.4.0)
==3752== by 0x49B8079: nouveau_bo_wrap (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B69A9: nouveau_channel_alloc (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x45D6F0D: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x4565CF4: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x45588DE: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x42380FF3: ??? (in /usr/lib/libdrm.so.2.4.0)
==3752== Address 0xbeb506cc is on thread 1’s stack
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x49B7FE0: nouveau_bo_wrap (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752==
==3752== Syscall param ioctl(generic) points to uninitialised byte(s)
==3752== at 0x4CEE7829: ioctl (in /lib/libc-2.14.90.so)
==3752== by 0x42377A63: drmIoctl (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x4237A44C: drmCommandWriteRead (in
/usr/lib/libdrm.so.2.4.0)
==3752== by 0x49B6CC9: nouveau_pushbuf_init (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B6A4C: nouveau_channel_alloc (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x45D6F0D: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x4565CF4: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x45588DE: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x42380FF3: ??? (in /usr/lib/libdrm.so.2.4.0)
==3752== Address 0xbeb506b4 is on thread 1’s stack
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x49B6C7F: nouveau_pushbuf_init (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752==
==3752== Syscall param ioctl(generic) points to uninitialised byte(s)
==3752== at 0x4CEE7829: ioctl (in /lib/libc-2.14.90.so)
==3752== by 0x42377A63: drmIoctl (in /usr/lib/libdrm.so.2.4.0)
==3752== by 0x4237A44C: drmCommandWriteRead (in
/usr/lib/libdrm.so.2.4.0)
==3752== by 0x49B7AAD: ??? (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B7EDE: nouveau_bo_new_tile (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B7F5B: nouveau_bo_new (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B6D1A: nouveau_pushbuf_init (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x49B6A4C: nouveau_channel_alloc (in
/usr/lib/libdrm_nouveau.so.1.0.0)
==3752== by 0x45D6F0D: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x4565CF4: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x45588DE: ??? (in /usr/lib/dri/nouveau_dri.so)
==3752== by 0x42380FF3: ??? (in /usr/lib/libdrm.so.2.4.0)
==3752== Address 0xbeb505c0 is on thread 1’s stack
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x49B79FF: ??? (in /usr/lib/libdrm_nouveau.so.1.0.0)
==3752==
SDL_CreateWindow called
==3752== Syscall param writev(vector[…]) points to uninitialised byte(s)
==3752== at 0x4CEE794E: writev (in /lib/libc-2.14.90.so)
==3752== by 0x40D200D: X11_GL_GetVisual (SDL_x11opengl.c:427)
==3752== by 0x40CB4C3: XCreateWindow (SDL_x11sym.h:37)
==3752== by 0x40D4EFF: X11_CreateWindow (SDL_x11window.c:480)
==3752== by 0x40C7255: SDL_CreateWindow (SDL_video.c:1204)
==3752== by 0x804B7E5: CommonInit (common.c:730)
==3752== by 0x80497F3: main (testdraw2.c:228)
==3752== Address 0x4173bb3 is 35 bytes inside a block of size 16,384
alloc’d
==3752== at 0x4006467: calloc (vg_replace_malloc.c:467)
==3752== by 0x41C1B971: XOpenDisplay (in /usr/lib/libX11.so.6.3.0)
==3752== by 0x40CBDFB: XOpenDisplay (SDL_x11sym.h:77)
==3752== by 0x40D3EFF: X11_CreateDevice (SDL_x11video.c:162)
==3752== by 0x40C6FA6: SDL_VideoInit (SDL_video.c:457)
==3752== by 0x804B531: CommonInit (common.c:583)
==3752== by 0x4CE156B2: (below main) (in /lib/libc-2.14.90.so)
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x41C27A1F: XStoreColors (in /usr/lib/libX11.so.6.3.0)
==3752==
==3752== Syscall param writev(vector[…]) points to uninitialised byte(s)
==3752== at 0x4CEE794E: writev (in /lib/libc-2.14.90.so)
==3752== Address 0x4173bd7 is 71 bytes inside a block of size 16,384
alloc’d
==3752== at 0x4006467: calloc (vg_replace_malloc.c:467)
==3752== by 0x41C1B971: XOpenDisplay (in /usr/lib/libX11.so.6.3.0)
==3752== by 0x40CBDFB: XOpenDisplay (SDL_x11sym.h:77)
==3752== by 0x40D3EFF: X11_CreateDevice (SDL_x11video.c:162)
==3752== by 0x40C6FA6: SDL_VideoInit (SDL_video.c:457)
==3752== by 0x804B531: CommonInit (common.c:583)
==3752== by 0x4CE156B2: (below main) (in /lib/libc-2.14.90.so)
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x41C27A1F: XStoreColors (in /usr/lib/libX11.so.6.3.0)
==3752==
==3752== Syscall param writev(vector[…]) points to uninitialised byte(s)
==3752== at 0x4CEE794E: writev (in /lib/libc-2.14.90.so)
==3752== by 0x4222B9F: ???
==3752== Address 0x4173bd7 is 71 bytes inside a block of size 16,384
alloc’d
==3752== at 0x4006467: calloc (vg_replace_malloc.c:467)
==3752== by 0x41C1B971: XOpenDisplay (in /usr/lib/libX11.so.6.3.0)
==3752== by 0x40CBDFB: XOpenDisplay (SDL_x11sym.h:77)
==3752== by 0x40D3EFF: X11_CreateDevice (SDL_x11video.c:162)
==3752== by 0x40C6FA6: SDL_VideoInit (SDL_video.c:457)
==3752== by 0x804B531: CommonInit (common.c:583)
==3752== by 0x4CE156B2: (below main) (in /lib/libc-2.14.90.so)
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x41C27A1F: XStoreColors (in /usr/lib/libX11.so.6.3.0)
==3752==
==3752== Syscall param writev(vector[…]) points to uninitialised byte(s)
==3752== at 0x4CEE794E: writev (in /lib/libc-2.14.90.so)
==3752== by 0x5: ???
==3752== Address 0x4173bb3 is 35 bytes inside a block of size 16,384
alloc’d
==3752== at 0x4006467: calloc (vg_replace_malloc.c:467)
==3752== by 0x41C1B971: XOpenDisplay (in /usr/lib/libX11.so.6.3.0)
==3752== by 0x40CBDFB: XOpenDisplay (SDL_x11sym.h:77)
==3752== by 0x40D3EFF: X11_CreateDevice (SDL_x11video.c:162)
==3752== by 0x40C6FA6: SDL_VideoInit (SDL_video.c:457)
==3752== by 0x804B531: CommonInit (common.c:583)
==3752== by 0x4CE156B2: (below main) (in /lib/libc-2.14.90.so)
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x41C27A1F: XStoreColors (in /usr/lib/libX11.so.6.3.0)
==3752==
==3752== Syscall param writev(vector[…]) points to uninitialised byte(s)
==3752== at 0x4CEE794E: writev (in /lib/libc-2.14.90.so)
==3752== by 0x422739F: ???
==3752== Address 0x4173bd7 is 71 bytes inside a block of size 16,384
alloc’d
==3752== at 0x4006467: calloc (vg_replace_malloc.c:467)
==3752== by 0x41C1B971: XOpenDisplay (in /usr/lib/libX11.so.6.3.0)
==3752== by 0x40CBDFB: XOpenDisplay (SDL_x11sym.h:77)
==3752== by 0x40D3EFF: X11_CreateDevice (SDL_x11video.c:162)
==3752== by 0x40C6FA6: SDL_VideoInit (SDL_video.c:457)
==3752== by 0x804B531: CommonInit (common.c:583)
==3752== by 0x4CE156B2: (below main) (in /lib/libc-2.14.90.so)
==3752== Uninitialised value was created by a stack allocation
==3752== at 0x41C27A1F: XStoreColors (in /usr/lib/libX11.so.6.3.0)
==3752==
Couldn’t create renderer:
==3752==
==3752== HEAP SUMMARY:
==3752== in use at exit: 233,606 bytes in 831 blocks
==3752== total heap usage: 6,147 allocs, 5,316 frees, 670,782 bytes
allocated
==3752==
==3752== LEAK SUMMARY:
==3752== definitely lost: 420 bytes in 7 blocks
==3752== indirectly lost: 101,255 bytes in 147 blocks
==3752== possibly lost: 0 bytes in 0 blocks
==3752== still reachable: 131,931 bytes in 677 blocks
==3752== suppressed: 0 bytes in 0 blocks
==3752== Rerun with --leak-check=full to see details of leaked memory
==3752==
==3752== For counts of detected and suppressed errors, rerun with: -v
==3752== ERROR SUMMARY: 16 errors from 9 contexts (suppressed: 0 from 0)
And it looks like SDL keeps calling the same code over and over until it
fails.