[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