[Mesa-dev] [PATCH 1/5] mesa: Fix errors values returned by glShaderBinary()

Ben Widawsky ben at bwidawsk.net
Thu Jun 4 18:38:06 PDT 2015


On Wed, Mar 11, 2015 at 10:01:24AM +0100, Eduardo Lima Mitev wrote:
> Page 68, section 7.2 'Shader Binaries" of the of the OpenGL ES 3.1,
> and page 88 of the OpenGL 4.5 specs state:
> 
>     "An INVALID_VALUE error is generated if count or length is negative.
>      An INVALID_ENUM error is generated if binaryformat is not a supported
>      format returned in SHADER_BINARY_FORMATS."
> 
> Currently, an INVALID_OPERATION error is returned for all cases.
> 
> Fixes 1 dEQP test:
> * dEQP-GLES3.functional.negative_api.shader.shader_binary
> ---
>  src/mesa/main/shaderapi.c | 15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
> index 5731d58..49a9c80 100644
> --- a/src/mesa/main/shaderapi.c
> +++ b/src/mesa/main/shaderapi.c
> @@ -1711,7 +1711,20 @@ _mesa_ShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat,
>     (void) binaryformat;
>     (void) binary;
>     (void) length;
> -   _mesa_error(ctx, GL_INVALID_OPERATION, "glShaderBinary");
> +
> +   /* Page 68, section 7.2 'Shader Binaries" of the of the OpenGL ES 3.1, and
> +    * page 88 of the OpenGL 4.5 specs state:
> +    *
> +    *     "An INVALID_VALUE error is generated if count or length is negative.
> +    *      An INVALID_ENUM error is generated if binaryformat is not a supported
> +    *      format returned in SHADER_BINARY_FORMATS."
> +    */
> +   if (n < 0 || length < 0) {
> +      _mesa_error(ctx, GL_INVALID_VALUE, "glShaderBinary(count or length < 0)");
> +      return;
> +   }
> +
> +   _mesa_error(ctx, GL_INVALID_ENUM, "glShaderBinary(format)");
>  }
>  
>  

Seems like a stupid test, seems like INVALID_ENUM is always the right choice
given the situation...

Anyway, I see this
(https://www.khronos.org/opengles/sdk/docs/man3/html/glShaderBinary.xhtml):

  GL_INVALID_OPERATION is generated if more than one of the handles in shaders
  refers to the same shader object. 

  GL_INVALID_VALUE is generated if the data pointed to by binary does not match
  the format specified by binaryFormat. 

Kinda confused what's right. It doesn't seem to match your implementation.


More information about the mesa-dev mailing list