Module: Mesa Branch: master Commit: 55376cb31e2f495a4d872b4ffce2135c3365b873 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=55376cb31e2f495a4d872b4ffce2135c3365b873
Author: Marek Olšák <marek.ol...@amd.com> Date: Fri Feb 23 20:42:41 2018 +0100 st/mesa: expose 0 shader binary formats for compat profiles for Qt Bugzilla: https://bugreports.qt.io/browse/QTBUG-66420 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105065 Cc: "18.0" <mesa-sta...@lists.freedesktop.org> Tested-by: Kai Wasserbäch <k...@dev.carbon-project.org> --- src/mesa/state_tracker/st_context.c | 2 +- src/mesa/state_tracker/st_extensions.c | 13 ++++++++++--- src/mesa/state_tracker/st_extensions.h | 3 ++- src/mesa/state_tracker/st_manager.c | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index e23f9fd70b..dfdd92f31b 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -468,7 +468,7 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe, ? true : false; /* GL limits and extensions */ - st_init_limits(pipe->screen, &ctx->Const, &ctx->Extensions); + st_init_limits(pipe->screen, &ctx->Const, &ctx->Extensions, ctx->API); st_init_extensions(pipe->screen, &ctx->Const, &ctx->Extensions, &st->options, ctx->API); diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 42d53cbf82..3b8e226e67 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -75,7 +75,8 @@ static int _clamp(int a, int min, int max) * Note that we have to limit/clamp against Mesa's internal limits too. */ void st_init_limits(struct pipe_screen *screen, - struct gl_constants *c, struct gl_extensions *extensions) + struct gl_constants *c, struct gl_extensions *extensions, + gl_api api) { int supported_irs; unsigned sh; @@ -437,8 +438,14 @@ void st_init_limits(struct pipe_screen *screen, c->GLSLFrontFacingIsSysVal = screen->get_param(screen, PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL); - /* GL_ARB_get_program_binary */ - if (screen->get_disk_shader_cache && screen->get_disk_shader_cache(screen)) + /* GL_ARB_get_program_binary + * + * 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. + */ + if (api != API_OPENGL_COMPAT && + screen->get_disk_shader_cache && screen->get_disk_shader_cache(screen)) c->NumProgramBinaryFormats = 1; c->MaxAtomicBufferBindings = diff --git a/src/mesa/state_tracker/st_extensions.h b/src/mesa/state_tracker/st_extensions.h index 7bf1aa8c8c..fdfac7ece7 100644 --- a/src/mesa/state_tracker/st_extensions.h +++ b/src/mesa/state_tracker/st_extensions.h @@ -35,7 +35,8 @@ struct pipe_screen; extern void st_init_limits(struct pipe_screen *screen, struct gl_constants *c, - struct gl_extensions *extensions); + struct gl_extensions *extensions, + gl_api api); extern void st_init_extensions(struct pipe_screen *screen, struct gl_constants *consts, diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c index d6aa3e7962..d6901c96eb 100644 --- a/src/mesa/state_tracker/st_manager.c +++ b/src/mesa/state_tracker/st_manager.c @@ -1207,7 +1207,7 @@ get_version(struct pipe_screen *screen, _mesa_init_constants(&consts, api); _mesa_init_extensions(&extensions); - st_init_limits(screen, &consts, &extensions); + st_init_limits(screen, &consts, &extensions, api); st_init_extensions(screen, &consts, &extensions, options, api); return _mesa_get_version(&extensions, &consts, api); _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit