[Mesa-dev] Mesa (master): 57 new commits

Fredrik Höglund fredrik at kde.org
Fri May 15 08:59:29 PDT 2015


On Friday 15 May 2015, Fredrik Höglund wrote:
> On Friday 15 May 2015, Michel Dänzer wrote:
> > On 14.05.2015 22:52, fredrik at kemper.freedesktop.org (Fredrik HXXglund)
> > wrote:
> > > 
> > > URL:
> > http://cgit.freedesktop.org/mesa/mesa/commit/?id=6b284f08ab399154ad10e2166440b44cbbdcb2c5
> > > Author: Laura Ekstrand <laura at jlekstrand.net>
> > > Date:   Tue Feb 3 14:47:00 2015 -0800
> > > 
> > >     main: _mesa_blit_framebuffer updates its arbitrary framebuffers.
> > >     
> > >     Previously, we used _mesa_update_state to update the currently bound
> > >     framebuffers prior to performing a blit.  Now that _mesa_blit_framebuffer
> > >     uses arbitrary framebuffers, _mesa_update_state is not specific enough.
> > >     
> > >     Reviewed-by: Fredrik Höglund <fredrik at kde.org>
> > >     Signed-off-by: Fredrik Höglund <fredrik at kde.org>
> > 
> > This commit broke the piglit test
> > spec at ext_framebuffer_multisample@bitmap with the radeonsi driver:
> > 
> > Probe color at (224,0)
> >   Left: 0.000000 0.000000 0.000000 1.000000
> >   Right: 1.000000 1.000000 1.000000 1.000000
> > 
> > Looks like it's because the bottom right squares of the Xs are missing,
> > see the attached picture.
> > 
> > Any ideas?
> 
> I did notice that failure as well, but when I ran the test manually it
> passed for me, leading me to think that it was a spurious failure.
> 
> The output looks exactly the same for me.  But the test works by
> comparing the left and right halves of the framebuffer, so if the
> bottom right squares are missing on both sides, the test should
> pass.  
> 
> The left side is the test image, and the right side is the reference
> image.

Okay, so I've finished analyzing the failure.  The glBindFramebuffer()
calls that precede the glBlitFramebuffer() call cause _NEW_BUFFERS to
be set.  This used to result in _mesa_update_state() being called from
_mesa_blit_framebuffer(), which in turn would call st_invalidate_state(),
which would mark the framebuffer state as invalid.  st_BlitFramebuffer()
would then call st_validate_state() which would call
update_framebuffer_state() which would call st_flush_bitmap_cache().
That call to st_flush_bitmap_cache() is what caused the rendering by the
last glBitmap() call to land in the framebuffer.

The attached patch fixes the problem by restoring the
_mesa_update_state() call.  The bug can also be fixed by calling
st_flush_bitmap_cache() from st_BlitFramebuffer().

Fredrik

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-mesa-Restore-the-_mesa_update_state-call-in-_mesa_bl.patch
Type: text/x-patch
Size: 1711 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150515/5e14dfbe/attachment.bin>


More information about the mesa-dev mailing list