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
1.0 KiB55 linesraw
1//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -output-using-type
2
3// Test that a generic interface method in a generic interface
4// can have a body providing default implementation.
5
6interface IFoo<int v>
7{
8    int getVal();
9    int getGreaterVal<int x>()
10    {
11        return getVal() + x + v;
12    }
13}
14
15struct Impl : IFoo<2>
16{
17    int getVal()
18    {
19        return 42;
20    }
21    
22    // Using the default implementation for getGreaterVal.
23}
24
25struct Impl2 : IFoo<2>
26{
27    int getVal()
28    {
29        return 42;
30    }
31    
32    // overriding default implementation.
33    override int getGreaterVal<int x>()
34    {
35        return 100 + x;
36    }
37}
38
39int test<int y, T:IFoo<y>>(T v) { return v.getGreaterVal<1>(); }
40
41//TEST_INPUT: set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4)
42RWStructuredBuffer<int> resultBuffer;
43
44[numthreads(1,1,1)]
45void computeMain()
46{
47    Impl impl = {};
48    int result = test(impl);
49    resultBuffer[0] = result;
50    // CHECK: 45
51
52    Impl2 impl2 = {};
53    resultBuffer[1] = test(impl2);
54    // CHECK: 101
55}