From: Paul Berry Date: Thu, 13 Sep 2012 17:20:07 +0000 (-0700) Subject: meta: Refactor handling of GL_MULTISAMPLE. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a29a4566354af53e3bdc4a925eddc0d7af2bf384;p=mesa.git meta: Refactor handling of GL_MULTISAMPLE. In commit 055093e (meta: remove call to _meta_in_progress(), fix multisample enable/disable), we created a meta_set_enable() function that could be used by meta ops to enable and disable GL_MULTISAMPLE even when the GLES API was in use (the GLES API doesn't support GL_MULTISAMPLE; it behaves as if it is always enabled). This created some unfortunate code duplication between meta_set_enable() and the existing _mesa_set_enable() function. This patch eliminates the duplication by creating a _mesa_set_multisample() function, which is used by both meta ops and _mesa_set_enable() to enable/disable GL_MULTISAMPLE. Reviewed-by: Brian Paul Reviewed-by: Kenneth Graunke --- diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 3d8e13838bf..677548e94eb 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -447,35 +447,6 @@ _mesa_meta_free(struct gl_context *ctx) } -/** - * This is an alternative to _mesa_set_enable() to handle some special cases. - * See comments inside. - */ -static void -meta_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) -{ - switch (cap) { - case GL_MULTISAMPLE: - /* We need to enable/disable multisample when using GLES but this enum - * is not supported there. - */ - if (ctx->Multisample.Enabled == state) - return; - FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); - ctx->Multisample.Enabled = state; - break; - default: - _mesa_problem(ctx, "Unexpected cap in _meta_set_enable()"); - return; - } - - if (ctx->Driver.Enable) { - ctx->Driver.Enable(ctx, cap, state); - } -} - - - /** * Enter meta state. This is like a light-weight version of glPushAttrib * but it also resets most GL state back to default values. @@ -796,7 +767,7 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state) if (state & MESA_META_MULTISAMPLE) { save->MultisampleEnabled = ctx->Multisample.Enabled; if (ctx->Multisample.Enabled) - meta_set_enable(ctx, GL_MULTISAMPLE, GL_FALSE); + _mesa_set_multisample(ctx, GL_FALSE); } /* misc */ @@ -1100,7 +1071,7 @@ _mesa_meta_end(struct gl_context *ctx) if (state & MESA_META_MULTISAMPLE) { if (ctx->Multisample.Enabled != save->MultisampleEnabled) - meta_set_enable(ctx, GL_MULTISAMPLE, save->MultisampleEnabled); + _mesa_set_multisample(ctx, save->MultisampleEnabled); } /* misc */ diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index 14eea53fefd..5dd88331114 100644 --- a/src/mesa/main/enable.c +++ b/src/mesa/main/enable.c @@ -250,6 +250,23 @@ enable_texture(struct gl_context *ctx, GLboolean state, GLbitfield texBit) } +/** + * Helper function to enable or disable GL_MULTISAMPLE, skipping the check for + * whether the API supports it (GLES doesn't). + */ +void +_mesa_set_multisample(struct gl_context *ctx, GLboolean state) +{ + if (ctx->Multisample.Enabled == state) + return; + FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); + ctx->Multisample.Enabled = state; + + if (ctx->Driver.Enable) { + ctx->Driver.Enable(ctx, GL_MULTISAMPLE, state); + } +} + /** * Helper function to enable or disable state. * @@ -767,11 +784,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) case GL_MULTISAMPLE_ARB: if (!_mesa_is_desktop_gl(ctx) && ctx->API != API_OPENGLES) goto invalid_enum_error; - if (ctx->Multisample.Enabled == state) - return; - FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); - ctx->Multisample.Enabled = state; - break; + _mesa_set_multisample(ctx, state); + return; case GL_SAMPLE_ALPHA_TO_COVERAGE_ARB: if (ctx->Multisample.SampleAlphaToCoverage == state) return; diff --git a/src/mesa/main/enable.h b/src/mesa/main/enable.h index 6d90c170c8a..c49b4948dea 100644 --- a/src/mesa/main/enable.h +++ b/src/mesa/main/enable.h @@ -67,5 +67,9 @@ _mesa_EnableClientState( GLenum cap ); extern void GLAPIENTRY _mesa_DisableClientState( GLenum cap ); +extern void +_mesa_set_multisample(struct gl_context *ctx, GLboolean state); + + #endif