Apple/Safari: Enable WebGL multisampling on ATI cards
authordino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Feb 2012 17:34:59 +0000 (17:34 +0000)
committerdino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Feb 2012 17:34:59 +0000 (17:34 +0000)
for OS X 10.7.2 and above.
https://bugs.webkit.org/show_bug.cgi?id=77922

Reviewed by Chris Marrin.

Follow Chrome's lead to allow WebGL antialiasing
on ATI cards as long as we're on 10.7.2 and above.

No new tests. Covered by existing tests.

* platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
(WebCore::systemAllowsMultisamplingOnATICards):
(WebCore):
(WebCore::GraphicsContext3D::validateAttributes):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@106956 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp

index faf7cec..1802fc2 100644 (file)
@@ -1,3 +1,21 @@
+2012-02-07  Dean Jackson  <dino@apple.com>
+
+        Apple/Safari: Enable WebGL multisampling on ATI cards
+        for OS X 10.7.2 and above.
+        https://bugs.webkit.org/show_bug.cgi?id=77922
+
+        Reviewed by Chris Marrin.
+
+        Follow Chrome's lead to allow WebGL antialiasing
+        on ATI cards as long as we're on 10.7.2 and above.
+
+        No new tests. Covered by existing tests.
+
+        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
+        (WebCore::systemAllowsMultisamplingOnATICards):
+        (WebCore):
+        (WebCore::GraphicsContext3D::validateAttributes):
+
 2012-02-07  Pavel Feldman  <pfeldman@google.com>
 
         Web Inspector: add generic support for undo-ing DOM edits.
index 6733e77..15fde23 100644 (file)
 
 namespace WebCore {
 
+static bool systemAllowsMultisamplingOnATICards()
+{
+#if PLATFORM(MAC)
+    static SInt32 version;
+    if (!version) {
+        if (Gestalt(gestaltSystemVersion, &version) != noErr)
+            return false;
+    }
+    // See https://bugs.webkit.org/show_bug.cgi?id=77922 for more details
+    return version > 0x1072;
+#else
+    return false;
+#endif
+}
+
 void GraphicsContext3D::validateAttributes()
 {
     Extensions3D* extensions = getExtensions();
@@ -74,9 +89,10 @@ void GraphicsContext3D::validateAttributes()
     }
     if (m_attrs.antialias) {
         bool isValidVendor = true;
-        // Currently in Mac we only turn on antialias if vendor is NVIDIA.
+        // Currently in Mac we only turn on antialias if vendor is NVIDIA,
+        // or if ATI and on 10.7.2 and above.
         const char* vendor = reinterpret_cast<const char*>(::glGetString(GL_VENDOR));
-        if (!std::strstr(vendor, "NVIDIA"))
+        if (!std::strstr(vendor, "NVIDIA") && !(std::strstr(vendor, "ATI") && systemAllowsMultisamplingOnATICards()))
             isValidVendor = false;
         if (!isValidVendor || !extensions->supports("GL_ANGLE_framebuffer_multisample") || isGLES2Compliant())
             m_attrs.antialias = false;