Diff
Modified: trunk/LayoutTests/ChangeLog (236024 => 236025)
--- trunk/LayoutTests/ChangeLog 2018-09-14 23:55:37 UTC (rev 236024)
+++ trunk/LayoutTests/ChangeLog 2018-09-15 00:05:22 UTC (rev 236025)
@@ -1,3 +1,17 @@
+2018-09-14 Justin Fan <justin_...@apple.com>
+
+ WebGL 2 conformance: rgb-format-support.html
+ https://bugs.webkit.org/show_bug.cgi?id=189610
+ <rdar://problem/44403343>
+
+ Reviewed by Dean Jackson.
+
+ Enabled rgb-format-support.html, and updated expectation for gl-teximage.html.
+
+ * TestExpectations:
+ * platform/mac/TestExpectations:
+ * webgl/2.0.0/conformance2/rendering/rgb-format-support-expected.txt:
+
2018-09-14 Justin Michaud <justin_mich...@apple.com>
Add support for spreadMethod=reflect and repeat on SVG gradients (for CoreGraphics platforms)
Modified: trunk/LayoutTests/TestExpectations (236024 => 236025)
--- trunk/LayoutTests/TestExpectations 2018-09-14 23:55:37 UTC (rev 236024)
+++ trunk/LayoutTests/TestExpectations 2018-09-15 00:05:22 UTC (rev 236025)
@@ -2069,6 +2069,7 @@
webgl/2.0.0/conformance2/glsl3 [ Pass ]
webgl/2.0.0/conformance2/vertex_arrays [ Pass ]
webgl/2.0.0/conformance2/renderbuffers/framebuffer-test.html [ Pass ]
+webgl/2.0.0/conformance2/rendering/rgb-format-support.html [ Pass ]
imported/w3c/web-platform-tests/css/css-display/run-in/run-in-contains-table-row-001.xht [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-text-decor/text-emphasis-style-008.html [ ImageOnlyFailure ]
Modified: trunk/LayoutTests/platform/mac/TestExpectations (236024 => 236025)
--- trunk/LayoutTests/platform/mac/TestExpectations 2018-09-14 23:55:37 UTC (rev 236024)
+++ trunk/LayoutTests/platform/mac/TestExpectations 2018-09-15 00:05:22 UTC (rev 236025)
@@ -1127,7 +1127,6 @@
webkit.org/b/148435 storage/domstorage/events/basic-body-attribute.html [ Pass Failure ]
webkit.org/b/149930 fast/canvas/webgl/oes-texture-float-linear.html [ Pass Failure ]
-webkit.org/b/58766 fast/canvas/webgl/gl-teximage.html [ Pass Failure ]
# Imported Blink tests which have not been investigated.
imported/blink/compositing/video/video-controls-layer-creation-squashing.html [ Pass ImageOnlyFailure ]
Modified: trunk/LayoutTests/webgl/2.0.0/conformance2/rendering/rgb-format-support-expected.txt (236024 => 236025)
--- trunk/LayoutTests/webgl/2.0.0/conformance2/rendering/rgb-format-support-expected.txt 2018-09-14 23:55:37 UTC (rev 236024)
+++ trunk/LayoutTests/webgl/2.0.0/conformance2/rendering/rgb-format-support-expected.txt 2018-09-15 00:05:22 UTC (rev 236025)
@@ -1,5 +1,5 @@
This test runs the WebGL Test listed below in an iframe and reports PASS or FAIL.
Test: ../../resources/webgl_test_files/conformance2/rendering/rgb-format-support.html
-PASS
+[ PASS ] All tests passed
Modified: trunk/Source/WebCore/ChangeLog (236024 => 236025)
--- trunk/Source/WebCore/ChangeLog 2018-09-14 23:55:37 UTC (rev 236024)
+++ trunk/Source/WebCore/ChangeLog 2018-09-15 00:05:22 UTC (rev 236025)
@@ -1,3 +1,28 @@
+2018-09-14 Justin Fan <justin_...@apple.com>
+
+ WebGL 2 conformance: rgb-format-support.html
+ https://bugs.webkit.org/show_bug.cgi?id=189610
+ <rdar://problem/44403343>
+
+ Reviewed by Dean Jackson.
+
+ Implementing getInternalformatParameter (emulating on macOS) and updating
+ renderbufferStorage{Multisample} for WebGL 2 conformance.
+
+ Test: webgl/2.0.0/conformance2/rendering/rgb-format-support.html enabled.
+
+ * html/canvas/WebGL2RenderingContext.cpp:
+ (WebCore::isRenderableInternalformat):
+ (WebCore::WebGL2RenderingContext::getInternalformatParameter):
+ (WebCore::WebGL2RenderingContext::renderbufferStorageMultisample):
+ (WebCore::WebGL2RenderingContext::renderbufferStorage):
+ (WebCore::WebGL2RenderingContext::baseInternalFormatFromInternalFormat):
+ (WebCore::WebGL2RenderingContext::isIntegerFormat):
+ * platform/graphics/GraphicsContext3D.h:
+ * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
+ (WebCore::GraphicsContext3D::getInternalformativ):
+ (WebCore::GraphicsContext3D::renderbufferStorageMultisample):
+
2018-09-14 Justin Michaud <justin_mich...@apple.com>
Add support for spreadMethod=reflect and repeat on SVG gradients (for CoreGraphics platforms)
Modified: trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp (236024 => 236025)
--- trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp 2018-09-14 23:55:37 UTC (rev 236024)
+++ trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp 2018-09-15 00:05:22 UTC (rev 236025)
@@ -316,11 +316,102 @@
{
}
-WebGLAny WebGL2RenderingContext::getInternalformatParameter(GC3Denum, GC3Denum, GC3Denum)
+#if !USE(OPENGL_ES)
+static bool isRenderableInternalformat(GC3Denum internalformat)
{
- return nullptr;
+ // OpenGL ES 3: internalformat must be a color-renderable, depth-renderable, or stencil-renderable format, as shown in Table 1 below.
+ switch (internalformat) {
+ case GraphicsContext3D::R8:
+ case GraphicsContext3D::R8UI:
+ case GraphicsContext3D::R16UI:
+ case GraphicsContext3D::R16I:
+ case GraphicsContext3D::R32UI:
+ case GraphicsContext3D::R32I:
+ case GraphicsContext3D::RG8:
+ case GraphicsContext3D::RG8UI:
+ case GraphicsContext3D::RG8I:
+ case GraphicsContext3D::RG16UI:
+ case GraphicsContext3D::RG16I:
+ case GraphicsContext3D::RG32UI:
+ case GraphicsContext3D::RG32I:
+ case GraphicsContext3D::RGB8:
+ case GraphicsContext3D::RGB565:
+ case GraphicsContext3D::RGBA8:
+ case GraphicsContext3D::SRGB8_ALPHA8:
+ case GraphicsContext3D::RGB5_A1:
+ case GraphicsContext3D::RGBA4:
+ case GraphicsContext3D::RGB10_A2:
+ case GraphicsContext3D::RGBA8UI:
+ case GraphicsContext3D::RGBA8I:
+ case GraphicsContext3D::RGB10_A2UI:
+ case GraphicsContext3D::RGBA16UI:
+ case GraphicsContext3D::RGBA16I:
+ case GraphicsContext3D::RGBA32I:
+ case GraphicsContext3D::RGBA32UI:
+ case GraphicsContext3D::DEPTH_COMPONENT16:
+ case GraphicsContext3D::DEPTH_COMPONENT24:
+ case GraphicsContext3D::DEPTH_COMPONENT32F:
+ case GraphicsContext3D::DEPTH24_STENCIL8:
+ case GraphicsContext3D::DEPTH32F_STENCIL8:
+ case GraphicsContext3D::STENCIL_INDEX8:
+ return true;
+ }
+ return false;
}
+#endif
+WebGLAny WebGL2RenderingContext::getInternalformatParameter(GC3Denum target, GC3Denum internalformat, GC3Denum pname)
+{
+ if (isContextLostOrPending())
+ return nullptr;
+
+ if (pname != GraphicsContext3D::SAMPLES) {
+ synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getInternalformatParameter", "invalid parameter name");
+ return nullptr;
+ }
+
+ int numValues = 0;
+#if USE(OPENGL_ES)
+ m_context->getInternalformativ(target, internalformat, GraphicsContext3D::NUM_SAMPLE_COUNTS, 1, &numValues);
+
+ GC3Dint params[numValues];
+ m_context->getInternalformativ(target, internalformat, pname, numValues, params);
+#else
+ // On desktop OpenGL 4.1 or below we must emulate glGetInternalformativ.
+
+ // GL_INVALID_ENUM is generated if target is not GL_RENDERBUFFER.
+ if (target != GraphicsContext3D::RENDERBUFFER) {
+ synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getInternalformatParameter", "invalid target");
+ return nullptr;
+ }
+
+ // GL_INVALID_ENUM is generated if internalformat is not color-, depth-, or stencil-renderable.
+ if (!isRenderableInternalformat(internalformat)) {
+ synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getInternalformatParameter", "invalid internal format");
+ return nullptr;
+ }
+
+ Vector<GC3Dint> samples;
+ // The way I understand this is that this will return a MINIMUM numSamples for all accepeted internalformats.
+ // However, the true value of this on supported GL versions is gleaned via a getInternalformativ call that depends on internalformat.
+ int numSamplesMask = getIntParameter(GraphicsContext3D::MAX_SAMPLES);
+
+ while (numSamplesMask > 0) {
+ samples.append(numSamplesMask);
+ numSamplesMask = numSamplesMask >> 1;
+ }
+
+ // Since multisampling is not supported for signed and unsigned integer internal formats,
+ // the value of GL_NUM_SAMPLE_COUNTS will be zero for such formats.
+ numValues = isIntegerFormat(internalformat) ? 0 : samples.size();
+ GC3Dint params[numValues];
+ for (size_t i = 0; i < samples.size(); ++i)
+ params[i] = samples[i];
+#endif
+
+ return Int32Array::create(params, numValues);
+}
+
void WebGL2RenderingContext::invalidateFramebuffer(GC3Denum, const Vector<GC3Denum>&)
{
}
@@ -333,8 +424,73 @@
{
}
-void WebGL2RenderingContext::renderbufferStorageMultisample(GC3Denum, GC3Dsizei, GC3Denum, GC3Dsizei, GC3Dsizei)
+void WebGL2RenderingContext::renderbufferStorageMultisample(GC3Denum target, GC3Dsizei samples, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height)
{
+ // To be backward compatible with WebGL 1, also accepts internal format DEPTH_STENCIL,
+ // which should be mapped to DEPTH24_STENCIL8 by implementations.
+ if (internalformat == GraphicsContext3D::DEPTH_STENCIL)
+ internalformat = GraphicsContext3D::DEPTH24_STENCIL8;
+
+ // ES 3: GL_INVALID_OPERATION is generated if internalformat is a signed or unsigned integer format and samples is greater than 0.
+ if (isIntegerFormat(internalformat) && samples > 0) {
+ synthesizeGLError(GraphicsContext3D::INVALID_OPERATION, "renderbufferStorageMultisample", "multisampling not supported for this format");
+ return;
+ }
+
+ switch (internalformat) {
+ case GraphicsContext3D::DEPTH_COMPONENT16:
+ case GraphicsContext3D::DEPTH_COMPONENT32F:
+ case GraphicsContext3D::DEPTH_COMPONENT24:
+ case GraphicsContext3D::RGBA32I:
+ case GraphicsContext3D::RGBA32UI:
+ case GraphicsContext3D::RGBA16I:
+ case GraphicsContext3D::RGBA16UI:
+ case GraphicsContext3D::RGBA8:
+ case GraphicsContext3D::RGBA8I:
+ case GraphicsContext3D::RGBA8UI:
+ case GraphicsContext3D::RGB10_A2:
+ case GraphicsContext3D::RGB10_A2UI:
+ case GraphicsContext3D::RGBA4:
+ case GraphicsContext3D::RG32I:
+ case GraphicsContext3D::RG32UI:
+ case GraphicsContext3D::RG16I:
+ case GraphicsContext3D::RG16UI:
+ case GraphicsContext3D::RG8:
+ case GraphicsContext3D::RG8I:
+ case GraphicsContext3D::RG8UI:
+ case GraphicsContext3D::R32I:
+ case GraphicsContext3D::R32UI:
+ case GraphicsContext3D::R16I:
+ case GraphicsContext3D::R16UI:
+ case GraphicsContext3D::R8:
+ case GraphicsContext3D::R8I:
+ case GraphicsContext3D::R8UI:
+ case GraphicsContext3D::RGB5_A1:
+ case GraphicsContext3D::RGB565:
+ case GraphicsContext3D::RGB8:
+ case GraphicsContext3D::STENCIL_INDEX8:
+ case GraphicsContext3D::SRGB8_ALPHA8:
+ m_context->renderbufferStorageMultisample(target, samples, internalformat, width, height);
+ m_renderbufferBinding->setInternalFormat(internalformat);
+ m_renderbufferBinding->setIsValid(true);
+ m_renderbufferBinding->setSize(width, height);
+ break;
+ case GraphicsContext3D::DEPTH32F_STENCIL8:
+ case GraphicsContext3D::DEPTH24_STENCIL8:
+ if (!isDepthStencilSupported()) {
+ synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "renderbufferStorage", "invalid internalformat");
+ return;
+ }
+ m_context->renderbufferStorageMultisample(target, samples, internalformat, width, height);
+ m_renderbufferBinding->setSize(width, height);
+ m_renderbufferBinding->setIsValid(isDepthStencilSupported());
+ m_renderbufferBinding->setInternalFormat(internalformat);
+ break;
+ default:
+ synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "renderbufferStorage", "invalid internalformat");
+ return;
+ }
+ applyStencilTest();
}
bool WebGL2RenderingContext::validateTexStorageFuncParameters(GC3Denum target, GC3Dsizei levels, GC3Denum internalFormat, GC3Dsizei width, GC3Dsizei height, const char* functionName)
@@ -1371,6 +1527,7 @@
case GraphicsContext3D::R8UI:
case GraphicsContext3D::RGB5_A1:
case GraphicsContext3D::RGB565:
+ case GraphicsContext3D::RGB8:
case GraphicsContext3D::STENCIL_INDEX8:
case GraphicsContext3D::SRGB8_ALPHA8:
m_context->renderbufferStorage(target, internalformat, width, height);
@@ -1422,6 +1579,9 @@
case GraphicsContext3D::R8_SNORM:
case GraphicsContext3D::R16F:
case GraphicsContext3D::R32F:
+ case GraphicsContext3D::COMPRESSED_R11_EAC:
+ case GraphicsContext3D::COMPRESSED_SIGNED_R11_EAC:
+ return GraphicsContext3D::RED;
case GraphicsContext3D::R8I:
case GraphicsContext3D::R8UI:
case GraphicsContext3D::R16I:
@@ -1428,13 +1588,14 @@
case GraphicsContext3D::R16UI:
case GraphicsContext3D::R32I:
case GraphicsContext3D::R32UI:
- case GraphicsContext3D::COMPRESSED_R11_EAC:
- case GraphicsContext3D::COMPRESSED_SIGNED_R11_EAC:
- return GraphicsContext3D::RED;
+ return GraphicsContext3D::RED_INTEGER;
case GraphicsContext3D::RG8:
case GraphicsContext3D::RG8_SNORM:
case GraphicsContext3D::RG16F:
case GraphicsContext3D::RG32F:
+ case GraphicsContext3D::COMPRESSED_RG11_EAC:
+ case GraphicsContext3D::COMPRESSED_SIGNED_RG11_EAC:
+ return GraphicsContext3D::RG;
case GraphicsContext3D::RG8I:
case GraphicsContext3D::RG8UI:
case GraphicsContext3D::RG16I:
@@ -1441,9 +1602,7 @@
case GraphicsContext3D::RG16UI:
case GraphicsContext3D::RG32I:
case GraphicsContext3D::RG32UI:
- case GraphicsContext3D::COMPRESSED_RG11_EAC:
- case GraphicsContext3D::COMPRESSED_SIGNED_RG11_EAC:
- return GraphicsContext3D::RG;
+ return GraphicsContext3D::RG_INTEGER;
case GraphicsContext3D::RGB8:
case GraphicsContext3D::RGB8_SNORM:
case GraphicsContext3D::RGB565:
@@ -1450,6 +1609,10 @@
case GraphicsContext3D::SRGB8:
case GraphicsContext3D::RGB16F:
case GraphicsContext3D::RGB32F:
+ case GraphicsContext3D::RGB:
+ case GraphicsContext3D::COMPRESSED_RGB8_ETC2:
+ case GraphicsContext3D::COMPRESSED_SRGB8_ETC2:
+ return GraphicsContext3D::RGB;
case GraphicsContext3D::RGB8I:
case GraphicsContext3D::RGB8UI:
case GraphicsContext3D::RGB16I:
@@ -1456,31 +1619,29 @@
case GraphicsContext3D::RGB16UI:
case GraphicsContext3D::RGB32I:
case GraphicsContext3D::RGB32UI:
- case GraphicsContext3D::RGB:
- case GraphicsContext3D::COMPRESSED_RGB8_ETC2:
- case GraphicsContext3D::COMPRESSED_SRGB8_ETC2:
- return GraphicsContext3D::RGB;
+ return GraphicsContext3D::RGB_INTEGER;
case GraphicsContext3D::RGBA4:
case GraphicsContext3D::RGB5_A1:
case GraphicsContext3D::RGBA8:
case GraphicsContext3D::RGBA8_SNORM:
case GraphicsContext3D::RGB10_A2:
- case GraphicsContext3D::RGB10_A2UI:
case GraphicsContext3D::SRGB8_ALPHA8:
case GraphicsContext3D::RGBA16F:
case GraphicsContext3D::RGBA32F:
+ case GraphicsContext3D::RGBA:
+ case GraphicsContext3D::COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ case GraphicsContext3D::COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ case GraphicsContext3D::COMPRESSED_RGBA8_ETC2_EAC:
+ case GraphicsContext3D::COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
+ return GraphicsContext3D::RGBA;
case GraphicsContext3D::RGBA8I:
case GraphicsContext3D::RGBA8UI:
+ case GraphicsContext3D::RGB10_A2UI:
case GraphicsContext3D::RGBA16I:
case GraphicsContext3D::RGBA16UI:
case GraphicsContext3D::RGBA32I:
case GraphicsContext3D::RGBA32UI:
- case GraphicsContext3D::RGBA:
- case GraphicsContext3D::COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
- case GraphicsContext3D::COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
- case GraphicsContext3D::COMPRESSED_RGBA8_ETC2_EAC:
- case GraphicsContext3D::COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
- return GraphicsContext3D::RGBA;
+ return GraphicsContext3D::RGBA_INTEGER;
case GraphicsContext3D::DEPTH_COMPONENT16:
case GraphicsContext3D::DEPTH_COMPONENT24:
case GraphicsContext3D::DEPTH_COMPONENT32F:
@@ -1500,8 +1661,6 @@
bool WebGL2RenderingContext::isIntegerFormat(GC3Denum internalformat)
{
- // FIXME: baseInternalFormatFromInternalFormat() never returns any of these enums.
- // Because of that, this function erroneously always returns false!
switch (baseInternalFormatFromInternalFormat(internalformat)) {
case GraphicsContext3D::RED_INTEGER:
case GraphicsContext3D::RG_INTEGER:
Modified: trunk/Source/WebCore/platform/graphics/GraphicsContext3D.h (236024 => 236025)
--- trunk/Source/WebCore/platform/graphics/GraphicsContext3D.h 2018-09-14 23:55:37 UTC (rev 236024)
+++ trunk/Source/WebCore/platform/graphics/GraphicsContext3D.h 2018-09-15 00:05:22 UTC (rev 236025)
@@ -981,6 +981,9 @@
GC3Dboolean unmapBuffer(GC3Denum target);
void copyBufferSubData(GC3Denum readTarget, GC3Denum writeTarget, GC3Dintptr readOffset, GC3Dintptr writeOffset, GC3Dsizeiptr);
+ void getInternalformativ(GC3Denum target, GC3Denum internalformat, GC3Denum pname, GC3Dsizei bufSize, GC3Dint* params);
+ void renderbufferStorageMultisample(GC3Denum target, GC3Dsizei samples, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height);
+
void texStorage2D(GC3Denum target, GC3Dsizei levels, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height);
void texStorage3D(GC3Denum target, GC3Dsizei levels, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dsizei depth);
Modified: trunk/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp (236024 => 236025)
--- trunk/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp 2018-09-14 23:55:37 UTC (rev 236024)
+++ trunk/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp 2018-09-15 00:05:22 UTC (rev 236025)
@@ -570,6 +570,26 @@
::glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
}
+void GraphicsContext3D::getInternalformativ(GC3Denum target, GC3Denum internalformat, GC3Denum pname, GC3Dsizei bufSize, GC3Dint* params)
+{
+#if USE(OPENGL_ES)
+ makeContextCurrent();
+ ::glGetInternalformativ(target, internalformat, pname, bufSize, params);
+#else
+ UNUSED_PARAM(target);
+ UNUSED_PARAM(internalformat);
+ UNUSED_PARAM(pname);
+ UNUSED_PARAM(bufSize);
+ UNUSED_PARAM(params);
+#endif
+}
+
+void GraphicsContext3D::renderbufferStorageMultisample(GC3Denum target, GC3Dsizei samples, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height)
+{
+ makeContextCurrent();
+ ::glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
+}
+
void GraphicsContext3D::texStorage2D(GC3Denum target, GC3Dsizei levels, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height)
{
makeContextCurrent();