Log Message
Source/ThirdParty/ANGLE: Metal ANGLE: vertex array does not correctly observe contents of data buffers https://bugs.webkit.org/show_bug.cgi?id=236733 <rdar://problem/88713302> <rdar://problem/88499073>
Patch by Kyle Piddington <kpidding...@apple.com> on 2022-02-17 Reviewed by Dean Jackson. Similar to previous bug (236427), we were not correctly observing changes to the vertex buffer data. This caused us to miss rebinding vertex buffers when data was updated without causing conversion * src/libANGLE/renderer/metal/VertexArrayMtl.h: * src/libANGLE/renderer/metal/VertexArrayMtl.mm: (rx::VertexArrayMtl::syncState): (rx::VertexArrayMtl::setupDraw): (rx::VertexArrayMtl::syncDirtyAttrib):
Modified Paths
- trunk/LayoutTests/ChangeLog
- trunk/Source/ThirdParty/ANGLE/ChangeLog
- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h
- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (290086 => 290087)
--- trunk/LayoutTests/ChangeLog 2022-02-18 00:01:20 UTC (rev 290086)
+++ trunk/LayoutTests/ChangeLog 2022-02-18 00:09:11 UTC (rev 290087)
@@ -25,6 +25,22 @@
* platform/ios/TestExpectations: Mark tests as failing.
+2022-02-17 Kyle Piddington <kpidding...@apple.com>
+
+ Metal ANGLE: vertex array does not correctly observe contents of data buffers
+ https://bugs.webkit.org/show_bug.cgi?id=236733
+ <rdar://problem/88713302>
+ <rdar://problem/88499073>
+
+ Reviewed by Dean Jackson.
+
+ Similar to previous bug (236427), we were not correctly observing changes to the
+ vertex buffer data. This caused us to miss rebinding vertex buffers
+ when data was updated without causing conversion
+
+ * fast/canvas/webgl/buffer-data-subdata-dynamic-buffer.html: Added.
+ * fast/canvas/webgl/buffer-data-subdata-dynamic-buffer-expected.txt: Added.
+
2022-02-17 Matteo Flores <matteo_flo...@apple.com>
[css-grid] Incorrectly stretched SVGs without an aspect-ratio.
Added: trunk/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer-expected.txt (0 => 290087)
--- trunk/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer-expected.txt 2022-02-18 00:09:11 UTC (rev 290087)
@@ -0,0 +1,14 @@
+ Checks that update-draws of bufferSubData are respected
+
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
+PASS top-left of canvas should be green.
+PASS bottom-left of canvas should be green.
+PASS Top-right of canvas should be green.
+PASS bottom-right of canvas should be green.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Property changes on: trunk/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer-expected.txt
___________________________________________________________________
Added: svn:eol-style
Added: svn:keywords
Added: svn:mime-type
Added: trunk/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer.html (0 => 290087)
--- trunk/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer.html (rev 0)
+++ trunk/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer.html 2022-02-18 00:09:11 UTC (rev 290087)
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src="" </script>
+</head>
+<body>
+<canvas id="example" width="40" height="40" style="width: 40px; height: 40px;"></canvas>
+<div id="description"></div>
+<div id="console"></div>
+<script id="vshader" type="x-shader/x-vertex">
+#ifdef GL_ES
+precision highp float;
+#endif
+attribute vec4 vPosition;
+void main()
+{
+ gl_Position = vPosition;
+}
+</script>
+
+<script id="fshader" type="x-shader/x-fragment">
+#ifdef GL_ES
+precision highp float;
+#endif
+void main()
+{
+ gl_FragColor = vec4(0, 1, 0, 1);
+}
+</script>
+
+<script>
+function init()
+{
+ if (window.initNonKhronosFramework)
+ window.initNonKhronosFramework(false);
+
+ debug("Checks that update-draws of bufferSubData are respected");
+ debug("");
+
+ if (window.internals)
+ internals.settings.setWebGL2Enabled(true);
+ gl = initWebGL("example", "vshader", "fshader", [ "vPosition", "index" ],
+ [ 1, 1, 1, 1 ], 1, null, true);
+
+ gl.disable(gl.DEPTH_TEST);
+ gl.disable(gl.BLEND);
+
+ // Vertex buffer data lower left triangle
+ // 2
+ //
+ // o 1
+ var vertexData1 = new Float32Array([-1, -1, 1, -1, -1, 1]);
+ //Vertex buffer data upper right triangle
+ // 2 1
+ //
+ // 0
+ var vertexData2 = new Float32Array([ 1., -1., 1., 1., -1., 1.]);
+
+ var vertexObject = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject);
+ shouldBe("gl.getError()", "gl.NO_ERROR")
+ gl.bufferData(gl.ARRAY_BUFFER, vertexData1, gl.DYNAMIC_DRAW);
+ shouldBe("gl.getError()", "gl.NO_ERROR");
+ gl.enableVertexAttribArray(0);
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
+ shouldBe("gl.getError()", "gl.NO_ERROR");
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
+ gl.bufferData(gl.ARRAY_BUFFER, vertexData2, gl.DYNAMIC_DRAW);
+ shouldBe("gl.getError()", "gl.NO_ERROR");
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
+ gl.flush();
+ checkGreenValue(0, 0, 255, "top-left of canvas should be green.");
+ checkGreenValue(0, 39, 255, "bottom-left of canvas should be green.");
+ checkGreenValue(39, 0, 255, "Top-right of canvas should be green.");
+ checkGreenValue(39, 39, 255, "bottom-right of canvas should be green.");
+ gl.deleteBuffer(vertexObject);
+
+ function checkGreenValue(x, y, value, msg) {
+
+ var buf = new Uint8Array(4);
+ gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, buf);
+ if (buf[1] != value || buf[3] != 255) {
+ debug('expected: green channel should = ' + value + ' but was = ' + buf[2] + '.');
+ testFailed(msg);
+ return;
+ }
+ testPassed(msg);
+ }
+}
+
+init();
+</script>
+<script src=""
+</body>
+</html>
\ No newline at end of file
Property changes on: trunk/LayoutTests/fast/canvas/webgl/buffer-data-subdata-dynamic-buffer.html
___________________________________________________________________
Added: svn:eol-style
Added: svn:keywords
Added: svn:mime-type
Modified: trunk/Source/ThirdParty/ANGLE/ChangeLog (290086 => 290087)
--- trunk/Source/ThirdParty/ANGLE/ChangeLog 2022-02-18 00:01:20 UTC (rev 290086)
+++ trunk/Source/ThirdParty/ANGLE/ChangeLog 2022-02-18 00:09:11 UTC (rev 290087)
@@ -1,3 +1,22 @@
+2022-02-17 Kyle Piddington <kpidding...@apple.com>
+
+ Metal ANGLE: vertex array does not correctly observe contents of data buffers
+ https://bugs.webkit.org/show_bug.cgi?id=236733
+ <rdar://problem/88713302>
+ <rdar://problem/88499073>
+
+ Reviewed by Dean Jackson.
+
+ Similar to previous bug (236427), we were not correctly observing changes to the
+ vertex buffer data. This caused us to miss rebinding vertex buffers
+ when data was updated without causing conversion
+
+ * src/libANGLE/renderer/metal/VertexArrayMtl.h:
+ * src/libANGLE/renderer/metal/VertexArrayMtl.mm:
+ (rx::VertexArrayMtl::syncState):
+ (rx::VertexArrayMtl::setupDraw):
+ (rx::VertexArrayMtl::syncDirtyAttrib):
+
2022-02-17 Adrian Perez de Castro <ape...@igalia.com>
[GTK] Build broken with ENABLE_X11_TARGET=OFF and no X11 headers present
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h (290086 => 290087)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h 2022-02-18 00:01:20 UTC (rev 290086)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.h 2022-02-18 00:09:11 UTC (rev 290087)
@@ -151,8 +151,9 @@
mtl::BufferPool mDynamicIndexData;
std::vector<uint32_t> mEmulatedInstanceAttribs;
- bool mElementArrayDirty = true;
+
bool mVertexArrayDirty = true;
+ bool mVertexDataDirty = true;
};
} // namespace rx
Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm (290086 => 290087)
--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm 2022-02-18 00:01:20 UTC (rev 290086)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/VertexArrayMtl.mm 2022-02-18 00:09:11 UTC (rev 290087)
@@ -273,7 +273,7 @@
case gl::VertexArray::DIRTY_BIT_ELEMENT_ARRAY_BUFFER:
case gl::VertexArray::DIRTY_BIT_ELEMENT_ARRAY_BUFFER_DATA:
{
- mElementArrayDirty = true;
+ mVertexDataDirty = true;
break;
}
@@ -301,7 +301,7 @@
case gl::VertexArray::DIRTY_BIT_BUFFER_DATA_0 + INDEX: \
ANGLE_TRY(syncDirtyAttrib(context, attribs[INDEX], bindings[attribs[INDEX].bindingIndex], \
INDEX)); \
- mVertexArrayDirty = true; \
+ mVertexDataDirty = true; \
break;
ANGLE_VERTEX_INDEX_CASES(ANGLE_VERTEX_DIRTY_BUFFER_DATA_FUNC)
@@ -480,9 +480,9 @@
} // for (v)
}
- if(dirty || mElementArrayDirty)
+ if(dirty || mVertexDataDirty)
{
- mElementArrayDirty = false;
+ mVertexDataDirty = false;
const gl::ProgramExecutable *executable = glContext->getState().getProgramExecutable();
const gl::AttributesMask &programActiveAttribsMask =
executable->getActiveAttribLocationsMask();
@@ -652,6 +652,7 @@
if (bufferGL)
{
BufferMtl *bufferMtl = mtl::GetImpl(bufferGL);
+ mContentsObservers->enableForBuffer(bufferGL, static_cast<uint32_t>(attribIndex));
bool needConversion =
format.actualFormatId != format.intendedFormatId ||
(binding.getOffset() % format.actualAngleFormat().pixelBytes) != 0 ||
@@ -661,12 +662,10 @@
if (needConversion)
{
- mContentsObservers->enableForBuffer(bufferGL, static_cast<uint32_t>(attribIndex));
ANGLE_TRY(convertVertexBuffer(glContext, bufferMtl, binding, attribIndex, format));
}
else
{
- mContentsObservers->disableForBuffer(bufferGL, static_cast<uint32_t>(attribIndex));
mCurrentArrayBuffers[attribIndex] = bufferMtl;
mCurrentArrayBufferOffsets[attribIndex] = binding.getOffset();
mCurrentArrayBufferStrides[attribIndex] = binding.getStride();
_______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes