diff options
| author | kaizhangNV <149626564+kaizhangNV@users.noreply.github.com> | 2025-05-15 12:00:50 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-15 10:00:50 -0700 |
| commit | d961f4438ef865028d289148d22e0fb5c0d8319a (patch) | |
| tree | ee9adf165634f89fc2454761c706f12292e58b69 /tests/initializer-list | |
| parent | b325474c4aba52cca7e0bcd4eae02d23ca4ab9a3 (diff) | |
Implement C++ style default member initializer (#7087)
close #7069.
We just insert the assignment expression to the beginning of the user-defined ctor, where the assignee is the member with init expression.
Diffstat (limited to 'tests/initializer-list')
| -rw-r--r-- | tests/initializer-list/cpp-style-default-member-init.slang | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/tests/initializer-list/cpp-style-default-member-init.slang b/tests/initializer-list/cpp-style-default-member-init.slang new file mode 100644 index 000000000..48ee221cf --- /dev/null +++ b/tests/initializer-list/cpp-style-default-member-init.slang @@ -0,0 +1,100 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUFFER):-shaderobj -vk -output-using-type +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUFFER):-shaderobj -output-using-type + +struct NonCStyle +{ + int x = 3; + float y = 4.0f; + int z[2] = {5, 6}; + float2 w = {7.0f, 8.0f}; + + __init(int x) + { + this.x = x; + } + + __init(int x, float y) + { + this.x = x; + this.y = y; + } + + __init(int arr[2]) + { + this.z[0] = arr[0]; + this.z[1] = arr[1]; + } + + __init(float2 vec) + { + this.w= vec; + } +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<float> outputBuffer; +void test() +{ + int idx = 0; + NonCStyle s1 = NonCStyle(1); + outputBuffer[idx++] = s1.x; + // BUFFER: 1 + outputBuffer[idx++] = s1.y; + // BUFFER: 4.0 + outputBuffer[idx++] = s1.z[0]; + // BUFFER: 5 + outputBuffer[idx++] = s1.z[1]; + // BUFFER: 6 + outputBuffer[idx++] = s1.w.x; + // BUFFER: 7 + outputBuffer[idx++] = s1.w.y; + // BUFFER: 8 + + NonCStyle s2 = NonCStyle(1, 12.0); + outputBuffer[idx++] = s2.x; + // BUFFER: 1 + outputBuffer[idx++] = s2.y; + // BUFFER: 12.0 + outputBuffer[idx++] = s2.z[0]; + // BUFFER: 5 + outputBuffer[idx++] = s2.z[1]; + // BUFFER: 6 + outputBuffer[idx++] = s2.w.x; + // BUFFER: 7 + outputBuffer[idx++] = s2.w.y; + // BUFFER: 8 + + NonCStyle s3 = NonCStyle(Array<int, 2>(21u, 22u)); + outputBuffer[idx++] = s3.x; + // BUFFER: 3 + outputBuffer[idx++] = s3.y; + // BUFFER: 4.0 + outputBuffer[idx++] = s3.z[0]; + // BUFFER: 21 + outputBuffer[idx++] = s3.z[1]; + // BUFFER: 22 + outputBuffer[idx++] = s3.w.x; + // BUFFER: 7 + outputBuffer[idx++] = s3.w.y; + // BUFFER: 8 + + NonCStyle s4 = NonCStyle(float2(31, 32)); + outputBuffer[idx++] = s4.x; + // BUFFER: 3 + outputBuffer[idx++] = s4.y; + // BUFFER: 4.0 + outputBuffer[idx++] = s4.z[0]; + // BUFFER: 5 + outputBuffer[idx++] = s4.z[1]; + // BUFFER: 6 + outputBuffer[idx++] = s4.w.x; + // BUFFER: 31 + outputBuffer[idx++] = s4.w.y; + // BUFFER: 32 +} + +[shader("compute")] +void computeMain() +{ + test(); +} |
