Module: wine Branch: master Commit: 7ba04e613296f1ab2e8d3ba19b755d0bce204c90 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7ba04e613296f1ab2e8d3ba19b...
Author: Stefan Dösinger stefan@codeweavers.com Date: Fri Nov 30 16:51:32 2007 +0100
wined3d: Detect the Intel GPU in macbooks.
---
dlls/wined3d/directx.c | 36 +++++++++++++++++++++++++++++++----- include/wine/wined3d_gl.h | 3 ++- 2 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index efe69eb..c712bb4 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -485,8 +485,9 @@ BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info) { gl_info->gl_vendor = VENDOR_NVIDIA; } else if (strstr(gl_string, "ATI")) { gl_info->gl_vendor = VENDOR_ATI; - } else if (strstr(gl_string, "Intel(R)") || - strstr(gl_info->gl_renderer, "Intel(R)")) { + } else if (strstr(gl_string, "Intel(R)") || + strstr(gl_info->gl_renderer, "Intel(R)") || + strstr(gl_string, "Intel Inc.")) { gl_info->gl_vendor = VENDOR_INTEL; } else if (strstr(gl_string, "Mesa")) { gl_info->gl_vendor = VENDOR_MESA; @@ -573,7 +574,28 @@ BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info) { } break;
- case VENDOR_INTEL: + case VENDOR_INTEL: + /* Apple and Mesa version strings look differently, but both provide intel drivers */ + if(strstr(gl_string, "APPLE")) { + /* [0-9]+.[0-9]+ APPLE-[0-9]+.[0.9]+.[0.9]+ + * We only need the first part, and use the APPLE as identification + * "1.2 APPLE-1.4.56" + */ + gl_string_cursor = gl_string; + major = atoi(gl_string_cursor); + while (*gl_string_cursor <= '9' && *gl_string_cursor >= '0') { + ++gl_string_cursor; + } + + if (*gl_string_cursor++ != '.') { + ERR_(d3d_caps)("Invalid MacOS-Intel version string: %s\n", debugstr_a(gl_string)); + break; + } + + minor = atoi(gl_string_cursor); + break; + } + case VENDOR_MESA: gl_string_cursor = strstr(gl_string, "Mesa"); gl_string_cursor = strstr(gl_string_cursor, " "); @@ -1132,7 +1154,11 @@ BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info) { } break; case VENDOR_INTEL: - if (strstr(gl_info->gl_renderer, "915GM")) { + if (strstr(gl_info->gl_renderer, "GMA 950")) { + /* MacOS calls the card GMA 950, but everywhere else the PCI ID is named 945GM */ + gl_info->gl_card = CARD_INTEL_I945GM; + vidmem = 64; + } else if (strstr(gl_info->gl_renderer, "915GM")) { gl_info->gl_card = CARD_INTEL_I915GM; } else if (strstr(gl_info->gl_renderer, "915G")) { gl_info->gl_card = CARD_INTEL_I915G; @@ -1165,7 +1191,7 @@ BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info) { else gl_info->gl_card = CARD_NVIDIA_RIVA_128; } - TRACE("FOUND (fake) card: 0x%x (vendor id), 0x%x (device id)\n", gl_info->gl_vendor, gl_info->gl_card); + TRACE_(d3d_caps)("FOUND (fake) card: 0x%x (vendor id), 0x%x (device id)\n", gl_info->gl_vendor, gl_info->gl_card);
/* If we have an estimate use it, else default to 64MB; */ if(vidmem) diff --git a/include/wine/wined3d_gl.h b/include/wine/wined3d_gl.h index ec2edaf..86ad677 100644 --- a/include/wine/wined3d_gl.h +++ b/include/wine/wined3d_gl.h @@ -3126,7 +3126,8 @@ typedef enum _GL_Cards { CARD_INTEL_I855G = 0x3582, CARD_INTEL_I865G = 0x2572, CARD_INTEL_I915G = 0x2582, - CARD_INTEL_I915GM = 0x2592 + CARD_INTEL_I915GM = 0x2592, + CARD_INTEL_I945GM = 0x27a2, /* Same as GMA 950?? */ } GL_Cards;
#define WINE_DEFAULT_VIDMEM 64*1024*1024