diff options
author | Jordan Justen <[email protected]> | 2017-11-04 16:47:54 -0700 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-12-08 16:59:25 +1100 |
commit | 50c09a648f6d389cdc1657a0ccf54cf263aa8aa6 (patch) | |
tree | e25f3f2bc7ea9d0c1a1c6eef259c2d3f2ddb022a | |
parent | 7ee54ad057f05881d650443de13a6bf8099e7922 (diff) |
main: add binary support to ProgramBinary
V2: call generic mesa_program_binary() helper rather than driver
function directly to allow greater code sharing.
Signed-off-by: Timothy Arceri <[email protected]>
Signed-off-by: Jordan Justen <[email protected]> (v1)
Reviewed-by: Nicolai Hähnle <[email protected]> (v1)
Reviewed-by: Tapani Pälli <[email protected]>
-rw-r--r-- | src/mesa/main/shaderapi.c | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index b728b320ac4..51031e12ec9 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -2221,9 +2221,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 @@ -2234,20 +2231,25 @@ _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"); + 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 { + _mesa_program_binary(ctx, shProg, binaryFormat, binary, length); + } } |