[Piglit] [PATCH 1/4] ATI_fs: add api error tests

Eric Anholt eric at anholt.net
Wed Nov 22 00:56:07 UTC 2017


Miklós Máté <mtmkls at gmail.com> writes:

> On 21/11/17 21:09, Eric Anholt wrote:
>> Miklós Máté <mtmkls at gmail.com> writes:
>>> +
>>> +	piglit_report_result(PIGLIT_PASS);
>>> +}
>>> diff --git a/tests/spec/ati_fragment_shader/error02-inside.c b/tests/spec/ati_fragment_shader/error02-inside.c
>>> new file mode 100644
>>> index 000000000..5dee70cf6
>>> --- /dev/null
>>> +++ b/tests/spec/ati_fragment_shader/error02-inside.c
>>> @@ -0,0 +1,59 @@
>>> +/* TODO license header */
>>> +
>>> +/**
>>> + * Tests API errors for GL_ATI_fragment_shader.
>>> + * One for each paragraph in the Errors section.
>>> + */
>>> +
>>> +#include "piglit-util-gl.h"
>>> +
>>> +PIGLIT_GL_TEST_CONFIG_BEGIN
>>> +
>>> +	config.supports_gl_compat_version = 10;
>>> +	config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA;
>>> +
>>> +PIGLIT_GL_TEST_CONFIG_END
>>> +
>>> +enum piglit_result
>>> +piglit_display(void)
>>> +{
>>> +	/* UNREACHED */
>>> +	return PIGLIT_FAIL;
>>> +}
>>> +
>>> +#define check_gl_error(err) if (!piglit_check_gl_error(err)) piglit_report_result(PIGLIT_FAIL)
>>> +
>>> +void
>>> +piglit_init(int argc, char **argv)
>>> +{
>>> +	piglit_require_extension("GL_ATI_fragment_shader");
>>> +
>>> +	/*
>>> +	 * Paragraph 2 of the Errors section:
>>> +	 *
>>> +	 * The error INVALID_OPERATION is generated if GenFragmentShadersATI,
>>> +	 * BindFragmentShaderATI, DeleteFragmentShaderATI, or
>>> +	 * BeginFragmentShaderATI are specified inside a
>>> +	 * Begin/EndFragmentShaderATI pair.
>>> +	 */
>>> +
>>> +	glBeginFragmentShaderATI();
>>> +
>>> +	check_gl_error(GL_NO_ERROR);
>>> +	glGenFragmentShadersATI(1);
>>> +	check_gl_error(GL_INVALID_OPERATION);
>> Instead of the macro, we'll often have
>>
>> bool pass = true;
>>
>> ...
>>
>> pass = piglit_check_gl_error(GL_NO_ERROR) && pass
>> glGenFragmentShadersATI(1);
>> pass = piglit_check_gl_error(GL_INVALID_OPERATION) && pass
>>
>> ...
>>
>> piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
>>
>> That way you get to see multiple errors if there are different cases
>> failing.
> First I did that, but I had a difficult time finding out where Mesa 
> failed to throw the expected error, so I made the check fatal. If people 
> prefer non-fatal checks I can change it back.
>

piglit_check_gl_error() prints the file and line number of the check
that failed, to help you find it.

I'm not requiring a change here, just suggesting a way this has been
handled elsewhere.

>>> +	check_gl_error(GL_NO_ERROR);
>> I'd drop the GL_NO_ERROR checks -- you know there's no error because the
>> last thing you did is check the errors.
> As far as I understand the errors are pushed into a stack. I do these no 
> error checks to make sure the stack is empty before the critical call. 
> If it's not possible for one gl call to push more than one error into 
> the stack, then the no error checks can indeed be trimmed down in this test.

You can see the path in _mesa_error() -> _mesa_record_error() -- it's
just a single value, not a stack.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20171121/236cfd2d/attachment.sig>


More information about the Piglit mailing list