The QT framework has a bug in their shader program cache, which is built on GL_ARB_get_program_binary.
In an effort to allow them to fix the bug we don't enable more than 1 binary format for compatibility profiles. This is only being done on the 18.0 release branch. Ref: https://bugreports.qt.io/browse/QTBUG-66420 Ref: https://bugs.freedesktop.org/show_bug.cgi?id=105065 Cc: "18.0" <mesa-sta...@lists.freedesktop.org> Cc: Mark Janes <mark.a.ja...@intel.com> Cc: Kenneth Graunke <kenn...@whitecape.org> Cc: Scott D Phillips <scott.d.phill...@intel.com> Cc: Ilia Mirkin <imir...@alum.mit.edu> Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> [imir...@alum.mit.edu: Added st_context.c (gallium) change] --- docs/relnotes/17.4.0.html | 2 +- src/mesa/drivers/dri/i965/brw_context.c | 9 ++++++++- src/mesa/state_tracker/st_context.c | 9 +++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/relnotes/17.4.0.html b/docs/relnotes/17.4.0.html index 412c0fc455e..fecdfe77969 100644 --- a/docs/relnotes/17.4.0.html +++ b/docs/relnotes/17.4.0.html @@ -53,7 +53,7 @@ Note: some of the new features are only available with certain drivers. <li>GL_ARB_enhanced_layouts on r600/evergreen+</li> <li>GL_ARB_bindless_texture on nvc0/kepler</li> <li>OpenGL 4.3 on r600/evergreen with hw fp64 support</li> -<li>Support 1 binary format for GL_ARB_get_program_binary on i965</li> +<li>Support 1 binary format for GL_ARB_get_program_binary on i965 (except in GL compatibility profiles)</li> </ul> <h2>Bug fixes</h2> diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index e9358b7bc9c..58527d77263 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -704,7 +704,14 @@ brw_initialize_context_constants(struct brw_context *brw) ctx->Const.AllowMappedBuffersDuringExecution = true; /* GL_ARB_get_program_binary */ - ctx->Const.NumProgramBinaryFormats = 1; + /* The QT framework has a bug in their shader program cache, which is built + * on GL_ARB_get_program_binary. In an effort to allow them to fix the bug + * we don't enable more than 1 binary format for compatibility profiles. + * This is only being done on the 18.0 release branch. + */ + if (ctx->API != API_OPENGL_COMPAT) { + ctx->Const.NumProgramBinaryFormats = 1; + } } static void diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index d3e7d3fb7fa..4c14245a38f 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -518,6 +518,15 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe, ctx->Const.ShaderCompilerOptions[i].EmitNoIndirectSampler = true; } + /* The QT framework has a bug in their shader program cache, which is built + * on GL_ARB_get_program_binary. In an effort to allow them to fix the bug + * we don't enable binary formats for compatibility profiles. + * This is only being done on the 18.0 release branch. + */ + if (ctx->API == API_OPENGL_COMPAT) { + ctx->Const.NumProgramBinaryFormats = 0; + } + /* Set which shader types can be compiled at link time. */ st->shader_has_one_variant[MESA_SHADER_VERTEX] = st->has_shareable_shaders && -- 2.16.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev