[Mesa-dev] [PATCH] i965: fix alpha test for MRT

Chris Forbes chrisf at ijw.co.nz
Mon Jul 1 12:16:22 PDT 2013


Paul,

That's much nicer -- I noticed the new flag was pretty much redundant
with the alpha-to-coverage flag as soon as I'd sent out the patch.

Will fix that up, and cook up a piglit test for this tonight.

-- Chris

On Tue, Jul 2, 2013 at 5:28 AM, Paul Berry <stereotype441 at gmail.com> wrote:
> On 1 July 2013 04:45, Chris Forbes <chrisf at ijw.co.nz> wrote:
>>
>> 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] -- but not
>> tested against much else.
>>
>> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
>
>
>
> Since there's no other user of key.sample_alpha_to_coverage, I guess I'd
> prefer to see it renamed to something like key.replicate_alpha, and then in
> brw_wm_populate_key(), set it to "ctx->DrawBuffer->_NumColorDrawBuffers > 1
> && (ctx->Multisample.SampleAlphaToCoverage || ctx->Color.AlphaEnabled)".
> That will reduce unnecessary recompiles.
>
> Also it would be nice to have a piglit test for this--it seems like the sort
> of thing we could easily regress in the future if we're not careful.
>
>>
>> ---
>>  src/mesa/drivers/dri/i965/brw_fs_emit.cpp    | 2 +-
>>  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 2 +-
>>  src/mesa/drivers/dri/i965/brw_wm.c           | 4 ++++
>>  src/mesa/drivers/dri/i965/brw_wm.h           | 1 +
>>  4 files changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs_emit.cpp
>> b/src/mesa/drivers/dri/i965/brw_fs_emit.cpp
>> index f390989..10f4c99 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs_emit.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_fs_emit.cpp
>> @@ -129,7 +129,7 @@ fs_generator::generate_fb_write(fs_inst *inst)
>>
>>           if (inst->target > 0 &&
>>              c->key.nr_color_regions > 1 &&
>> -            c->key.sample_alpha_to_coverage) {
>> +            (c->key.sample_alpha_to_coverage || c->key.alpha_test)) {
>>              /* Set "Source0 Alpha Present to RenderTarget" bit in message
>>               * header.
>>               */
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
>> b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
>> index a67b6ed..0c8dc1b 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
>> @@ -2255,7 +2255,7 @@ fs_visitor::emit_fb_writes()
>>        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.sample_alpha_to_coverage ||
>> c->key.alpha_test);
>>        /* m2, m3 header */
>>        nr += 2;
>>     }
>> diff --git a/src/mesa/drivers/dri/i965/brw_wm.c
>> b/src/mesa/drivers/dri/i965/brw_wm.c
>> index 6eb4a1d..3265596 100644
>> --- a/src/mesa/drivers/dri/i965/brw_wm.c
>> +++ b/src/mesa/drivers/dri/i965/brw_wm.c
>> @@ -279,6 +279,8 @@ brw_wm_debug_recompile(struct brw_context *brw,
>>                        old_key->nr_color_regions, key->nr_color_regions);
>>     found |= key_debug(intel, "sample alpha to coverage",
>>                        old_key->sample_alpha_to_coverage,
>> key->sample_alpha_to_coverage);
>> +   found |= key_debug(intel, "MRT alpha test w/a",
>> +                      old_key->alpha_test, key->alpha_test);
>>     found |= key_debug(intel, "rendering to FBO",
>>                        old_key->render_to_fbo, key->render_to_fbo);
>>     found |= key_debug(intel, "fragment color clamping",
>> @@ -463,6 +465,8 @@ static void brw_wm_populate_key( struct brw_context
>> *brw,
>>     key->nr_color_regions = ctx->DrawBuffer->_NumColorDrawBuffers;
>>    /* _NEW_MULTISAMPLE */
>>     key->sample_alpha_to_coverage =
>> ctx->Multisample.SampleAlphaToCoverage;
>> +   /* _NEW_COLOR */
>> +   key->alpha_test = ctx->Color.AlphaEnabled;
>>
>>     /* BRW_NEW_VUE_MAP_GEOM_OUT */
>>     if (intel->gen < 6)
>> diff --git a/src/mesa/drivers/dri/i965/brw_wm.h
>> b/src/mesa/drivers/dri/i965/brw_wm.h
>> index 28e8734..13b17d0 100644
>> --- a/src/mesa/drivers/dri/i965/brw_wm.h
>> +++ b/src/mesa/drivers/dri/i965/brw_wm.h
>> @@ -63,6 +63,7 @@ struct brw_wm_prog_key {
>>     GLuint flat_shade:1;
>>     GLuint nr_color_regions:5;
>>     GLuint sample_alpha_to_coverage:1;
>> +   GLuint alpha_test:1;
>>     GLuint render_to_fbo:1;
>>     GLuint clamp_fragment_color:1;
>>     GLuint line_aa:2;
>> --
>> 1.8.3.2
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>


More information about the mesa-dev mailing list