[Mesa-dev] [PATCH 12/12] mesa/sso: Implement ValidateProgramPipeline
Eric Anholt
eric at anholt.net
Thu Mar 13 10:52:20 PDT 2014
Ian Romanick <idr at freedesktop.org> writes:
> -----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.
I was thinking of the transition from a working pipeline with
non-overlapping samplers to overlapping samplers of different types.
-------------- 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/20140313/07dac9c1/attachment.pgp>
More information about the mesa-dev
mailing list