yum-mirror/slang

Making it easier to work with shaders

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

Tim FoleyConvert more tests to use shader objects (#1659)2a5d5b323

master
1.8 KiB87 linesraw
1//TEST(compute):COMPARE_COMPUTE:-dx11 -shaderobj
2//TEST(compute):COMPARE_COMPUTE:-vk -shaderobj
3//TEST(compute):COMPARE_COMPUTE:-cpu -xslang -disable-specialization -shaderobj
4//TEST(compute):COMPARE_COMPUTE:-cuda -xslang -disable-specialization -shaderobj
5
6// Test dynamic dispatch code gen for associated-typed return values
7// and local variables.
8// TODO: test arguments of associated type.
9[anyValueSize(8)]
10interface IAssoc
11{
12    int Compute();
13}
14[anyValueSize(16)]
15interface IInterface
16{
17    associatedtype TAssoc : IAssoc;
18
19    [mutating]
20    void SetVal(int inVal);
21
22    TAssoc GetAssoc();
23};
24
25T.TAssoc CreateT_Assoc_Inner<T:IInterface>(int inVal)
26{
27    T obj;
28    obj.SetVal(inVal);
29    return obj.GetAssoc();
30}
31
32T.TAssoc CreateT_Assoc<T:IInterface>(int inVal)
33{
34    return CreateT_Assoc_Inner<T>(inVal);
35}
36
37T CreateT<T:IInterface>(int inVal)
38{
39    T obj;
40    obj.SetVal(inVal);
41    return obj;
42}
43
44struct Impl : IInterface
45{
46    struct TAssoc : IAssoc
47    {
48        int base;
49        int Compute()
50        {
51            return base;
52        }
53    };
54
55    TAssoc assoc;
56    [mutating]
57    void SetVal(int inVal)
58    {
59        assoc.base = inVal;
60    }
61
62    TAssoc GetAssoc()
63    {
64        return assoc;
65    }
66};
67
68int test()
69{
70    var obj = CreateT<Impl>(2);
71    var obj2 = CreateT_Assoc<Impl>(1);
72    // TODO: compiler crash if type parameter is missing.
73    // (hitting lowering logic of TypeEqualityWitness)
74    var obj3 = CreateT_Assoc_Inner<Impl>(1);
75    return obj.GetAssoc().Compute() + obj2.Compute() + obj3.Compute();
76}
77
78//TEST_INPUT:ubuffer(data=[0 1 2 3], stride=4):out,name=outputBuffer
79RWStructuredBuffer<int> outputBuffer;
80
81[numthreads(4, 1, 1)]
82void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
83{
84    uint tid = dispatchThreadID.x;
85    int outVal = test();
86    outputBuffer[tid] = outVal;
87}