yum-mirror/slang

Making it easier to work with shaders

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

Yong HeAdd documentation for uniformity analysis. (#3721)215028746

master
1.9 KiB98 linesraw
1
2
3//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): -target hlsl -entry main -profile cs_6_0 -validate-uniformity
4
5RWStructuredBuffer<int> output;
6void expectUniform(dynamic_uniform int v)
7{
8    output[0] = v;
9}
10
11[NonUniformReturn]
12int produceNonUniform() { return 0; }
13
14struct B
15{
16    int a;
17    int c;
18    dynamic_uniform int d;
19    dynamic_uniform int d1;
20    dynamic_uniform int d2;
21    dynamic_uniform int d3;
22    dynamic_uniform int d4;
23}
24
25int getBa(B obj)
26{
27    return obj.a;
28}
29
30int getBaFromInout(inout B obj)
31{
32    return obj.a;
33}
34
35int getBdFromInout(inout B obj)
36{
37    return obj.d;
38}
39
40ConstantBuffer<B> ub;
41void main(int tid: SV_DispatchThreadID)
42{
43    int d = ub.a + ub.c;
44    int f = ub.a + tid;
45    int ff = ub.a + produceNonUniform();
46    
47    // CHECK-DAG: ([[# @LINE+1]]): warning 41201
48    expectUniform(f);
49    // CHECK-DAG: ([[# @LINE+1]]): warning 41201
50    expectUniform(ff);
51
52    B obj = ub;
53    // CHECK-DAG: ([[# @LINE+1]]): warning 41201
54    expectUniform(getBaFromInout(obj));
55    obj.a = ff;
56    // CHECK-DAG: ([[# @LINE+1]]): warning 41201
57    expectUniform(getBa(obj));
58
59    // CHECK-DAG: ([[# @LINE+1]]): warning 41201
60    obj.d = ff;
61
62    int t = 0;
63    if (tid == 0)
64        t = 1;
65
66    // CHECK-DAG: ([[# @LINE+1]]): warning 41201
67    obj.d1 = t;
68
69    int u = 0;
70    if (ub.a == 0)
71        u = 1;
72    // CHECK-NOT: ([[# @LINE+1]]): warning 41201
73    obj.d2 = u;
74
75    int vv = 0;
76    if (tid == 0)
77        vv = 2;
78    else
79        vv = 2;
80    // CHECK-NOT: ([[# @LINE+1]]): warning 41201
81    obj.d3 = vv;
82
83    // CHECK-NOT: ([[# @LINE+1]]): warning 41201
84    expectUniform(getBdFromInout(obj));
85    
86    // CHECK-NOT: ([[# @LINE+1]]): warning 41201
87    obj.d4 = d; // OK
88
89    // CHECK-NOT: ([[# @LINE+1]]): warning 41201
90    expectUniform(d);
91
92    // CHECK-NOT: ([[# @LINE+1]]): warning 41201
93    expectUniform(getBa(ub));
94
95    // CHECK-NOT: ([[# @LINE+1]]): warning 41201
96    expectUniform(asDynamicUniform(ff));
97
98}