Commit 2f89662 added the driconf option 'clamp_max_samples'. In that commit, the option did not alter the context version.
Specifically, Mesa constructed a GL 3.0 context for Baytrail even if clamp_max_samples=0, which clamps GL_MAX_SAMPLES to 0. This violates the GL 3.0 spec, which requires GL_MAX_SAMPLES >= 4. The spec violation causes WebGL fail on Chromium because it correctly assumes that a GL 3.0 context supports at least 4 samples. This patch fixes calculation of the context version to respect the post-clamped value of GL_MAX_SAMPLES. This in turn fixes WebGL on Chromium when clamp_max_samples=0. CC: Eric Anholt <e...@anholt.org> CC: Kenneth Graunke <kenn...@whitecape.org> Signed-off-by: Chad Versace <chad.vers...@linux.intel.com> --- src/mesa/drivers/dri/i965/brw_context.c | 66 ++++++++++++--------------------- 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index 95b602f..66ce93e 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -287,37 +287,6 @@ brw_supported_msaa_modes(const struct brw_context *brw) } } -/** - * Override GL_MAX_SAMPLES and related constants according to value of driconf - * option 'clamp_max_samples'. - */ -static void -brw_override_max_samples(struct brw_context *brw) -{ - const int clamp_max_samples = driQueryOptioni(&brw->optionCache, - "clamp_max_samples"); - if (clamp_max_samples < 0) - return; - - const int *supported_msaa_modes = brw_supported_msaa_modes(brw); - int max_samples = 0; - - /* Select the largest supported MSAA mode that does not exceed - * clamp_max_samples. - */ - for (int i = 0; supported_msaa_modes[i] != 0; ++i) { - if (supported_msaa_modes[i] <= clamp_max_samples) { - max_samples = supported_msaa_modes[i]; - break; - } - } - - brw->ctx.Const.MaxSamples = max_samples; - brw->ctx.Const.MaxColorTextureSamples = max_samples; - brw->ctx.Const.MaxDepthTextureSamples = max_samples; - brw->ctx.Const.MaxIntegerSamples = max_samples; -} - static void brw_initialize_context_constants(struct brw_context *brw) { @@ -383,11 +352,30 @@ brw_initialize_context_constants(struct brw_context *brw) ctx->Const.AlwaysUseGetTransformFeedbackVertexCount = true; - const int max_samples = brw_supported_msaa_modes(brw)[0]; - ctx->Const.MaxSamples = max_samples; - ctx->Const.MaxColorTextureSamples = max_samples; - ctx->Const.MaxDepthTextureSamples = max_samples; - ctx->Const.MaxIntegerSamples = max_samples; + const int *supported_msaa_modes = brw_supported_msaa_modes(brw); + const int clamp_max_samples = + driQueryOptioni(&brw->optionCache, "clamp_max_samples"); + int max_samples; + + if (clamp_max_samples >= 0) { + /* Select the largest supported MSAA mode that does not exceed + * clamp_max_samples. + */ + max_samples = 0; + for (int i = 0; supported_msaa_modes[i] != 0; ++i) { + if (supported_msaa_modes[i] <= clamp_max_samples) { + max_samples = supported_msaa_modes[i]; + break; + } + } + } else { + max_samples = supported_msaa_modes[0]; + } + + brw->ctx.Const.MaxSamples = max_samples; + brw->ctx.Const.MaxColorTextureSamples = max_samples; + brw->ctx.Const.MaxDepthTextureSamples = max_samples; + brw->ctx.Const.MaxIntegerSamples = max_samples; if (brw->gen >= 7) ctx->Const.MaxProgramTextureGatherComponents = 4; @@ -742,12 +730,6 @@ brwCreateContext(gl_api api, _mesa_compute_version(ctx); - /* Here we override context constants. We apply the overrides after - * calculation of the context version because we do not want the overridden - * constants to change the version. - */ - brw_override_max_samples(brw); - _mesa_initialize_dispatch_tables(ctx); _mesa_initialize_vbo_vtxfmt(ctx); -- 1.8.3.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev