Stefan Dösinger : wined3d: Detect the Intel GPU in macbooks.

Alexandre Julliard julliard at winehq.org
Mon Dec 3 09:17:50 CST 2007


Module: wine
Branch: master
Commit: 7ba04e613296f1ab2e8d3ba19b755d0bce204c90
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7ba04e613296f1ab2e8d3ba19b755d0bce204c90

Author: Stefan Dösinger <stefan at 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




More information about the wine-cvs mailing list