There are a couple of things I don't like about this patch. - I don't like how much information specific to constant fixups the table contains. - The "apple" field is weird. If you're going to have a callback function you might as well match that information there, if appropriate. On the other hand, I don't think you really need the callback function, you only match on vendor and card anyway. - What is the point of only allowing one fixup per card, and then adding QUIRK_NO_SANITY_CHECK to allow more fixups? You might as well just allow multiple fixups and apply them in the order they're defined. - Why do you store the quirk table in gl_info? It's never used from there. (I realise the next couple of patches do use it from there).
How about something like this:
struct wined3d_driver_quirk { enum wined3d_driver_platform platform; GL_Vendors vendor; GL_Cards card; void (*fixup)(WineD3D_GL_Info *gl_info) };
and just add a DWORD "quirk_flags" to gl_info.