diff options
author | Brian Paul <[email protected]> | 2012-06-08 14:26:53 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2012-06-14 14:37:31 -0600 |
commit | f677954e07c6c1fd59b13622a7420c97d68a6029 (patch) | |
tree | b3640d209c5d07d24bce09c0d68b60992651ed9a /src/mesa | |
parent | 8031aa134ebcdcaad3c7b1d10f41c1f033382d30 (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')
-rw-r--r-- | 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 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); |