No sinking coord calc for sample in libs (#3658)

Amidst catching the CS/AS/MS cases where convergent markers weren't
getting generated, it was pointed out that libs may need these too.
This commit is contained in:
Greg Roth 2021-04-01 16:40:34 -06:00 коммит произвёл GitHub
Родитель 93a98982cf
Коммит cac37e6890
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 22 добавлений и 13 удалений

Просмотреть файл

@ -48,7 +48,7 @@ public:
bool runOnModule(Module &M) override {
if (M.HasHLModule()) {
const ShaderModel *SM = M.GetHLModule().GetShaderModel();
if (!SM->IsPS() && (!SM->IsSM66Plus() || (!SM->IsCS() && !SM->IsMS() && !SM->IsAS())))
if (!SM->IsPS() && !SM->IsLib() && (!SM->IsSM66Plus() || (!SM->IsCS() && !SM->IsMS() && !SM->IsAS())))
return false;
}
bool bUpdated = false;

Просмотреть файл

@ -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);
}