mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-21 09:50:36 +02:00
i965: Fix alpha testing when there is no color buffer in the FBO.
We were alpha testing against an unwritten value, resulting in garbage. (part of) Bug #35073.
This commit is contained in:
parent
b60651a17b
commit
a99447314c
3 changed files with 13 additions and 0 deletions
|
|
@ -2140,6 +2140,17 @@ fs_visitor::emit_fb_writes()
|
|||
}
|
||||
|
||||
if (c->key.nr_color_regions == 0) {
|
||||
if (c->key.alpha_test && (this->frag_color || this->frag_data)) {
|
||||
/* If the alpha test is enabled but there's no color buffer,
|
||||
* we still need to send alpha out the pipeline to our null
|
||||
* renderbuffer.
|
||||
*/
|
||||
color.reg_offset += 3;
|
||||
emit(fs_inst(BRW_OPCODE_MOV,
|
||||
fs_reg(MRF, color_mrf + 3),
|
||||
color));
|
||||
}
|
||||
|
||||
fs_inst *inst = emit(fs_inst(FS_OPCODE_FB_WRITE,
|
||||
reg_undef, reg_undef));
|
||||
inst->base_mrf = 0;
|
||||
|
|
|
|||
|
|
@ -284,6 +284,7 @@ static void brw_wm_populate_key( struct brw_context *brw,
|
|||
/* Build the index for table lookup
|
||||
*/
|
||||
/* _NEW_COLOR */
|
||||
key->alpha_test = ctx->Color.AlphaEnabled;
|
||||
if (fp->program.UsesKill ||
|
||||
ctx->Color.AlphaEnabled)
|
||||
lookup |= IZ_PS_KILL_ALPHATEST_BIT;
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ struct brw_wm_prog_key {
|
|||
GLuint linear_color:1; /**< linear interpolation vs perspective interp */
|
||||
GLuint nr_color_regions:5;
|
||||
GLuint render_to_fbo:1;
|
||||
GLuint alpha_test:1;
|
||||
|
||||
GLbitfield proj_attrib_mask; /**< one bit per fragment program attribute */
|
||||
GLuint shadowtex_mask:16;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue