yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
57c3f9382
master
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// CHECK: 2 6// CHECK-NEXT: 0 7// CHECK-NEXT: 11 8// CHECK-NEXT: 12 9// CHECK-NEXT: 6 10// CHECK-NEXT: 1 11 12//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0], stride=4):out,name=outputBuffer 13RWStructuredBuffer<int> outputBuffer; 14 15enum MyError1 16{ 17 Fail 18}; 19 20enum MyError2 21{ 22 Fail1, 23 Fail2 = 0x12 24}; 25 26void throwingFunc() throws MyError1 27{ 28 throw MyError1.Fail; 29} 30 31int maybeBadFunc1(int n) throws MyError1 32{ 33 if (n == 1) throw MyError1.Fail; 34 return n; 35} 36 37int maybeBadFunc2(int n) throws MyError2 38{ 39 if (n == 2) throw MyError2.Fail2; 40 return n; 41} 42 43int multiCatchFunc(int n) 44{ 45 do 46 { 47 let a = try maybeBadFunc1(n); 48 let b = try maybeBadFunc2(n); 49 return a+b; 50 } 51 catch(err: MyError1) 52 { 53 return 0x11; 54 } 55 catch(err: MyError2) 56 { 57 return reinterpret<int>(err); 58 } 59} 60 61int containedThrow() 62{ 63 do 64 { 65 throw MyError1.Fail; 66 } 67 catch(err: MyError1) 68 { 69 return 1; 70 } 71} 72 73[numthreads(1, 1, 1)] 74void computeMain(int3 dispatchThreadID: SV_DispatchThreadID) 75{ 76 do 77 { 78 try throwingFunc(); 79 outputBuffer[0] = 1; 80 } 81 catch(err: MyError1) 82 { 83 outputBuffer[0] = 2; 84 } 85 86 outputBuffer[1] = multiCatchFunc(0); 87 outputBuffer[2] = multiCatchFunc(1); 88 outputBuffer[3] = multiCatchFunc(2); 89 outputBuffer[4] = multiCatchFunc(3); 90 outputBuffer[5] = containedThrow(); 91}