Jeremy Huddleston jeremyhu at freedesktop.org
Thu May 20 09:08:12 PDT 2010

Hi Kristian,

Thanks for your comments.  I sent out a few requests to the mailing list a while back.  I just took the silence as "whatever.  it doesn't really affect us."  ... that being said, I actually share your concern about this #ifdef-crud.  My main reason for integrating it as-is was to avoid spending days rebasing it the next time something big happens (like the directory change).  Unfortunately, my focus has been diverted elsewhere over the past few months, so I wasn't able to clean this all up as I had hoped by now.

The main problem was that George forked from Mesa-7.2 and didn't preserve any non-Apple code.  It took me quite a while to re-integrate these changes to this point, and hopefully things will get a bit smoother as I refactor it.

George decided to use a separate dispatch table for the gl functions, which has served us in the short term, but now that I'm re-integrating these changes, I want to rewrite our dispatch code to use the existing dispatch.  This should then let us eliminate more of these ifdefs and also start including support for indirect.

I like the idea of using a similar approach for the glX functions, but for now, I'm going to try making the GLX_USE_APPLEGL way more similar to the !GLX_USE_APPLEGL way.

I'm sorry for any difficulty this has caused.  Feel free to "break" Apple and ping me to fix our case.


On May 20, 2010, at 06:24, Kristian Høgsberg wrote:

> Hi Jeremy,
> First of all, let me say that I'm sorry I didn't review your work
> before it was committed, that would have been the right time to
> address this.  Anyway, my problem is that the addition of even more
> #ifdef's to the glx client code makes an already tangled code base
> harder to read and work with.  Even worse, a lot of the new #ifndef
> GLX_USE_APPLEGL is of the form
> PUBLIC void
> glXCopyContext(Display * dpy, GLXContext source,
>               GLXContext dest, unsigned long mask)
> {
>  /* Apple GL code */
> #else
>  /* What was there before */
> #endif
> }
> which is just screaming out for a vtable implementation.  There are
> places where code is shared, but it's often just a small snippet like
> if (!dpy) return NULL; or it's a bigger piece of code that can be put
> in a common function and called from the different implementations.
> Of course, the existing code already did this to some extent with the
> direct/indirect code paths.  Most of these cases look like
>   if (gc->driContext) {
>      /* direct rendering case */
>   }
>   /* fall through to indirect case */
> #endif
>   /* indirect case */
> which would be handled just fine by the vtable approach as well: at
> context creation time, we set the context vtable pointer to the
> direct, indirect or applegl functions and this will just work.  I
> wanted to do some of this in the past, but I didn't feel like sinking
> too much work into the glx code before the license change.
> Now, I'm not saying that we need to do this refactoring now - it's
> certainly not a priority for me right now.  But as a minimum, I'd like
> us to be on the same page with where this code should be, and
> hopefully we can work towards a cleaner code base.  FIguring out
> what's going on in any of the glx entrypoints is just too hard right
> now with all the #ifdef spaghetti.
> Kristian

More information about the mesa-dev mailing list