yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
215028746
master
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}