mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 13:28:06 +02:00
i965: fix alpha test for MRT
Include src0 alpha in the RT write message when using MRT, so it is used
for the alpha test instead of the normal per-RT alpha value.
Fixes broken rendering in Dota2 under Wine [FDO #62647].
No Piglit regressions on Ivybridge.
V2: reuse (and simplify) existing sample_alpha_to_coverage flag in
the FS key, rather than adding another redundant one.
Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewd-by: Paul Berry <stereotype441@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=62647
NOTE: This is a candidate for the stable branches.
(cherry picked from commit 1415a1884c)
Conflicts (resolved by Carl Worth <cworth@cworth.org>):
src/mesa/drivers/dri/i965/brw_wm.c
This commit is contained in:
parent
330203c267
commit
6a2df5a030
4 changed files with 8 additions and 9 deletions
|
|
@ -134,9 +134,7 @@ fs_generator::generate_fb_write(fs_inst *inst)
|
|||
retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD));
|
||||
brw_set_compression_control(p, BRW_COMPRESSION_NONE);
|
||||
|
||||
if (inst->target > 0 &&
|
||||
c->key.nr_color_regions > 1 &&
|
||||
c->key.sample_alpha_to_coverage) {
|
||||
if (inst->target > 0 && c->key.replicate_alpha) {
|
||||
/* Set "Source0 Alpha Present to RenderTarget" bit in message
|
||||
* header.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2127,8 +2127,7 @@ fs_visitor::emit_fb_writes()
|
|||
if (header_present) {
|
||||
src0_alpha_to_render_target = intel->gen >= 6 &&
|
||||
!do_dual_src &&
|
||||
c->key.nr_color_regions > 1 &&
|
||||
c->key.sample_alpha_to_coverage;
|
||||
c->key.replicate_alpha;
|
||||
/* m2, m3 header */
|
||||
nr += 2;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -272,7 +272,7 @@ brw_wm_debug_recompile(struct brw_context *brw,
|
|||
found |= key_debug("depth statistics", old_key->stats_wm, key->stats_wm);
|
||||
found |= key_debug("flat shading", old_key->flat_shade, key->flat_shade);
|
||||
found |= key_debug("number of color buffers", old_key->nr_color_regions, key->nr_color_regions);
|
||||
found |= key_debug("sample alpha to coverage", old_key->sample_alpha_to_coverage, key->sample_alpha_to_coverage);
|
||||
found |= key_debug("MRT alpha test or alpha-to-coverage", old_key->replicate_alpha, key->replicate_alpha);
|
||||
found |= key_debug("rendering to FBO", old_key->render_to_fbo, key->render_to_fbo);
|
||||
found |= key_debug("fragment color clamping", old_key->clamp_fragment_color, key->clamp_fragment_color);
|
||||
found |= key_debug("line smoothing", old_key->line_aa, key->line_aa);
|
||||
|
|
@ -460,8 +460,10 @@ static void brw_wm_populate_key( struct brw_context *brw,
|
|||
|
||||
/* _NEW_BUFFERS */
|
||||
key->nr_color_regions = ctx->DrawBuffer->_NumColorDrawBuffers;
|
||||
/* _NEW_MULTISAMPLE */
|
||||
key->sample_alpha_to_coverage = ctx->Multisample.SampleAlphaToCoverage;
|
||||
|
||||
/* _NEW_MULTISAMPLE, _NEW_COLOR, _NEW_BUFFERS */
|
||||
key->replicate_alpha = ctx->DrawBuffer->_NumColorDrawBuffers > 1 &&
|
||||
(ctx->Multisample.SampleAlphaToCoverage || ctx->Color.AlphaEnabled);
|
||||
|
||||
/* CACHE_NEW_VS_PROG */
|
||||
if (intel->gen < 6)
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ struct brw_wm_prog_key {
|
|||
GLuint stats_wm:1;
|
||||
GLuint flat_shade:1;
|
||||
GLuint nr_color_regions:5;
|
||||
GLuint sample_alpha_to_coverage:1;
|
||||
GLuint replicate_alpha:1;
|
||||
GLuint render_to_fbo:1;
|
||||
GLuint clamp_fragment_color:1;
|
||||
GLuint line_aa:2;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue