From 6cf15f4ea1fe044d8227440dcc30ac712334568e Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 27 Feb 2025 10:32:14 -0800 Subject: Allow `.member` syntax on vector and scalars. (#6424) * Allow `.member` syntax on vector and scalars. * Fix. * fix. * Fix. * update comment. * Fix tests. * Fix warning. * Add more tests. --- tests/bugs/invalid-swizzle-count.slang | 4 ++-- tests/diagnostics/matrix-swizzle.slang.expected | 26 +++++++++++----------- tests/front-end/matrix-member.slang | 17 ++++++++++++++ tests/front-end/scalar-member.slang | 17 ++++++++++++++ tests/front-end/vector-member.slang | 17 ++++++++++++++ .../member-completion-broken-syntax-3.slang | 10 ++++++--- tests/language-server/scalar-member.slang | 9 ++++++++ tests/language-server/vector-member.slang | 7 +++++- 8 files changed, 88 insertions(+), 19 deletions(-) create mode 100644 tests/front-end/matrix-member.slang create mode 100644 tests/front-end/scalar-member.slang create mode 100644 tests/front-end/vector-member.slang create mode 100644 tests/language-server/scalar-member.slang (limited to 'tests') diff --git a/tests/bugs/invalid-swizzle-count.slang b/tests/bugs/invalid-swizzle-count.slang index 811cf6f44..93cb1fdcc 100644 --- a/tests/bugs/invalid-swizzle-count.slang +++ b/tests/bugs/invalid-swizzle-count.slang @@ -1,6 +1,6 @@ //TEST:SIMPLE(filecheck=CHECK): -target spirv -stage compute -entry computeMain -emit-spirv-directly -// CHECK: error 30052 -// CHECK-NOT: error 30052 +// CHECK: error 30027 +// CHECK-NOT: error 30027 RWStructuredBuffer outputBuffer; [numthreads(1,1,1)] diff --git a/tests/diagnostics/matrix-swizzle.slang.expected b/tests/diagnostics/matrix-swizzle.slang.expected index 832ddd739..3c8853161 100644 --- a/tests/diagnostics/matrix-swizzle.slang.expected +++ b/tests/diagnostics/matrix-swizzle.slang.expected @@ -1,42 +1,42 @@ result code = -1 standard error = { -tests/diagnostics/matrix-swizzle.slang(8): error 30052: invalid swizzle pattern '_14' on type 'int' +tests/diagnostics/matrix-swizzle.slang(8): error 30027: '_14' is not a member of 'matrix'. int c = m1._14; // Out of bounds ^~~ -tests/diagnostics/matrix-swizzle.slang(9): error 30052: invalid swizzle pattern '_32' on type 'int' +tests/diagnostics/matrix-swizzle.slang(9): error 30027: '_32' is not a member of 'matrix'. c = m1._32; ^~~ -tests/diagnostics/matrix-swizzle.slang(10): error 30052: invalid swizzle pattern '_m22' on type 'int' +tests/diagnostics/matrix-swizzle.slang(10): error 30027: '_m22' is not a member of 'matrix'. c = m2._m22; ^~~~ -tests/diagnostics/matrix-swizzle.slang(11): error 30052: invalid swizzle pattern '_' on type 'int' +tests/diagnostics/matrix-swizzle.slang(11): error 30027: '_' is not a member of 'matrix'. c = m2._; // unfinished ^ -tests/diagnostics/matrix-swizzle.slang(12): error 30052: invalid swizzle pattern '_m' on type 'int' +tests/diagnostics/matrix-swizzle.slang(12): error 30027: '_m' is not a member of 'matrix'. c = m2._m; ^~ -tests/diagnostics/matrix-swizzle.slang(13): error 30052: invalid swizzle pattern '_1' on type 'int' +tests/diagnostics/matrix-swizzle.slang(13): error 30027: '_1' is not a member of 'matrix'. c = m2._1; ^~ -tests/diagnostics/matrix-swizzle.slang(14): error 30052: invalid swizzle pattern '_m1' on type 'int' +tests/diagnostics/matrix-swizzle.slang(14): error 30027: '_m1' is not a member of 'matrix'. c = m2._m1; ^~~ -tests/diagnostics/matrix-swizzle.slang(15): error 30052: invalid swizzle pattern '_m12_' on type 'int' +tests/diagnostics/matrix-swizzle.slang(15): error 30027: '_m12_' is not a member of 'matrix'. c = m2._m12_; ^~~~~ -tests/diagnostics/matrix-swizzle.slang(16): error 30052: invalid swizzle pattern '_m11_11' on type 'int' +tests/diagnostics/matrix-swizzle.slang(16): error 30027: '_m11_11' is not a member of 'matrix'. int2 c2 = m1._m11_11; // Mixing of 1 and 0-indexing ^~~~~~~ -tests/diagnostics/matrix-swizzle.slang(17): error 30052: invalid swizzle pattern '_11_11_11_11_11' on type 'int' +tests/diagnostics/matrix-swizzle.slang(17): error 30027: '_11_11_11_11_11' is not a member of 'matrix'. c = m1._11_11_11_11_11; // More than 4 elements ^~~~~~~~~~~~~~~ -tests/diagnostics/matrix-swizzle.slang(18): error 30052: invalid swizzle pattern 'x' on type 'int' +tests/diagnostics/matrix-swizzle.slang(18): error 30027: 'x' is not a member of 'matrix'. c = m1.x; // Invalid character ^ -tests/diagnostics/matrix-swizzle.slang(19): error 30052: invalid swizzle pattern '_x' on type 'int' +tests/diagnostics/matrix-swizzle.slang(19): error 30027: '_x' is not a member of 'matrix'. c = m1._x; ^~ -tests/diagnostics/matrix-swizzle.slang(20): error 30052: invalid swizzle pattern 'x123' on type 'int' +tests/diagnostics/matrix-swizzle.slang(20): error 30027: 'x123' is not a member of 'matrix'. c = m1.x123; ^~~~ } diff --git a/tests/front-end/matrix-member.slang b/tests/front-end/matrix-member.slang new file mode 100644 index 000000000..447fe715f --- /dev/null +++ b/tests/front-end/matrix-member.slang @@ -0,0 +1,17 @@ +//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK):-output-using-type + +extension float2x2 +{ + float sum() { return this[0][0] + this[1][1]; } +} + +//TEST_INPUT: set outputBuffer = out ubuffer(data=[0 0 0 0], stride = 4) +RWStructuredBuffer outputBuffer; + +[numthreads(1,1,1)] +void computeMain() +{ + float2x2 v = {1,2,3,4}; + // CHECK: 5 + outputBuffer[0] = v.sum(); +} \ No newline at end of file diff --git a/tests/front-end/scalar-member.slang b/tests/front-end/scalar-member.slang new file mode 100644 index 000000000..b85b8772c --- /dev/null +++ b/tests/front-end/scalar-member.slang @@ -0,0 +1,17 @@ +//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK):-output-using-type + +extension float +{ + float sum() { return this + 1; } +} + +//TEST_INPUT: set outputBuffer = out ubuffer(data=[0 0 0 0], stride = 4) +RWStructuredBuffer outputBuffer; + +[numthreads(1,1,1)] +void computeMain() +{ + float v = 10.0; + // CHECK: 11 + outputBuffer[0] = v.sum(); +} \ No newline at end of file diff --git a/tests/front-end/vector-member.slang b/tests/front-end/vector-member.slang new file mode 100644 index 000000000..adced39e4 --- /dev/null +++ b/tests/front-end/vector-member.slang @@ -0,0 +1,17 @@ +//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK):-output-using-type + +extension float3 +{ + float sum() { return this.x + this.y + this.z; } +} + +//TEST_INPUT: set outputBuffer = out ubuffer(data=[0 0 0 0], stride = 4) +RWStructuredBuffer outputBuffer; + +[numthreads(1,1,1)] +void computeMain() +{ + float3 v = { 1, 2, 3 }; + // CHECK: 6 + outputBuffer[0] = v.sum(); +} \ No newline at end of file diff --git a/tests/language-server/member-completion-broken-syntax-3.slang b/tests/language-server/member-completion-broken-syntax-3.slang index 316afc541..9d497f9e1 100644 --- a/tests/language-server/member-completion-broken-syntax-3.slang +++ b/tests/language-server/member-completion-broken-syntax-3.slang @@ -1,9 +1,13 @@ -//TEST:LANG_SERVER: -//COMPLETE:7,9 +//TEST:LANG_SERVER(filecheck=CHECK): float3 m() { float3 val = 0; +//COMPLETE:7,9 val. return val; -} \ No newline at end of file +} + +// CHECK: x +// CHECK: y +// CHECK: z \ No newline at end of file diff --git a/tests/language-server/scalar-member.slang b/tests/language-server/scalar-member.slang new file mode 100644 index 000000000..6b12ab897 --- /dev/null +++ b/tests/language-server/scalar-member.slang @@ -0,0 +1,9 @@ +//TEST:LANG_SERVER(filecheck=CHECK): +void f() +{ + float v; +//COMPLETE:6,7 + v. +} + +// CHECK: x \ No newline at end of file diff --git a/tests/language-server/vector-member.slang b/tests/language-server/vector-member.slang index 5d624e56d..341544ac0 100644 --- a/tests/language-server/vector-member.slang +++ b/tests/language-server/vector-member.slang @@ -1,7 +1,12 @@ -//TEST:LANG_SERVER: +//TEST:LANG_SERVER(filecheck=CHECK): void f() { float4 v; //COMPLETE:6,7 v. } + +// CHECK: x +// CHECK: y +// CHECK: z +// CHECK: w \ No newline at end of file -- cgit v1.2.3