Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> --- src/mesa/main/dd.h | 4 ++++ src/mesa/main/shaderapi.c | 17 +++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index 91eff55f84d..c20d8b80e1d 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -1137,6 +1137,10 @@ struct dd_function_table { void (*GetProgramBinaryLength)(struct gl_context *ctx, struct gl_shader_program *shProg, GLint *length); + void (*GetProgramBinary)(struct gl_context *ctx, + struct gl_shader_program *shProg, + GLsizei bufSize, GLsizei *length, + GLenum *binaryFormat, GLvoid *binary); /*@}*/ }; diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index f12825d2536..28711a67f03 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -2200,12 +2200,17 @@ _mesa_GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, return; } - *length = 0; - _mesa_error(ctx, GL_INVALID_OPERATION, - "glGetProgramBinary(driver supports zero binary formats)"); - - (void) binaryFormat; - (void) binary; + assert(ctx->Const.NumProgramBinaryFormats == 0 || + ctx->Driver.GetProgramBinary); + if (ctx->Const.NumProgramBinaryFormats == 0) { + *length = 0; + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetProgramBinary(driver supports zero binary formats)"); + } else { + ctx->Driver.GetProgramBinary(ctx, shProg, bufSize, length, + binaryFormat, binary); + assert(*length == 0 || *binaryFormat == GL_PROGRAM_BINARY_FORMAT_MESA); + } } void GLAPIENTRY -- 2.14.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev