yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Julius IkkalaImplement throw & catch statements (#6916)57c3f9382

master
1.1 KiB58 linesraw
1//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj
2//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -shaderobj
3//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -cpu -shaderobj
4
5//TEST_INPUT:ubuffer(data=[0 0 0 0 0], stride=4):out,name=outputBuffer
6RWStructuredBuffer<int> outputBuffer;
7
8enum MyError
9{
10    Fail
11};
12    
13int maybeThrowingFunc(int n) throws MyError
14{
15    if (n == 3)
16        throw MyError.Fail;
17    return n;
18}
19
20void testFunc(int n, inout int i)
21{
22    int value = n;
23    defer
24    {
25        outputBuffer[i++] = value;
26    }
27
28    defer
29    {
30        do
31        {
32            let m = try maybeThrowingFunc(n);
33            value += m;
34        }
35        catch(err: MyError)
36        {
37            defer
38            {
39                outputBuffer[i++] = 0x80;
40            }
41            outputBuffer[i++] = 0xFF;
42        }
43    }
44}
45
46[numthreads(1, 1, 1)]
47void computeMain(int3 dispatchThreadID: SV_DispatchThreadID)
48{
49    int i = 0;
50    // CHECK: 2
51    testFunc(1, i);
52    // CHECK-NEXT: 4
53    testFunc(2, i);
54    // CHECK-NEXT: FF
55    // CHECK-NEXT: 80
56    // CHECK-NEXT: 3
57    testFunc(3, i);
58}