Bug 74853

Summary: [r300g, bisected] some piglit fbo tests segfault
Product: Mesa Reporter: Pavel Ondračka <pavel.ondracka>
Component: Drivers/Gallium/r300Assignee: Default DRI bug account <dri-devel>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: medium CC: maraeo
Version: gitKeywords: regression
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:

Description Pavel Ondračka 2014-02-11 19:33:48 UTC
Some affected tests:
fbo-missing-attachment-blit es2 from -fbo -auto
fbo-missing-attachment-blit es2 to -fbo -auto
fbo-missing-attachment-clear -auto
framebuffer-blit-levels draw depth -fbo -auto
framebuffer-blit-levels draw stencil -fbo -auto
and others...

First bad commit:
commit 9baa45f78b8ca7d66280e36009b6a685055d7cd6
Author: Marek Olšák <marek.olsak@amd.com>
Date:   Wed Jan 8 01:09:15 2014 +0100

    st/mesa: bind NULL colorbuffers as specified by glDrawBuffers
    
    An example why it is required:
    
        Let's say there's a fragment shader writing to gl_FragData[0..1].
        The user calls: glDrawBuffers(2, {GL_NONE, GL_COLOR_ATTACHMENT0});
    
        That means gl_FragData[0] is unused and gl_FragData[1] is written
        to GL_COLOR_ATTACHMENT0.
    
    st/mesa was skipping the GL_NONE draw buffer, therefore gl_FragData[0]
    was written to GL_COLOR_ATTACHMENT0, which was wrong.
    
    This commit fixes it, but drivers must also be fixed not to crash when
    binding NULL colorbuffers. There is also a new set of piglit tests for this.
    
    The MSAA state also had to be fixed not to crash when reading fb->cbufs[0].
    
    Reviewed-by: Brian Paul <brianp@vmware.com>


./framebuffer-blit-levels draw depth -fbo -auto
Program received signal SIGSEGV, Segmentation fault.
0xb6ca230f in r300_set_framebuffer_state (pipe=0x80880e8, state=0x84bc9a0)
    at r300_state.c:1020
1020	        r300->screen->cmask_resource == state->cbufs[0]->texture;
(gdb) bt
#0  0xb6ca230f in r300_set_framebuffer_state (pipe=0x80880e8, state=0x84bc9a0)
    at r300_state.c:1020
#1  0xb6affe43 in cso_set_framebuffer (ctx=0x84d16f0, fb=0x84bc9a0)
    at cso_cache/cso_context.c:649
#2  0xb69d0d84 in update_framebuffer_state (st=0x84bbf30)
    at state_tracker/st_atom_framebuffer.c:125
#3  0xb69ce0d3 in st_validate_state (st=0x84bbf30)
    at state_tracker/st_atom.c:202
#4  0xb69d7301 in st_BlitFramebuffer (ctx=0x84787d8, srcX0=0, srcY0=0, 
    srcX1=128, srcY1=128, dstX0=0, dstY0=0, dstX1=128, dstY1=128, mask=256, 
    filter=9728) at state_tracker/st_cb_blit.c:94
#5  0xb6868fb3 in _mesa_BlitFramebuffer (srcX0=0, srcY0=0, srcX1=128, 
    srcY1=128, dstX0=0, dstY0=0, dstX1=128, dstY1=128, mask=256, filter=9728)
    at main/blit.c:509
#6  0xb7eb51ff in stub_glBlitFramebuffer (srcX0=0, srcY0=0, srcX1=128, 
    srcY1=128, dstX0=0, dstY0=0, dstX1=128, dstY1=128, mask=256, filter=9728)
    at /home/Paulie/piglit/tests/util/generated_dispatch.c:1724
#7  0x080498c3 in piglit_display ()
    at /home/Paulie/piglit/tests/spec/arb_framebuffer_object/framebuffer-blit-levels.c:372
#8  0xb7eb0540 in display ()
    at /home/Paulie/piglit/tests/util/piglit-framework-gl/piglit_glut_framework.c:60
#9  0xb7fb88ec in fghcbDisplayWindow () from /lib/libglut.so.3
#10 0xb7fbc507 in fgEnumWindows () from /lib/libglut.so.3
#11 0xb7fb8e6e in glutMainLoopEvent () from /lib/libglut.so.3
#12 0xb7fb9657 in glutMainLoop () from /lib/libglut.so.3
#13 0xb7eb0799 in run_test (gl_fw=0xb7fa1b20 <glut_fw>, argc=3, 
    argv=0xbffff1e4)
    at /home/Paulie/piglit/tests/util/piglit-framework-gl/piglit_glut_framework.c:142
#14 0xb7eae59c in piglit_gl_test_run (argc=3, argv=0xbffff1e4, 
    config=0xbffff108)
    at /home/Paulie/piglit/tests/util/piglit-framework-gl.c:191
#15 0x08048df9 in main (argc=3, argv=0xbffff1e4)
    at /home/Paulie/piglit/tests/spec/arb_framebuffer_object/framebuffer-blit-levels.c:63
Comment 1 Marek Olšák 2014-04-24 23:46:10 UTC
I fixed most of the tests by e522c455e40b06a89885d413d564df40015259b3. There are no crashes, but some of them are unfixable on R500. Closing.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.