diff options
author | Pierre-Eric Pelloux-Prayer <[email protected]> | 2019-05-09 09:52:40 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2019-05-09 16:15:20 -0400 |
commit | 62ed82ea1a93e4fb9676a1edd9447b26cdd4f173 (patch) | |
tree | b7848bd04b835a09f114ea734154a0f1dd65c234 /src/mesa/main | |
parent | 1f1007a4edcefa1c291c1b4e13d6cec35a59ca6f (diff) |
mesa: fix GL_PROGRAM_BINARY_RETRIEVABLE_HINT handling
When first implemented in fefd03e16c16 Mesa's behavior was aligned on behavior
of Nvidia's driver. This caused a failing test in piglit but was ok since the
specification is unclear on this subject.
Nvidia's driver behavior has been modified because using version 410.104, the
problematic test (program_binary_retrievable_hint) now passes.
This commit defers BinaryRetrievableHint update until the next linking so the
test passes on Mesa as well.
Signed-off-by: Pierre-Eric Pelloux-Prayer <[email protected]>
Signed-off-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/mtypes.h | 7 | ||||
-rw-r--r-- | src/mesa/main/shaderapi.c | 8 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 0ca87561f05..76905f60662 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2956,8 +2956,13 @@ struct gl_shader_program /** * Is the application intending to glGetProgramBinary this program? + * + * BinaryRetrievableHint is the currently active hint that gets set + * during initialization and after linking and BinaryRetrievableHintPending + * is the hint set by the user to be active when program is linked next time. */ - GLboolean BinaryRetreivableHint; + GLboolean BinaryRetrievableHint; + GLboolean BinaryRetrievableHintPending; /** * Indicates whether program can be bound for individual pipeline stages diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 6b73e6c7e7a..2cc5fe5d8f8 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -843,7 +843,7 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname, if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) break; - *params = shProg->BinaryRetreivableHint; + *params = shProg->BinaryRetrievableHint; return; case GL_PROGRAM_BINARY_LENGTH: if (ctx->Const.NumProgramBinaryFormats == 0 || !shProg->data->LinkStatus) { @@ -1287,6 +1287,8 @@ link_program(struct gl_context *ctx, struct gl_shader_program *shProg, _mesa_update_vertex_processing_mode(ctx); + shProg->BinaryRetrievableHint = shProg->BinaryRetrievableHintPending; + /* debug code */ if (0) { GLuint i; @@ -2380,7 +2382,7 @@ program_parameteri(struct gl_context *ctx, struct gl_shader_program *shProg, * will not be in effect until the next time LinkProgram or * ProgramBinary has been called successfully." * - * The resloution of issue 9 in the extension spec also says: + * The resolution of issue 9 in the extension spec also says: * * "The application may use the PROGRAM_BINARY_RETRIEVABLE_HINT hint * to indicate to the GL implementation that this program will @@ -2389,7 +2391,7 @@ program_parameteri(struct gl_context *ctx, struct gl_shader_program *shProg, * changes made to the program before being saved such that when it * is loaded again a recompile can be avoided." */ - shProg->BinaryRetreivableHint = value; + shProg->BinaryRetrievableHintPending = value; return; case GL_PROGRAM_SEPARABLE: |