mesa/sso: Implement ValidateProgramPipeline
authorGregory Hainaut <gregory.hainaut@gmail.com>
Sat, 29 Jun 2013 02:30:44 +0000 (19:30 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 25 Mar 2014 17:25:26 +0000 (10:25 -0700)
commit1c290680742ce5cb9a0a1019d0f971689335aabc
tree90f8a3574b4a87827373082ab741e11ecc977a83
parent95426b28ac716dafff4c797f66949244896a94fd
mesa/sso: Implement ValidateProgramPipeline

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@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/main/context.c
src/mesa/main/mtypes.h
src/mesa/main/pipelineobj.c
src/mesa/main/pipelineobj.h