diff options
| author | Yong He <yonghe@outlook.com> | 2024-08-27 18:48:41 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-27 18:48:41 -0700 |
| commit | 4f6f827e26ffcb9b850ef8a8b7f7b4beb5addb7a (patch) | |
| tree | e8f20e798866df7e10067ce5b7ae22f9dc57ff84 /tests/language-feature/ifunc/functor.slang | |
| parent | fbaa444d890f58fabc5933b0c28048d2c5d862c0 (diff) | |
Add functor syntax support. (#4926)
Diffstat (limited to 'tests/language-feature/ifunc/functor.slang')
| -rw-r--r-- | tests/language-feature/ifunc/functor.slang | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/language-feature/ifunc/functor.slang b/tests/language-feature/ifunc/functor.slang new file mode 100644 index 000000000..73987cbbf --- /dev/null +++ b/tests/language-feature/ifunc/functor.slang @@ -0,0 +1,40 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-shaderobj -output-using-type +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-dx12 -use-dxil -shaderobj -output-using-type +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -shaderobj -output-using-type +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -shaderobj -output-using-type + +struct Functor : IMutatingFunc<float, float> +{ + int context; + + [mutating] + float operator()(float p) + { + context += (int)p; + return context; + } +} + +float apply<T:IMutatingFunc<float,float>>(inout T f, float p) +{ + return f(p); +} + +//TEST_INPUT:ubuffer(data=[0 3 2 2], stride=4):out,name=outputBuffer +RWStructuredBuffer<uint> outputBuffer; + +[numthreads(1, 1, 1)] +void computeMain(uint tid: SV_DispatchThreadID) +{ + Functor f; + f.context = 0; + + f(1.0f); + f.operator()(1.0f); // explicit operator () call should also work. + + apply(f, 2.0f); + apply(f, 3.0f); + + // CHECK: 7 + outputBuffer[0] = (uint)f.context; +} |
