http://bugs.winehq.org/show_bug.cgi?id=21515
--- Comment #45 from P.Panon ppanon@shaw.ca 2010-02-10 02:39:50 --- Thanks for testing cruiseoveride.
The two quirks which are turned on for ATIs and not for the Mesa ATI driver are quirk_ati_dx9() - controlled by match_ati_r300_to_500() - and quirk_one_point_sprite() which is controlled by match_fglrx(). with your patch our card was being misidentified as an R300 so both quirks would be activated.
It looks like quirk_one_point_sprite() is a work-around for a specific bug/crash in the ATI fglrx driver, so that seems less likely to be what's missing.
From the comment on quirk_ati_dx9(), it looks like it's currently applicable to
both the fglrx driver and the MacOS ATI driver. So that looks like the best candidate (especially since that's one I had a question about that Stefan and the other Wine Developers haven't had a chance to address). It's a texture-related workaround so perhaps it might give the effect you're seeing. The thing I don't understand is why it should be limited to R300 to R500 on the fglrx driver, since it seems to affect HD cards as well, unless the fglrx driver works around it internally but only for HD cards somehow.
Anyways can you please try replacing match_ati_r300_to_500() with:
static BOOL match_ati_r300_to_500(const struct wined3d_gl_info *gl_info, const char *gl_renderer, enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device) { if (card_vendor != HW_VENDOR_ATI) return FALSE; if (device == CARD_ATI_RADEON_9500) return TRUE; if (device == CARD_ATI_RADEON_X700) return TRUE; if (device == CARD_ATI_RADEON_X1600) return TRUE; if (gl_vendor == GL_VENDOR_MESA) return TRUE; return FALSE; }
If that works for you, I'll incorporate it into the patch.
Perhaps the match function should be renamed to something like match_ati_p2_textures_only() and maybe there should also be an if (gl_vendor == GL_VENDOR_ATI) return TRUE; added as well. Hopefully Stefan will let us know.