|
@@ -1,13 +1,15 @@
|
|
|
+// RUN: %dxc -E MainPS -T ps_6_6 %s | FileCheck %s
|
|
|
// RUN: %dxc -E MainCS -T cs_6_6 %s | FileCheck %s
|
|
|
// RUN: %dxc -E MainAS -T as_6_6 %s | FileCheck %s
|
|
|
// RUN: %dxc -E MainMS -T ms_6_6 %s | FileCheck %s
|
|
|
+// RUN: %dxc -T lib_6_6 %s | FileCheck %s
|
|
|
|
|
|
// Make sure add is not sunk into if.
|
|
|
// Compute shader variant of convergent.hlsl
|
|
|
|
|
|
-// CHECK: add
|
|
|
-// CHECK: add
|
|
|
-// CHECK: icmp
|
|
|
+// CHECK: fadd
|
|
|
+// CHECK: fadd
|
|
|
+// CHECK: fcmp
|
|
|
// CHECK-NEXT: br
|
|
|
|
|
|
|
|
@@ -15,34 +17,41 @@ Texture2D<float4> tex;
|
|
|
RWBuffer<float4> output;
|
|
|
SamplerState s;
|
|
|
|
|
|
-void doit(uint ix, uint3 id){
|
|
|
+float4 doit(float2 a, float b){
|
|
|
|
|
|
- float2 coord = id.xy + id.z;
|
|
|
- float4 c = id.z;
|
|
|
- if (id.z > 2) {
|
|
|
+ float2 coord = a + b;
|
|
|
+ float4 c = b;
|
|
|
+ if (b > 2) {
|
|
|
c += tex.Sample(s, coord);
|
|
|
}
|
|
|
- output[ix] = c;
|
|
|
-
|
|
|
+ return c;
|
|
|
}
|
|
|
|
|
|
+[shader("compute")]
|
|
|
[numthreads(4,4,4)]
|
|
|
void MainCS(uint ix : SV_GroupIndex, uint3 id : SV_GroupThreadID) {
|
|
|
- doit(ix, id);
|
|
|
+ output[ix] = doit(id.xy, id.z);
|
|
|
}
|
|
|
|
|
|
struct Payload { int nothing; };
|
|
|
|
|
|
+[shader("amplification")]
|
|
|
[numthreads(4,4,4)]
|
|
|
void MainAS(uint ix : SV_GroupIndex, uint3 id : SV_GroupThreadID) {
|
|
|
- doit(ix, id);
|
|
|
+ output[ix] = doit(id.xy, id.z);
|
|
|
Payload pld = (Payload)0;
|
|
|
DispatchMesh(1,1,1,pld);
|
|
|
}
|
|
|
|
|
|
|
|
|
+[shader("mesh")]
|
|
|
[numthreads(4,4,4)]
|
|
|
[outputtopology("triangle")]
|
|
|
void MainMS(uint ix : SV_GroupIndex, uint3 id : SV_GroupThreadID) {
|
|
|
- doit(ix, id);
|
|
|
+ output[ix] = doit(id.xy, id.z);
|
|
|
+}
|
|
|
+
|
|
|
+[shader("pixel")]
|
|
|
+float4 MainPS(float2 a:A, float b:B) : SV_Target {
|
|
|
+ return doit(a, b);
|
|
|
}
|