[Mesa-dev] [PATCH 1/2] mesa: move pipeline input/output validation inside _mesa_validate_program_pipeline()

Tapani Pälli tapani.palli at intel.com
Sun Dec 6 22:12:15 PST 2015


Does this fix something in the remaining OpenGL ES 3.1 CTS failures? If 
not I think we should think about this more, how can we move this (maybe 
just partially) to happen already during UseProgramStages, it feels too 
expensive for draw time.

FYI I'm working on to fix remaining SSO CTS failure(s), let me know if 
you are working on this as well. I have a partial fix here which I'm 
trying to rewrite to be cheaper (this is a bit similar case, too expensive):

http://cgit.freedesktop.org/~tpalli/mesa/log/?h=fix_sso


On 12/06/2015 06:33 AM, Timothy Arceri wrote:
> This allows validation to be done on rendering calls also.
>
> Fixes 3 dEQP-GLES31.functional.separate tests.
>
> Cc: "11.1" <mesa-stable at lists.freedesktop.org>
> Cc: Tapani Pälli <tapani.palli at intel.com>
> Cc: Kenneth Graunke <kenneth at whitecape.org>
> ---
>   src/mesa/main/pipelineobj.c | 30 +++++++++++++++---------------
>   1 file changed, 15 insertions(+), 15 deletions(-)
>
> diff --git a/src/mesa/main/pipelineobj.c b/src/mesa/main/pipelineobj.c
> index 6710d0d..d8c9ded 100644
> --- a/src/mesa/main/pipelineobj.c
> +++ b/src/mesa/main/pipelineobj.c
> @@ -898,6 +898,21 @@ _mesa_validate_program_pipeline(struct gl_context* ctx,
>      if (!_mesa_sampler_uniforms_pipeline_are_valid(pipe))
>         goto err;
>
> +   /* Validate inputs against outputs, this cannot be done during linking
> +    * since programs have been linked separately from each other.
> +    *
> +    * From OpenGL 4.5 Core spec:
> +    *     "Separable program objects may have validation failures that cannot be
> +    *     detected without the complete program pipeline. Mismatched interfaces,
> +    *     improper usage of program objects together, and the same
> +    *     state-dependent failures can result in validation errors for such
> +    *     program objects."
> +    *
> +    * OpenGL ES 3.1 specification has the same text.
> +    */
> +   if (!_mesa_validate_pipeline_io(pipe))
> +      goto err;
> +
>      pipe->Validated = GL_TRUE;
>      return GL_TRUE;
>
> @@ -933,21 +948,6 @@ _mesa_ValidateProgramPipeline(GLuint pipeline)
>       * false for IsBound to avoid an error being thrown.
>       */
>      _mesa_validate_program_pipeline(ctx, pipe, false);
> -
> -   /* Validate inputs against outputs, this cannot be done during linking
> -    * since programs have been linked separately from each other.
> -    *
> -    * From OpenGL 4.5 Core spec:
> -    *     "Separable program objects may have validation failures that cannot be
> -    *     detected without the complete program pipeline. Mismatched interfaces,
> -    *     improper usage of program objects together, and the same
> -    *     state-dependent failures can result in validation errors for such
> -    *     program objects."
> -    *
> -    * OpenGL ES 3.1 specification has the same text.
> -    */
> -   if (!_mesa_validate_pipeline_io(pipe))
> -      pipe->Validated = GL_FALSE;
>   }
>
>   void GLAPIENTRY
>


More information about the mesa-dev mailing list