From 768e62f6c7541439e2edc18dad5fb3846d2e05f9 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 10 Oct 2022 15:59:45 -0700 Subject: Support multi-level break + single-return conversion + general inline. (#2436) * Support multi-level break. * Single return. * Add test for inlining `void` return-type functions. Co-authored-by: Yong He --- tests/language-feature/general-inline.slang | 60 +++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 tests/language-feature/general-inline.slang (limited to 'tests/language-feature/general-inline.slang') diff --git a/tests/language-feature/general-inline.slang b/tests/language-feature/general-inline.slang new file mode 100644 index 000000000..0fd323014 --- /dev/null +++ b/tests/language-feature/general-inline.slang @@ -0,0 +1,60 @@ +// multi-level-break.slang + +//TEST(compute):COMPARE_COMPUTE: -shaderobj +//TEST(compute):COMPARE_COMPUTE: -vk -shaderobj +//DISABLE_TEST(compute):COMPARE_COMPUTE:-cpu -shaderobj + +[__unsafeForceInlineEarly] +int test(int r) +{ + int result = 0; + for (int i = 0; i < 2; i++) + { + for (int j = 0; j < 3; j++) + { + result++; + if (r == 0) + { + return result; + } + } + if (r == 1) + return result; + } + return result; +} + +[__unsafeForceInlineEarly] +void testVoid(int r, out int result) +{ + result = 0; + for (int i = 0; i < 2; i++) + { + for (int j = 0; j < 3; j++) + { + result++; + if (r == 0) + { + return; + } + } + if (r == 1) + return; + } + return; +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID) +{ + outputBuffer[0] = test(0); + outputBuffer[1] = test(1); + outputBuffer[2] = test(2); + + int rs; + testVoid(2, rs); + outputBuffer[3] = rs; +} -- cgit v1.2.3