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

Ian Romanick idr at freedesktop.org
Wed Mar 12 11:27:44 PDT 2014


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 03/05/2014 01:00 PM, Eric Anholt wrote:
> 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?

_mesa_valid_to_render calls _mesa_validate_program_pipeline.  If the
application calls glValidateProgramPipeline (getting an error),
changes the uniform, then calls glDrawArrays, the program will get
revalidated.

We should track some state (like sampler uniforms) to avoid some of
the draw-time validation cost.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.14 (GNU/Linux)

iEYEARECAAYFAlMgpyAACgkQX1gOwKyEAw/RfQCglFHX/2r7/8dDFplszXgQuh/D
HFEAn3cvjnO8W/+nxeCAa2sBLMNSes6Q
=Biw1
-----END PGP SIGNATURE-----


More information about the mesa-dev mailing list