Title: [190446] trunk
Revision
190446
Author
d...@apple.com
Date
2015-10-01 18:09:42 -0700 (Thu, 01 Oct 2015)

Log Message

Expose WEBGL_debug_renderer_info
https://bugs.webkit.org/show_bug.cgi?id=149735
<rdar://problem/18343500>

Reviewed by Simon Fraser.

Source/WebCore:

Enable the extension that allows content to query
for the GPUs vendor and details.

Now that we're enabling this, there was no need for
the internal setting that identified privileged situations.
However, since this meant that WEBGL_debug_shaders was
also exposed, I explicitly disable it since it is
not yet conformant.

Test: fast/canvas/webgl/webgl-debug-renderer-info.html
as well as the general conformance suite.

* html/canvas/WebGL2RenderingContext.cpp: No need to guard around allowPrivilegedExtensions().
(WebCore::WebGL2RenderingContext::getExtension):
(WebCore::WebGL2RenderingContext::getSupportedExtensions):
* html/canvas/WebGLRenderingContext.cpp: Ditto.
(WebCore::WebGLRenderingContext::getExtension):
(WebCore::WebGLRenderingContext::getSupportedExtensions):
* html/canvas/WebGLRenderingContextBase.cpp:
(WebCore::WebGLRenderingContextBase::allowPrivilegedExtensions): Deleted.
* html/canvas/WebGLRenderingContextBase.h:
* page/Settings.in: Remove privilegedWebGLExtensions.
* platform/graphics/opengl/Extensions3DOpenGL.cpp: Forbid the translated shader
extension while it is still buggy.
(WebCore::Extensions3DOpenGL::supportsExtension):

LayoutTests:

Modify a test from the 1.0.2 conformance suite to make sure
we're actually enabling and passing the info.

* fast/canvas/webgl/webgl-debug-renderer-info-expected.txt: Added.
* fast/canvas/webgl/webgl-debug-renderer-info.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (190445 => 190446)


--- trunk/LayoutTests/ChangeLog	2015-10-02 01:03:13 UTC (rev 190445)
+++ trunk/LayoutTests/ChangeLog	2015-10-02 01:09:42 UTC (rev 190446)
@@ -1,3 +1,17 @@
+2015-10-01  Dean Jackson  <d...@apple.com>
+
+        Expose WEBGL_debug_renderer_info
+        https://bugs.webkit.org/show_bug.cgi?id=149735
+        <rdar://problem/18343500>
+
+        Reviewed by Simon Fraser.
+
+        Modify a test from the 1.0.2 conformance suite to make sure
+        we're actually enabling and passing the info.
+
+        * fast/canvas/webgl/webgl-debug-renderer-info-expected.txt: Added.
+        * fast/canvas/webgl/webgl-debug-renderer-info.html: Added.
+
 2015-10-01  Ryan Haddad  <ryanhad...@apple.com>
 
         Rebaselining fast/text/mark-matches-overflow-clip.html for Win

Added: trunk/LayoutTests/fast/canvas/webgl/webgl-debug-renderer-info-expected.txt (0 => 190446)


--- trunk/LayoutTests/fast/canvas/webgl/webgl-debug-renderer-info-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/canvas/webgl/webgl-debug-renderer-info-expected.txt	2015-10-02 01:09:42 UTC (rev 190446)
@@ -0,0 +1,23 @@
+CONSOLE MESSAGE: line 97: WebGL: INVALID_ENUM: getParameter: invalid parameter name, WEBGL_debug_renderer_info not enabled
+CONSOLE MESSAGE: line 101: WebGL: INVALID_ENUM: getParameter: invalid parameter name, WEBGL_debug_renderer_info not enabled
+This test verifies the functionality of the WEBGL_debug_renderer_info extension, if it is available.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS WebGL context exists
+Testing enums with extension disabled
+PASS getError was expected value: INVALID_ENUM : UNMASKED_VENDOR_WEBGL should not be queryable if extension is disabled
+PASS getError was expected value: INVALID_ENUM : UNMASKED_RENDERER_WEBGL should not be queryable if extension is disabled
+PASS Successfully enabled WEBGL_debug_renderer_info extension
+PASS WEBGL_debug_renderer_info listed as supported and getExtension succeeded
+Testing enums with extension enabled
+PASS ext.UNMASKED_VENDOR_WEBGL is 0x9245
+PASS getError was expected value: NO_ERROR : UNMASKED_VENDOR_WEBGL query should succeed if extension is enable
+PASS ext.UNMASKED_RENDERER_WEBGL is 0x9246
+PASS getError was expected value: NO_ERROR : UNMASKED_RENDERER_WEBGL query should succeed if extension is enable
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Property changes on: trunk/LayoutTests/fast/canvas/webgl/webgl-debug-renderer-info-expected.txt
___________________________________________________________________

Added: svn:mime-type

Added: svn:keywords

Added: svn:eol-style

Added: trunk/LayoutTests/fast/canvas/webgl/webgl-debug-renderer-info.html (0 => 190446)


--- trunk/LayoutTests/fast/canvas/webgl/webgl-debug-renderer-info.html	                        (rev 0)
+++ trunk/LayoutTests/fast/canvas/webgl/webgl-debug-renderer-info.html	2015-10-02 01:09:42 UTC (rev 190446)
@@ -0,0 +1,123 @@
+<!--
+
+/*
+** Copyright (c) 2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+-->
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>WebGL WebGL_debug_renderer_info Conformance Tests</title>
+<script src="" type="text/_javascript_"></script>
+<script src=""
+<script src=""
+<script src=""
+</head>
+<body>
+<div id="description"></div>
+<canvas id="canvas" style="width: 1px; height: 1px;"> </canvas>
+<div id="console"></div>
+
+<script>
+"use strict";
+description("This test verifies the functionality of the WEBGL_debug_renderer_info extension, if it is available.");
+
+debug("");
+
+var wtu = WebGLTestUtils;
+var gl = wtu.create3DContext("canvas");
+var ext = null;
+var vao = null;
+
+if (!gl) {
+    testFailed("WebGL context does not exist");
+} else {
+    testPassed("WebGL context exists");
+
+    // Run tests with extension disabled
+    runTestDisabled();
+
+    // Query the extension and store globally so shouldBe can access it
+    ext = gl.getExtension("WEBGL_debug_renderer_info");
+    if (!ext) {
+        testFailed("No WEBGL_debug_renderer_info support");
+    } else {
+        testPassed("Successfully enabled WEBGL_debug_renderer_info extension");
+
+        runSupportedTest(true);
+        runTestEnabled();
+    }
+}
+
+function runSupportedTest(extensionEnabled) {
+    var supported = gl.getSupportedExtensions();
+    if (supported.indexOf("WEBGL_debug_renderer_info") >= 0) {
+        if (extensionEnabled) {
+            testPassed("WEBGL_debug_renderer_info listed as supported and getExtension succeeded");
+        } else {
+            testFailed("WEBGL_debug_renderer_info listed as supported but getExtension failed");
+        }
+    } else {
+        if (extensionEnabled) {
+            testFailed("WEBGL_debug_renderer_info not listed as supported but getExtension succeeded");
+        } else {
+            testPassed("WEBGL_debug_renderer_info not listed as supported and getExtension failed -- this is legal");
+        }
+    }
+}
+
+function runTestDisabled() {
+    debug("Testing enums with extension disabled");
+
+    // Use the constants directly as we don't have the extension
+
+    var UNMASKED_VENDOR_WEBGL = 0x9245;
+    gl.getParameter(UNMASKED_VENDOR_WEBGL);
+    glErrorShouldBe(gl, gl.INVALID_ENUM, "UNMASKED_VENDOR_WEBGL should not be queryable if extension is disabled");
+
+    var UNMASKED_RENDERER_WEBGL = 0x9246;
+    gl.getParameter(UNMASKED_RENDERER_WEBGL);
+    glErrorShouldBe(gl, gl.INVALID_ENUM, "UNMASKED_RENDERER_WEBGL should not be queryable if extension is disabled");
+}
+
+function runTestEnabled() {
+    debug("Testing enums with extension enabled");
+
+    shouldBe("ext.UNMASKED_VENDOR_WEBGL", "0x9245");
+    gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
+    glErrorShouldBe(gl, gl.NO_ERROR, "UNMASKED_VENDOR_WEBGL query should succeed if extension is enable");
+
+    shouldBe("ext.UNMASKED_RENDERER_WEBGL", "0x9246");
+    gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
+    glErrorShouldBe(gl, gl.NO_ERROR, "UNMASKED_RENDERER_WEBGL query should succeed if extension is enable");
+}
+
+debug("");
+var successfullyParsed = true;
+</script>
+<script src=""
+
+</body>
+</html>
Property changes on: trunk/LayoutTests/fast/canvas/webgl/webgl-debug-renderer-info.html
___________________________________________________________________

Added: svn:mime-type

Added: svn:keywords

Added: svn:eol-style

Modified: trunk/Source/WebCore/ChangeLog (190445 => 190446)


--- trunk/Source/WebCore/ChangeLog	2015-10-02 01:03:13 UTC (rev 190445)
+++ trunk/Source/WebCore/ChangeLog	2015-10-02 01:09:42 UTC (rev 190446)
@@ -1,3 +1,37 @@
+2015-10-01  Dean Jackson  <d...@apple.com>
+
+        Expose WEBGL_debug_renderer_info
+        https://bugs.webkit.org/show_bug.cgi?id=149735
+        <rdar://problem/18343500>
+
+        Reviewed by Simon Fraser.
+
+        Enable the extension that allows content to query
+        for the GPUs vendor and details.
+
+        Now that we're enabling this, there was no need for
+        the internal setting that identified privileged situations.
+        However, since this meant that WEBGL_debug_shaders was
+        also exposed, I explicitly disable it since it is
+        not yet conformant.
+
+        Test: fast/canvas/webgl/webgl-debug-renderer-info.html
+        as well as the general conformance suite.
+
+        * html/canvas/WebGL2RenderingContext.cpp: No need to guard around allowPrivilegedExtensions().
+        (WebCore::WebGL2RenderingContext::getExtension):
+        (WebCore::WebGL2RenderingContext::getSupportedExtensions):
+        * html/canvas/WebGLRenderingContext.cpp: Ditto.
+        (WebCore::WebGLRenderingContext::getExtension):
+        (WebCore::WebGLRenderingContext::getSupportedExtensions):
+        * html/canvas/WebGLRenderingContextBase.cpp:
+        (WebCore::WebGLRenderingContextBase::allowPrivilegedExtensions): Deleted.
+        * html/canvas/WebGLRenderingContextBase.h:
+        * page/Settings.in: Remove privilegedWebGLExtensions.
+        * platform/graphics/opengl/Extensions3DOpenGL.cpp: Forbid the translated shader
+        extension while it is still buggy.
+        (WebCore::Extensions3DOpenGL::supportsExtension):
+
 2015-10-01  Eric Carlson  <eric.carl...@apple.com>
 
         [iOS] AirPlay should not stop when the screen locks

Modified: trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp (190445 => 190446)


--- trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp	2015-10-02 01:03:13 UTC (rev 190445)
+++ trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp	2015-10-02 01:09:42 UTC (rev 190446)
@@ -1021,20 +1021,18 @@
         }
         return m_webglDepthTexture.get();
     }
-    if (allowPrivilegedExtensions()) {
-        if (equalIgnoringCase(name, "WEBGL_debug_renderer_info")) {
-            if (!m_webglDebugRendererInfo)
-                m_webglDebugRendererInfo = std::make_unique<WebGLDebugRendererInfo>(this);
-            return m_webglDebugRendererInfo.get();
-        }
-        if (equalIgnoringCase(name, "WEBGL_debug_shaders")
-            && m_context->getExtensions()->supports("GL_ANGLE_translated_shader_source")) {
-            if (!m_webglDebugShaders)
-                m_webglDebugShaders = std::make_unique<WebGLDebugShaders>(this);
-            return m_webglDebugShaders.get();
-        }
+    if (equalIgnoringCase(name, "WEBGL_debug_renderer_info")) {
+        if (!m_webglDebugRendererInfo)
+            m_webglDebugRendererInfo = std::make_unique<WebGLDebugRendererInfo>(this);
+        return m_webglDebugRendererInfo.get();
     }
-    
+    if (equalIgnoringCase(name, "WEBGL_debug_shaders")
+        && m_context->getExtensions()->supports("GL_ANGLE_translated_shader_source")) {
+        if (!m_webglDebugShaders)
+            m_webglDebugShaders = std::make_unique<WebGLDebugShaders>(this);
+        return m_webglDebugShaders.get();
+    }
+
     return nullptr;
 }
 
@@ -1064,12 +1062,10 @@
     if (WebGLDepthTexture::supported(graphicsContext3D()))
         result.append("WEBGL_depth_texture");
     result.append("WEBGL_lose_context");
-    if (allowPrivilegedExtensions()) {
-        if (m_context->getExtensions()->supports("GL_ANGLE_translated_shader_source"))
-            result.append("WEBGL_debug_shaders");
-        result.append("WEBGL_debug_renderer_info");
-    }
-    
+    if (m_context->getExtensions()->supports("GL_ANGLE_translated_shader_source"))
+        result.append("WEBGL_debug_shaders");
+    result.append("WEBGL_debug_renderer_info");
+
     return result;
 }
 

Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp (190445 => 190446)


--- trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp	2015-10-02 01:03:13 UTC (rev 190445)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp	2015-10-02 01:09:42 UTC (rev 190446)
@@ -230,20 +230,18 @@
         }
         return m_angleInstancedArrays.get();
     }
-    if (allowPrivilegedExtensions()) {
-        if (equalIgnoringCase(name, "WEBGL_debug_renderer_info")) {
-            if (!m_webglDebugRendererInfo)
-                m_webglDebugRendererInfo = std::make_unique<WebGLDebugRendererInfo>(this);
-            return m_webglDebugRendererInfo.get();
-        }
-        if (equalIgnoringCase(name, "WEBGL_debug_shaders")
-            && m_context->getExtensions()->supports("GL_ANGLE_translated_shader_source")) {
-            if (!m_webglDebugShaders)
-                m_webglDebugShaders = std::make_unique<WebGLDebugShaders>(this);
-            return m_webglDebugShaders.get();
-        }
+    if (equalIgnoringCase(name, "WEBGL_debug_renderer_info")) {
+        if (!m_webglDebugRendererInfo)
+            m_webglDebugRendererInfo = std::make_unique<WebGLDebugRendererInfo>(this);
+        return m_webglDebugRendererInfo.get();
     }
-    
+    if (equalIgnoringCase(name, "WEBGL_debug_shaders")
+        && m_context->getExtensions()->supports("GL_ANGLE_translated_shader_source")) {
+        if (!m_webglDebugShaders)
+            m_webglDebugShaders = std::make_unique<WebGLDebugShaders>(this);
+        return m_webglDebugShaders.get();
+    }
+
     return nullptr;
 }
 
@@ -291,13 +289,10 @@
         result.append("WEBGL_draw_buffers");
     if (ANGLEInstancedArrays::supported(this))
         result.append("ANGLE_instanced_arrays");
-    
-    if (allowPrivilegedExtensions()) {
-        if (m_context->getExtensions()->supports("GL_ANGLE_translated_shader_source"))
-            result.append("WEBGL_debug_shaders");
-        result.append("WEBGL_debug_renderer_info");
-    }
-    
+    if (m_context->getExtensions()->supports("GL_ANGLE_translated_shader_source"))
+        result.append("WEBGL_debug_shaders");
+    result.append("WEBGL_debug_renderer_info");
+
     return result;
 }
 

Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp (190445 => 190446)


--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp	2015-10-02 01:03:13 UTC (rev 190445)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp	2015-10-02 01:09:42 UTC (rev 190446)
@@ -576,13 +576,6 @@
     m_isRobustnessEXTSupported = m_context->getExtensions()->isEnabled("GL_EXT_robustness");
 }
 
-bool WebGLRenderingContextBase::allowPrivilegedExtensions() const
-{
-    if (Page* page = canvas()->document().page())
-        return page->settings().privilegedWebGLExtensionsEnabled();
-    return false;
-}
-
 void WebGLRenderingContextBase::addCompressedTextureFormat(GC3Denum format)
 {
     if (!m_compressedTextureFormats.contains(format))

Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h (190445 => 190446)


--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h	2015-10-02 01:03:13 UTC (rev 190445)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h	2015-10-02 01:09:42 UTC (rev 190446)
@@ -800,10 +800,6 @@
     // Helper for restoration after context lost.
     void maybeRestoreContext();
 
-    // Determine if we are running privileged code in the browser, for example,
-    // a Safari or Chrome extension.
-    bool allowPrivilegedExtensions() const;
-
     enum ConsoleDisplayPreference {
         DisplayInConsole,
         DontDisplayInConsole

Modified: trunk/Source/WebCore/page/Settings.in (190445 => 190446)


--- trunk/Source/WebCore/page/Settings.in	2015-10-02 01:03:13 UTC (rev 190445)
+++ trunk/Source/WebCore/page/Settings.in	2015-10-02 01:09:42 UTC (rev 190446)
@@ -103,7 +103,6 @@
 webGLEnabled initial=false
 webGLErrorsToConsoleEnabled initial=true
 openGLMultisamplingEnabled initial=true
-privilegedWebGLExtensionsEnabled initial=false
 forceSoftwareWebGLRendering initial=false
 accelerated2dCanvasEnabled initial=false
 antialiased2dCanvasEnabled initial=true

Modified: trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp (190445 => 190446)


--- trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp	2015-10-02 01:03:13 UTC (rev 190445)
+++ trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp	2015-10-02 01:09:42 UTC (rev 190446)
@@ -167,6 +167,12 @@
             && (m_availableExtensions.contains("GL_ARB_draw_instanced") || m_availableExtensions.contains("GL_EXT_draw_instanced"));
     }
 
+    // We explicitly do not support this extension until
+    // we fix the following bug:
+    // https://bugs.webkit.org/show_bug.cgi?id=149734
+    if (name == "GL_ANGLE_translated_shader_source")
+        return false;
+
     if (name == "GL_EXT_sRGB")
 #if PLATFORM(IOS)
         return m_availableExtensions.contains("GL_EXT_sRGB");
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to