[Mesa-dev] [PATCH 12/12] mesa/sso: Implement ValidateProgramPipeline

Eric Anholt eric at anholt.net
Wed Mar 5 13:00:33 PST 2014


Ian Romanick <idr at freedesktop.org> writes:

> From: Gregory Hainaut <gregory.hainaut at gmail.com>
>
> Implementation note:
> I don't use context for ralloc (don't know how).
>
> The check on PROGRAM_SEPARABLE flags is also done when the pipeline
> isn't bound.  It doesn't make any sense in a DSA style API.
>
> Maybe we could replace _mesa_validate_program by
> _mesa_validate_program_pipeline.  For example we could recreate a dummy
> pipeline object.  However the new function checks also the
> TEXTURE_IMAGE_UNIT number not sure of the impact.
>
> V2:
> Fix memory leak with ralloc_strdup
> Formatting improvement
>
> V3 (idr):
> * Actually fix the leak of the InfoLog. :)
> * Directly generate logs in to gl_pipeline_object::InfoLog via
>   ralloc_asprintf isntead of using a temporary buffer.
> * Split out from previous uber patch.
> * Change spec references to include section numbers, etc.
> * Fix a bug in checking that a different program isn't active in a stage
>   between two stages that have the same program.  Specifically,
>
>  if (pipe->CurrentVertexProgram->Name == pipe->CurrentGeometryProgram->Name &&
>      pipe->CurrentGeometryProgram->Name != pipe->CurrentVertexProgram->Name)
>
> should have been
>
>  if (pipe->CurrentVertexProgram->Name == pipe->CurrentFragmentProgram->Name &&
>      pipe->CurrentGeometryProgram->Name != pipe->CurrentVertexProgram->Name)
>
> v4 (idr): Rework to use CurrentProgram array in loops.
>
> Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> diff --git a/src/mesa/main/pipelineobj.c b/src/mesa/main/pipelineobj.c
> index 3db97c0..d371e88 100644
> --- a/src/mesa/main/pipelineobj.c
> +++ b/src/mesa/main/pipelineobj.c

> +   /* Section 2.11.11 (Shader Execution), subheading "Validation," of the
> +    * OpenGL 4.1 spec says:
> +    *
> +    *     "[INVALID_OPERATION] is generated by any command that transfers
> +    *     vertices to the GL if:
> +    *
> +    *         ...
> +    *
> +    *         - Any two active samplers in the current program object are of
> +    *           different types, but refer to the same texture image unit.
> +    *
> +    *         - The number of active samplers in the program exceeds the
> +    *           maximum number of texture image units allowed."
> +    */
> +   if (!_mesa_sampler_uniforms_pipeline_are_valid(pipe))
> +      goto err;
> +
> +   pipe->Validated = GL_TRUE;
> +   return GL_TRUE;

What ensures that the sampler validate will be redone when sampler
uniforms change?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 818 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140305/4feab8d2/attachment.pgp>


More information about the mesa-dev mailing list