Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> --- src/mesa/main/dd.h | 4 ++++ src/mesa/main/shaderapi.c | 38 +++++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index c20d8b80e1d..b46f2693b83 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -1141,6 +1141,10 @@ struct dd_function_table { struct gl_shader_program *shProg, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); + void (*ProgramBinary)(struct gl_context *ctx, + struct gl_shader_program *shProg, + GLenum binaryFormat, const GLvoid *binary, + GLsizei length); /*@}*/ }; diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 28711a67f03..47a51279353 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -2224,9 +2224,6 @@ _mesa_ProgramBinary(GLuint program, GLenum binaryFormat, if (!shProg) return; - (void) binaryFormat; - (void) binary; - /* Section 2.3.1 (Errors) of the OpenGL 4.5 spec says: * * "If a negative number is provided where an argument of type sizei or @@ -2237,20 +2234,27 @@ _mesa_ProgramBinary(GLuint program, GLenum binaryFormat, return; } - /* The ARB_get_program_binary spec says: - * - * "<binaryFormat> and <binary> must be those returned by a previous - * call to GetProgramBinary, and <length> must be the length of the - * program binary as returned by GetProgramBinary or GetProgramiv with - * <pname> PROGRAM_BINARY_LENGTH. Loading the program binary will fail, - * setting the LINK_STATUS of <program> to FALSE, if these conditions - * are not met." - * - * Since any value of binaryFormat passed "is not one of those specified as - * allowable for [this] command, an INVALID_ENUM error is generated." - */ - shProg->data->LinkStatus = linking_failure; - _mesa_error(ctx, GL_INVALID_ENUM, "glProgramBinary"); + assert(ctx->Const.NumProgramBinaryFormats == 0 || + ctx->Driver.ProgramBinary); + if (ctx->Const.NumProgramBinaryFormats == 0 || + binaryFormat != GL_PROGRAM_BINARY_FORMAT_MESA) { + /* The ARB_get_program_binary spec says: + * + * "<binaryFormat> and <binary> must be those returned by a previous + * call to GetProgramBinary, and <length> must be the length of the + * program binary as returned by GetProgramBinary or GetProgramiv with + * <pname> PROGRAM_BINARY_LENGTH. Loading the program binary will fail, + * setting the LINK_STATUS of <program> to FALSE, if these conditions + * are not met." + * + * Since any value of binaryFormat passed "is not one of those specified as + * allowable for [this] command, an INVALID_ENUM error is generated." + */ + shProg->data->LinkStatus = linking_failure; + _mesa_error(ctx, GL_INVALID_ENUM, "glProgramBinary"); + } else { + ctx->Driver.ProgramBinary(ctx, shProg, binaryFormat, binary, length); + } } -- 2.14.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev