From a203876cc796c550f892374181ffe71d4a950f67 Mon Sep 17 00:00:00 2001 From: Yann Droneaud Date: Tue, 16 Jun 2009 17:16:42 +0200 Subject: [PATCH] wined3d: Improved ATI Radeon HD 4xxx detection. --- dlls/wined3d/directx.c | 42 +++++++++++++++++++++++++++++++++------ dlls/wined3d/wined3d_gl.h | 13 +++++++++++- 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 3354f7ba529..f96d10192f8 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -1272,16 +1272,43 @@ static BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info) { } break; case VENDOR_ATI: + /* See http://developer.amd.com/drivers/pc_vendor_id/Pages/default.aspx + * + * beware: renderer string do not match exact card model, + * eg HD 4800 is returned for multiple card, even for RV790 based one + */ if(WINE_D3D9_CAPABLE(gl_info)) { /* Radeon R7xx HD4800 - highend */ - if (strstr(gl_info->gl_renderer, "HD 4800") || - strstr(gl_info->gl_renderer, "HD 4830") || - strstr(gl_info->gl_renderer, "HD 4850") || - strstr(gl_info->gl_renderer, "HD 4870") || - strstr(gl_info->gl_renderer, "HD 4890")) + if (strstr(gl_info->gl_renderer, "HD 4800") || /* Radeon RV7xx HD48xx generic renderer string */ + strstr(gl_info->gl_renderer, "HD 4830") || /* Radeon RV770 */ + strstr(gl_info->gl_renderer, "HD 4850") || /* Radeon RV770 */ + strstr(gl_info->gl_renderer, "HD 4870") || /* Radeon RV770 */ + strstr(gl_info->gl_renderer, "HD 4890")) /* Radeon RV790 */ { gl_info->gl_card = CARD_ATI_RADEON_HD4800; - vidmem = 512; /* HD4800 cards use 512-1024MB */ + vidmem = 512; /* note: HD4890 cards use 1024MB */ + } + /* Radeon R740 HD4700 - midend */ + else if (strstr(gl_info->gl_renderer, "HD 4700") || /* Radeon RV770 */ + strstr(gl_info->gl_renderer, "HD 4770")) /* Radeon RV740 */ + { + gl_info->gl_card = CARD_ATI_RADEON_HD4700; + vidmem = 512; + } + /* Radeon R730 HD4600 - midend */ + else if (strstr(gl_info->gl_renderer, "HD 4600") || /* Radeon RV730 */ + strstr(gl_info->gl_renderer, "HD 4650") || /* Radeon RV730 */ + strstr(gl_info->gl_renderer, "HD 4670")) /* Radeon RV730 */ + { + gl_info->gl_card = CARD_ATI_RADEON_HD4600; + vidmem = 512; + } + /* Radeon R710 HD4500/HD4350 - lowend */ + else if (strstr(gl_info->gl_renderer, "HD 4350") || /* Radeon RV710 */ + strstr(gl_info->gl_renderer, "HD 4550")) /* Radeon RV710 */ + { + gl_info->gl_card = CARD_ATI_RADEON_HD4350; + vidmem = 256; } /* Radeon R6xx HD2900/HD3800 - highend */ else if (strstr(gl_info->gl_renderer, "HD 2900") || @@ -4023,6 +4050,9 @@ static const struct driver_version_information driver_version_table[] = { {VENDOR_ATI, CARD_ATI_RADEON_HD2300, "ATI Mobility Radeon HD 2300", 6, 14, 10, 6764 }, {VENDOR_ATI, CARD_ATI_RADEON_HD2600, "ATI Mobility Radeon HD 2600", 6, 14, 10, 6764 }, {VENDOR_ATI, CARD_ATI_RADEON_HD2900, "ATI Radeon HD 2900 XT", 6, 14, 10, 6764 }, + {VENDOR_ATI, CARD_ATI_RADEON_HD4350, "ATI Radeon HD 4350", 6, 14, 10, 6764 }, + {VENDOR_ATI, CARD_ATI_RADEON_HD4600, "ATI Radeon HD 4600 Series", 6, 14, 10, 6764 }, + {VENDOR_ATI, CARD_ATI_RADEON_HD4700, "ATI Radeon HD 4700 Series", 6, 14, 10, 6764 }, {VENDOR_ATI, CARD_ATI_RADEON_HD4800, "ATI Radeon HD 4800 Series", 6, 14, 10, 6764 }, /* TODO: Add information about legacy ATI hardware, Intel and other cards */ diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h index aa598935b2a..9f508a8dafa 100644 --- a/dlls/wined3d/wined3d_gl.h +++ b/dlls/wined3d/wined3d_gl.h @@ -3326,7 +3326,18 @@ typedef enum _GL_Cards { CARD_ATI_RADEON_HD2600 = 0x9581, CARD_ATI_RADEON_HD2900 = 0x9400, CARD_ATI_RADEON_HD3200 = 0x9620, - CARD_ATI_RADEON_HD4800 = 0x944c, + CARD_ATI_RADEON_HD4350 = 0x954f, + CARD_ATI_RADEON_HD4550 = 0x9540, + CARD_ATI_RADEON_HD4600 = 0x9495, + CARD_ATI_RADEON_HD4650 = 0x9498, + CARD_ATI_RADEON_HD4670 = 0x9490, + CARD_ATI_RADEON_HD4700 = 0x944e, + CARD_ATI_RADEON_HD4770 = 0x94b3, + CARD_ATI_RADEON_HD4800 = 0x944c, /* picked one value between 9440,944c,9442,9460 */ + CARD_ATI_RADEON_HD4830 = 0x944c, + CARD_ATI_RADEON_HD4850 = 0x9442, + CARD_ATI_RADEON_HD4870 = 0x9440, + CARD_ATI_RADEON_HD4890 = 0x9460, CARD_NVIDIA_RIVA_128 = 0x0018, CARD_NVIDIA_RIVA_TNT = 0x0020,