On Wednesday, December 02, 2015 10:45:02 AM Timothy Arceri wrote: > On Tue, 2015-12-01 at 13:46 +0200, Tapani Pälli wrote: > > On 12/01/2015 02:13 AM, Timothy Arceri wrote: > > > Just because the validation passed the last time is was called > > > doesn't > > > automatically mean it will pass again the next time its called. > > > > This is a rather large hammer though :/ Maybe we should look at > > invalidating the pipeline when samplers are changed instead. Was > > there > > other issues this resolves/fixes than sampler validation? > > There are no other tests that this fixes however I believe that's just > because the tests use ValidateProgramPipeline to check for problems > rather than issuing a draw call. For example this patch is the > equivalent of doing this in ValidateProgramPipeline > > if (!ctx->_Shader->Validated) > _mesa_validate_program_pipeline(ctx, pipe, false); > > And this causes the CTS pipeline test to fail. The interesting thing is > that the piglit test this fixes also fails on Nvidia. > > The spec is somewhat confusing in its wording: > > "Therefore validation is done when the first rendering command which > triggers shader invocations is issued, to determine if the set of > active program objects can be executed." > > This seem like its saying we only need to check it on the first call > however even then ctx->_Shader->Validated may have been set by > ValidateProgramPipeline rather than validation triggered a rendering > command. > > Also the spec goes on to say: > > "An INVALID_OPERATION error is generated by any command that trans-fers > vertices to the GL or launches compute work" > > Which seems to conflict with the first statement. > > It seems to me the intention is to call validation each time as > relinking or changing samplers could cause validation to fail. > > Maybe we should have a test which does a draw call, then relinks with > SEPARABLE to false, then calls draw again and checks for a failure. > > A less hammer type approach may be to reset ctx->_Shader->Validated > after linking and when samplers are changed but we really need more > tests to make sure we get this right.
I agree with Tapani, performing shader validation on every draw call is a pretty big hammer, and will almost certainly impact performance - we really want less draw-time validation, where possible. Setting Validated = false when re-linking, changing program stages, or otherwise altering the pipeline sounds like a good idea. That way we validate it on the first draw following the change, but can avoid it after that. --Ken
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
