[Piglit] [PATCH] egl: Test more invalid GLES2 context versions

Ian Romanick idr at freedesktop.org
Tue Nov 6 16:21:37 PST 2012


On 11/06/2012 12:51 PM, Chad Versace wrote:
> On 11/06/2012 12:19 PM, Ian Romanick wrote:
>> On 11/05/2012 02:53 PM, Chad Versace wrote:
>>> In test egl-create-context-invalid-gl-version, try to create OpenGL ES2
>>> contexts with additional invalid versions: 3.2, 3.9, 4.7.
>>>
>>> Fails with mesa-84b437 on Intel Sandybridge.
>>>
>>> CC: Matt Turner <mattst88 at gmail.com>
>>> ---
>>>    tests/egl/spec/egl_khr_create_context/invalid-gl-version.c | 3 +++
>>>    1 file changed, 3 insertions(+)
>>>
>>> diff --git a/tests/egl/spec/egl_khr_create_context/invalid-gl-version.c
>>> b/tests/egl/spec/egl_khr_create_context/invalid-gl-version.c
>>> index ee33fb9..d83c40b 100644
>>> --- a/tests/egl/spec/egl_khr_create_context/invalid-gl-version.c
>>> +++ b/tests/egl/spec/egl_khr_create_context/invalid-gl-version.c
>>> @@ -82,6 +82,9 @@ int main(int argc, char **argv)
>>>            pass = pass && try_version(0, 0);
>>>            pass = pass && try_version(0, -1);
>>>            pass = pass && try_version(1, 2);
>>> +        pass = pass && try_version(3, 2);
>>> +        pass = pass && try_version(3, 9);
>>> +        pass = pass && try_version(4, 7);
>>
>> All of the other subtests check for GLES versions that can *never* be value.  It
>> is conceivable that someday 3.2 or 3.9 or 4.7 could be valid.
>>
>> One test that we are missing is a test that tries to create a context of a
>> particular version and verifies that it got a context of that version.  It seems
>> like that would be the right way to check for this problem. You may get a
>> context when you ask for 3.2, but I bet glGetString(GL_VERSION) or
>> glGetIntegerv(GL_MAJOR_VERSION) / glGetIntegerv(GL_MINOR_VERSION) only say 3.0.
>>
>> My preference is to not add a test that may break on a future valid
>> implementation.  We need that other test anyway.
>
> That's a sensible suggestion. I'll write that test.
>
> In that new test, I still want to verify that Mesa returns EGL_BAD_MATCH if
> context creation fails soley due to the driver not supporting the requested,
> perhaps invalid, version. Currently, in situations where EGL_BAD_MATCH is
> the correct error to emit, Mesa emits one of EGL_SUCCESS (!),
> EGL_BAD_CONFIG, or EGL_BAD_MATCH depending on where internally context
> creation failed. We really need a test to ensure that Mesa doesn't do that.

Can you refresh my memory... what are the cases where we generate 
EGL_BAD_CONFIG?

> I see a way to write the new test so that, if context creation fails, the
> only reasonably expected error is EGL_BAD_MATCH. The pattern looks like the
> code below. Let me know if you think this is a sensible approach.

I think so.

> // A minimal ES2 config.
> EGLint config_attrs[] = {
>      EGL_BUFFER_SIZE, 32,
>      EGL_RED_SIZE,     1,
>      EGL_BLUE_SIZE,    1,
>      EGL_GREEN_SIZE,   1,
>      EGL_ALPHA_SIZE,   1,
>
>      EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,

EGL_OPENGL_ES3_BIT_KHR?

>
>      EGL_NONE,
> };
>
> EGLint context_attrs[] = {
>       EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
>       EGL_CONTEXT_MINOR_VERSION_KHR, 2,
>       EGL_NONE,
> };
>
> EGLConfig config;
> EGLContext ctx;
>
> eglBindAPI(EGL_OPENGL_ES);
> eglChooseConfig(..., config_attrs, &config);
> assert(config != 0);
> ctx = eglCreateContext(..., config, context_attrs);
>
> // If the driver supports the requested context version and api,
> // then we can reasonably expect context creation to succeed because
> // the chosen config is minimal. Therefore, if context creation fails,
> // it is safe to assume that failure occurred due to the driver not
> // supporting the requested context version and api, in which case
> // the EGL_KHR_create_context spec requires EGL_BAD_MATCH to be emitted.
>
> if (ctx) {
>    // Verify the context's actual version.
> } else {
>    if (eglGetError() == EGL_BAD_MATCH)
>       PASS();
>    else
>       FAIL();
> }
>



More information about the Piglit mailing list