Ian Romanick <i...@freedesktop.org> writes: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 03/05/2014 01:00 PM, Eric Anholt wrote: >> Ian Romanick <i...@freedesktop.org> writes: >> >>> From: Gregory Hainaut <gregory.hain...@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.roman...@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.
I was thinking of the transition from a working pipeline with non-overlapping samplers to overlapping samplers of different types.
pgp1P8ovOt10x.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev