Mesa (master): st/mesa: fix glDrawPixels(GL_DEPTH_COMPONENT) color output

Brian Paul brianp at kemper.freedesktop.org
Thu Jun 14 20:37:51 UTC 2012


Module: Mesa
Branch: master
Commit: f677954e07c6c1fd59b13622a7420c97d68a6029
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f677954e07c6c1fd59b13622a7420c97d68a6029

Author: Brian Paul <brianp at vmware.com>
Date:   Fri Jun  8 14:26:53 2012 -0600

st/mesa: fix glDrawPixels(GL_DEPTH_COMPONENT) color output

When drawing a depth image the fragment shader also needs to emit the
current raster color.

The new piglit drawpix-z test exercises this.

NOTE: This is a candiate for the 8.0 branch.

---

 src/mesa/state_tracker/st_cb_drawpixels.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index 9a3f224..d3f8d13 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -217,7 +217,7 @@ st_make_drawpix_z_stencil_program(struct st_context *st,
    if (!p)
       return NULL;
 
-   p->NumInstructions = write_depth ? 2 : 1;
+   p->NumInstructions = write_depth ? 3 : 1;
    p->NumInstructions += write_stencil ? 1 : 0;
 
    p->Instructions = _mesa_alloc_instructions(p->NumInstructions);
@@ -238,6 +238,13 @@ st_make_drawpix_z_stencil_program(struct st_context *st,
       p->Instructions[ic].TexSrcUnit = 0;
       p->Instructions[ic].TexSrcTarget = TEXTURE_2D_INDEX;
       ic++;
+      /* MOV result.color, fragment.color; */
+      p->Instructions[ic].Opcode = OPCODE_MOV;
+      p->Instructions[ic].DstReg.File = PROGRAM_OUTPUT;
+      p->Instructions[ic].DstReg.Index = FRAG_RESULT_COLOR;
+      p->Instructions[ic].SrcReg[0].File = PROGRAM_INPUT;
+      p->Instructions[ic].SrcReg[0].Index = FRAG_ATTRIB_COL0;
+      ic++;
    }
 
    if (write_stencil) {
@@ -260,8 +267,10 @@ st_make_drawpix_z_stencil_program(struct st_context *st,
 
    p->InputsRead = FRAG_BIT_TEX0 | FRAG_BIT_COL0;
    p->OutputsWritten = 0;
-   if (write_depth)
+   if (write_depth) {
       p->OutputsWritten |= BITFIELD64_BIT(FRAG_RESULT_DEPTH);
+      p->OutputsWritten |= BITFIELD64_BIT(FRAG_RESULT_COLOR);
+   }
    if (write_stencil)
       p->OutputsWritten |= BITFIELD64_BIT(FRAG_RESULT_STENCIL);
 




More information about the mesa-commit mailing list