yum-mirror/slang

Making it easier to work with shaders

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

kaizhangNVImplement if(let ...) syntax (#3673) (#3958)d3fd7470e

master
842 B38 linesraw
1//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -cpu -compute -shaderobj
2//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -cuda -compute -shaderobj
3//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-vk -compute -shaderobj
4
5//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
6RWStructuredBuffer<int> outputBuffer;
7
8
9interface IFoo
10{
11    int foo(int a);
12}
13
14struct MyImpl : IFoo
15{
16    int foo(int a) { return a; }
17}
18
19int test(IFoo foo, int idx)
20{
21    int val = 0;
22    if (let a = foo as MyImpl)
23    {
24        val = a.foo(idx);
25    }
26    return (val);
27}
28
29[numthreads(4, 1, 1)]
30void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID)
31{
32    MyImpl impl;
33    // CHECK: 0
34    // CHECK: 1
35    // CHECK: 2
36    // CHECK: 3
37    outputBuffer[dispatchThreadID.x] = test(impl, dispatchThreadID.x);
38}