[Piglit] [PATCH 5/5] glx_ext_create_context_es2_profile: Verify that the invalid ES versions are rejected

Ian Romanick idr at freedesktop.org
Tue Jun 12 15:13:54 PDT 2012


On 06/12/2012 02:40 PM, James Jones wrote:
> On 6/12/12 2:25 PM, Ian Romanick wrote:
>> From: Ian Romanick<ian.d.romanick at intel.com>
>>
>> NVIDIA's closed-source driver fails this test.  GLXBadProfileARB is
>> generated instead of BadMatch.  The specification isn't specific about
>> what error should be generated, but I don't think GLXBadProfileARB is
>> correct.  GLXBadProfileARB seems to only be generated in cases where
>> the bit mask specified for GLX_CONTEXT_PROFILE_MASK_ARB is invalid.
>> Cases where the GLX_CONTEXT_PROFILE_MASK_ARB is incongruous with the
>> specified version either result in GLX_CONTEXT_PROFILE_MASK_ARB being
>> ignored or BadMatch.
>
> GLXBadProfileARB fell out more naturally from our implementation. I
> see no good argument for either side. I think I could construct an
> equally convincing case for generating GLXBadProfileARB, but I don't
> have a strong opinion. If you really want it to be BadMatch, I can
> update our implementation and the spec to conform to that as well, so we
> can be consistent at least.

Since it appears you are the only shipping implementation, I'm content 
with having the first one be the winner.  I'll submit a bug against the 
spec with some suggested language change.

Something like...

Replace:

    "... If the GLX_CONTEXT_ES2_PROFILE_BIT_EXT bit is set, and the
     requested version is 2.0, then a context implementing OpenGL ES 2.0
     is returned; otherwise, if the requested OpenGL version is less than
     3.2, GLX_CONTEXT_PROFILE_MASK_ARB is ignored and the functionality
     of the context is determined solely by the requested version."

with

    "... If the GLX_CONTEXT_ES2_PROFILE_BIT_EXT bit is set, and the
     requested version is 2.0, then a context implementing OpenGL ES 2.0
     is returned.  If the GLX_CONTEXT_ES2_PROFILE_BIT_EXT bit is set,
     and the requested version is not 2.0, the error GLXBadProfileARB is
     generated.  Otherwise, if the requested OpenGL version is less than
     3.2, GLX_CONTEXT_PROFILE_MASK_ARB is ignored and the functionality
     of the context is determined solely by the requested version."

The original language is, as worded, broken anyway.  It implies that if 
you specify GLX_CONTEXT_ES2_PROFILE_BIT_EXT and 2.1, that a desktop 
OpenGL 2.1 context should be created.

Generating GLXBadProfileARB is also consistent with

      "* If attribute GLX_CONTEXT_PROFILE_MASK_ARB has no bits set; has
         any bits set other than GLX_CONTEXT_CORE_PROFILE_BIT_ARB and
         GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; has more than one of
         these bits set; or *if the implementation does not support the
         requested profile*, then GLXBadProfileARB is generated."
         (emphasis mine)


More information about the Piglit mailing list