[Piglit] shader_runner: ignoring uniforms in [test] header when location cannot be found instead of returning PIGLIT_FAIL
Ian Romanick
idr at freedesktop.org
Tue Jul 9 23:38:30 UTC 2019
On 7/8/19 8:08 PM, Abel Briggs wrote:
> Maybe a command line argument could work?
Yeah... if there's no need to have tests with unused uniforms in piglit,
that's probably the easiest way.
> Thanks,
>
> Abel
>
> ------------------------------------------------------------------------
> *From:* Ian Romanick <idr at freedesktop.org>
> *Sent:* Monday, July 8, 2019 2:27:16 PM
> *To:* Abel Briggs; piglit at lists.freedesktop.org
> *Subject:* Re: [Piglit] shader_runner: ignoring uniforms in [test]
> header when location cannot be found instead of returning PIGLIT_FAIL
>
> On 7/8/19 11:57 AM, Abel Briggs wrote:
>> Hi,
>>
>> Recently, I've been working on scripts for a GLSL fuzz testing framework
>> that use piglit's shader_runner to render shaders. As part of the test
>> generation process, shaders can be generated that declare uniforms
>> without using them (which is valid GLSL according to glslangvalidator).
>> One of my scripts turns the shader and uniform data from the framework's
>> test format into a shader_test file and runs it via shader_runner_gles3.
>>
>> However, it seems that some of these unused uniforms are optimized away
>> when the shader is compiled, and when shader_runner tries to use the
>> uniform data in the [test] header, it can't find the location of the
>> given uniform and throws an error.
>
> Yes. We did that intentionally because it almost always means that
> there is an error in the test case. Over the years, this has helped me
> catch errors in several tests that I have developed.
>
>> Relevant code (there are similar pieces of code in the file for vertex
>> and subuniforms):
>>
>> piglit/tests/shaders/shader_runner.c, line 2289:
>>> loc = glGetUniformLocation(prog, name);
>>> if (loc < 0) {
>>> printf("cannot get location of uniform \"%s\"\n",
>>> name);
>>> piglit_report_result(PIGLIT_FAIL);
>>> }
>>
>> I'd like to discuss whether it'd be possible to instead just ignore a
>> piece of uniform data if the corresponding uniform can't be found in the
>> compiled shader (I'd be willing to submit a patch for this).
>
> Rather than always ignoring the error, I'd prefer a mechanism where
> specific tests can request that the error be ignored. I'm not sure what
> that would look like. Maybe a directive in the [test] section that
> disables this specific error? Maybe a new uniform setter directive that
> silently fails if the location for that uniform cannot be found?
> Something else?
>
>> Something like:
>>
>>> loc = glGetUniformLocation(prog, name);
>>> if (loc < 0) {
>>> printf("cannot get location of uniform \"%s\"\n",
>>> name);
>>> return;
>>> }
>>
>> From my limited grepping of the code, there doesn't seem to be anything
>> that would fail horribly if this were to be changed (as the setting of a
>> uniform only occurs at the end of set_uniform, after various checks like
>> this), but please correct me if I'm wrong about any of this.
>>
>> _______________________________________________
>> Piglit mailing list
>> Piglit at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/piglit
>>
>
More information about the Piglit
mailing list