st/mesa: bind NULL colorbuffers as specified by glDrawBuffers
authorMarek Olšák <marek.olsak@amd.com>
Wed, 8 Jan 2014 00:09:15 +0000 (01:09 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 13 Jan 2014 14:48:07 +0000 (15:48 +0100)
commit9baa45f78b8ca7d66280e36009b6a685055d7cd6
tree1aa17409335d9643983dfcd7abbbcc0126581817
parent9bf9578c1b79e5622a2325f1a2bb80fcf0e22a6d
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>
src/gallium/auxiliary/util/u_framebuffer.c
src/gallium/auxiliary/util/u_framebuffer.h
src/mesa/state_tracker/st_atom_framebuffer.c
src/mesa/state_tracker/st_atom_msaa.c
src/mesa/state_tracker/st_cb_clear.c
src/mesa/state_tracker/st_cb_fbo.c