[WHLSL] Matrices should have constructors that take a flattened list of scalars
authormmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Aug 2019 01:39:34 +0000 (01:39 +0000)
committermmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 16 Aug 2019 01:39:34 +0000 (01:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=200804

Reviewed by Saam Barati.

Source/WebCore:

HLSL has them, so we should too.

Test: webgpu/whlsl/matrix-constructors-list-of-scalars.html

* Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

LayoutTests:

* webgpu/whlsl/matrix-constructors-list-of-scalars-expected.txt: Added.
* webgpu/whlsl/matrix-constructors-list-of-scalars.html: Added.

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

LayoutTests/ChangeLog
LayoutTests/webgpu/whlsl/matrix-constructors-list-of-scalars-expected.txt [new file with mode: 0644]
LayoutTests/webgpu/whlsl/matrix-constructors-list-of-scalars.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt

index be46711..26b922c 100644 (file)
@@ -1,3 +1,13 @@
+2019-08-15  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        [WHLSL] Matrices should have constructors that take a flattened list of scalars
+        https://bugs.webkit.org/show_bug.cgi?id=200804
+
+        Reviewed by Saam Barati.
+
+        * webgpu/whlsl/matrix-constructors-list-of-scalars-expected.txt: Added.
+        * webgpu/whlsl/matrix-constructors-list-of-scalars.html: Added.
+
 2019-08-15  Devin Rousso  <drousso@apple.com>
 
         Web Inspector: Sources: provide a way to create an arbitrary Inspector Style Sheet
diff --git a/LayoutTests/webgpu/whlsl/matrix-constructors-list-of-scalars-expected.txt b/LayoutTests/webgpu/whlsl/matrix-constructors-list-of-scalars-expected.txt
new file mode 100644 (file)
index 0000000..fd46d4f
--- /dev/null
@@ -0,0 +1,3 @@
+
+PASS listOfScalarsMatrixConstructors 
+
diff --git a/LayoutTests/webgpu/whlsl/matrix-constructors-list-of-scalars.html b/LayoutTests/webgpu/whlsl/matrix-constructors-list-of-scalars.html
new file mode 100644 (file)
index 0000000..51ce1f4
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html>
+<meta charset=utf-8>
+<meta name="timeout" content="long">
+<title>Test prefix/postfix.</title>
+<script src="js/test-harness.js"></script>
+<script src="../js/webgpu-functions.js"></script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script>
+const whlslTests = {};
+const epsilon = 0.0001;
+
+whlslTests.listOfScalarsMatrixConstructors = async () =>
+{
+    let program = `
+        float a()
+        {
+            float2x2 m = float2x2(1, 2, 3, 4);
+            return m[1][0];
+        }
+        float b()
+        {
+            float2x3 m = float2x3(1, 2, 3, 4, 5, 6);
+            return m[1][0];
+        }
+        float c()
+        {
+            float2x4 m = float2x4(1, 2, 3, 4, 5, 6, 7, 8);
+            return m[1][0];
+        }
+        float d()
+        {
+            float3x2 m = float3x2(1, 2, 3, 4, 5, 6);
+            return m[1][0];
+        }
+        float e()
+        {
+            float3x3 m = float3x3(1, 2, 3, 4, 5, 6, 7, 8, 9);
+            return m[1][0];
+        }
+        float f()
+        {
+            float3x4 m = float3x4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
+            return m[1][0];
+        }
+        float g()
+        {
+            float4x2 m = float4x2(1, 2, 3, 4, 5, 6, 7, 8);
+            return m[1][0];
+        }
+        float h()
+        {
+            float4x3 m = float4x3(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
+            return m[1][0];
+        }
+        float i()
+        {
+            float4x4 m = float4x4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
+            return m[1][0];
+        }
+    `;
+    assert_approx_equals(await callFloatFunction(program, "a", []), 3, epsilon);
+    assert_approx_equals(await callFloatFunction(program, "b", []), 4, epsilon);
+    assert_approx_equals(await callFloatFunction(program, "c", []), 5, epsilon);
+    assert_approx_equals(await callFloatFunction(program, "d", []), 3, epsilon);
+    assert_approx_equals(await callFloatFunction(program, "e", []), 4, epsilon);
+    assert_approx_equals(await callFloatFunction(program, "f", []), 5, epsilon);
+    assert_approx_equals(await callFloatFunction(program, "g", []), 3, epsilon);
+    assert_approx_equals(await callFloatFunction(program, "h", []), 4, epsilon);
+    assert_approx_equals(await callFloatFunction(program, "i", []), 5, epsilon);
+}
+
+
+runTests(whlslTests);
+</script>
+</html>
index 3483946..db25b9b 100644 (file)
@@ -1,3 +1,16 @@
+2019-08-15  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        [WHLSL] Matrices should have constructors that take a flattened list of scalars
+        https://bugs.webkit.org/show_bug.cgi?id=200804
+
+        Reviewed by Saam Barati.
+
+        HLSL has them, so we should too.
+
+        Test: webgpu/whlsl/matrix-constructors-list-of-scalars.html
+
+        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
+
 2019-08-15  Sihui Liu  <sihui_liu@apple.com>
 
         Use one VM per thread for IDB serialization work in network process
index 724c9d4..609b5f2 100644 (file)
@@ -13196,7 +13196,33 @@ operator float4x4(float4 a, float4 b, float4 c, float4 d) {
     result[3] = d;
     return result;
 }
-
+operator float2x2(float a, float b, float e, float f) {
+    return float2x2(float2(a, b), float2(e, f));
+}
+operator float2x3(float a, float b, float c, float e, float f, float g) {
+    return float2x3(float3(a, b, c), float3(e, f, g));
+}
+operator float2x4(float a, float b, float c, float d, float e, float f, float g, float h) {
+    return float2x4(float4(a, b, c, d), float4(e, f, g, h));
+}
+operator float3x2(float a, float b, float e, float f, float i, float j) {
+    return float3x2(float2(a, b), float2(e, f), float2(i, j));
+}
+operator float3x3(float a, float b, float c, float e, float f, float g, float i, float j, float k) {
+    return float3x3(float3(a, b, c), float3(e, f, g), float3(i, j, k));
+}
+operator float3x4(float a, float b, float c, float d, float e, float f, float g, float h, float i, float j, float k, float l) {
+    return float3x4(float4(a, b, c, d), float4(e, f, g, h), float4(i, j, k, l));
+}
+operator float4x2(float a, float b, float e, float f, float i, float j, float m, float n) {
+    return float4x2(float2(a, b), float2(e, f), float2(i, j), float2(m, n));
+}
+operator float4x3(float a, float b, float c, float e, float f, float g, float i, float j, float k, float m, float n, float o) {
+    return float4x3(float3(a, b, c), float3(e, f, g), float3(i, j, k), float3(m, n, o));
+}
+operator float4x4(float a, float b, float c, float d, float e, float f, float g, float h, float i, float j, float k, float l, float m, float n, float o, float p) {
+    return float4x4(float4(a, b, c, d), float4(e, f, g, h), float4(i, j, k, l), float4(m, n, o, p));
+}
 
 /* Functions named operator.wyx */
 bool3 operator.wyx(bool4 v) {