[Mesa-dev] [PATCH] glxinfo: add support for creating/querying core-profile contexts

Brian Paul brianp at vmware.com
Mon Jun 13 06:45:50 PDT 2011


On 06/12/2011 12:56 PM, Gustaw Smolarczyk wrote:
> I found some bugs in this code.
>
> 2011/6/11 Brian Paul<brianp at vmware.com>:
>> The -c flag says to try to create a core profile (no legacy features)
>> using glXCreateContextAttribsARB().  A core profile may advertise a
>> different set of extensions than a compatibility profile (though,
>> the only difference with NVIDIA's driver is the presence of
>> GL_ARB_compatibility).  Also note that extensions need to be queried
>> one at a time with glGetStringi().


>> +   /* install X error handler */
>> +   old_handler = XSetErrorHandler(create_context_error_handler);
>> +   CreateContextErrorFlag = False;
>> +
>> +   /* try creating context */
>> +   context = glXCreateContextAttribsARB_func(dpy,
>> +                                             fbconfig,
>> +                                             0, /* share_context */
>> +                                             True, /* direct */
>> +                                             attribs);
>> +
>> +   /* restore error handler */
>> +   XSetErrorHandler(old_handler);
>> +
>> +   if (CreateContextErrorFlag)
>> +      context = 0;
>
> The context should be tested against being direct. For example, fglrx
> will happily create "4.2" context, but it will be just default
> indirect one.

So you see "OpenGL version string: 4.2" in the output?  That really 
shouldn't happen.  Seems like that's a fgrlx bug.



>> +   if (coreProfile) {
>> +      /* Try to create a core profile, starting with the newest version of
>> +       * GL that we're aware of.  If we don't specify the version
>> +       */
>> +      int i;
>> +      for (i = NUM_GL_VERSIONS - 2; i>  0 ; i--) {
>> +         ctx = create_context_flags(dpy, config,
>> +                                    gl_versions[i].major,
>> +                                    gl_versions[i].minor,
>> +                                    0x0,
>> +                                    GLX_CONTEXT_CORE_PROFILE_BIT_ARB);
>> +         if (ctx)
>> +            break;
>> +      }
>> +      if (!ctx) {
>> +         /* couldn't get core profile context */
>> +         return 0;
>> +      }
>
> There's something missing here. If ctx is not NULL, it will be
> overwritten by code below. There should be "return ctx;" line here
> IMHO.

Thanks.  I was mucking with that right before I quit for the day and 
posted my patch.  I'll fix it.

-Brian


More information about the mesa-dev mailing list