st/mesa: only enable MSAA coverage options when we have a MSAA buffer
Regardless of whether GL_MULTISAMPLE is enabled (it's enabled by default) we should not set the alpha_to_coverage or alpha_to_one flags if the current drawing buffer does not do MSAA. This fixes the new piglit gl-1.3-alpha_to_coverage_nop test. ETQW is a game that enables GL_SAMPLE_ALPHA_TO_COVERAGE without MSAA. Shrubs along the side of roads were invisible because fragments with alpha < 0.5 were being discarded (zero coverage). v2: remove ctx->DrawBuffer != NULL check. Reviewed-by: Roland Scheidegger <sroland@vmware.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -265,9 +265,11 @@ update_blend( struct st_context *st )
|
||||
|
||||
blend->dither = ctx->Color.DitherFlag;
|
||||
|
||||
if (ctx->Multisample.Enabled) {
|
||||
/* unlike in gallium/d3d10 these operations are only performed
|
||||
if msaa is enabled */
|
||||
if (ctx->Multisample.Enabled &&
|
||||
ctx->DrawBuffer->Visual.sampleBuffers > 0) {
|
||||
/* Unlike in gallium/d3d10 these operations are only performed
|
||||
* if both msaa is enabled and we have a multisample buffer.
|
||||
*/
|
||||
blend->alpha_to_coverage = ctx->Multisample.SampleAlphaToCoverage;
|
||||
blend->alpha_to_one = ctx->Multisample.SampleAlphaToOne;
|
||||
}
|
||||
|
||||
@@ -166,7 +166,8 @@ void st_invalidate_state(struct gl_context * ctx, GLbitfield new_state)
|
||||
struct st_context *st = st_context(ctx);
|
||||
|
||||
if (new_state & _NEW_BUFFERS) {
|
||||
st->dirty |= ST_NEW_DSA |
|
||||
st->dirty |= ST_NEW_BLEND |
|
||||
ST_NEW_DSA |
|
||||
ST_NEW_FB_STATE |
|
||||
ST_NEW_SAMPLE_MASK |
|
||||
ST_NEW_SAMPLE_SHADING |
|
||||
|
||||
Reference in New Issue
Block a user