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

Brian Paul brianp at kemper.freedesktop.org
Mon Jun 18 19:25:04 UTC 2012


Module: Mesa
Branch: 8.0
Commit: 29c67f920356553759e79f29e1e4648e4d389adf
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=29c67f920356553759e79f29e1e4648e4d389adf

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.
(cherry picked from commit f677954e07c6c1fd59b13622a7420c97d68a6029)

---

 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 04d451b..d4992a7 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -215,7 +215,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);
@@ -236,6 +236,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) {
@@ -258,8 +265,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