summaryrefslogtreecommitdiffstats
path: root/src/mesa/state_tracker
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2012-06-08 14:26:53 -0600
committerBrian Paul <[email protected]>2012-06-14 14:37:31 -0600
commitf677954e07c6c1fd59b13622a7420c97d68a6029 (patch)
treeb3640d209c5d07d24bce09c0d68b60992651ed9a /src/mesa/state_tracker
parent8031aa134ebcdcaad3c7b1d10f41c1f033382d30 (diff)
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.
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r--src/mesa/state_tracker/st_cb_drawpixels.c13
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 9a3f22465c6..d3f8d136895 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);