yum-mirror/slang

Making it easier to work with shaders

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

Yong HeRequire `override` keyword for overriding default interface methods. (#7458)a4345725a

master
875 B40 linesraw
1//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -output-using-type
2
3// Test that a generic interface method can have a body providing default implementation.
4
5interface IFoo
6{
7    int getVal();
8    int getGreaterVal<int x>()
9    {
10        return getVal() + x;
11    }
12}
13
14struct Impl : IFoo
15{
16    int getVal()
17    {
18        return 42;
19    }
20    
21    // override default implementation for getGreaterVal.
22    override int getGreaterVal<int x>()
23    {
24        return getVal() + x + 1; // Adding 1 to differentiate from the default implementation.
25    }
26}
27
28int test<T:IFoo>(T v) { return v.getGreaterVal<1>(); }
29
30//TEST_INPUT: set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4)
31RWStructuredBuffer<int> resultBuffer;
32
33[numthreads(1,1,1)]
34void computeMain()
35{
36    Impl impl = {};
37    int result = test(impl);
38    resultBuffer[0] = result;
39    // CHECK: 44
40}