Add barycentric shader flag when used (#3491)
A Dxil shader flag should be added when SV_Barycentrics semantic or AttributeAtVertex() are used. It was defined and member variables created for it, but it wasn't actually set.
This commit is contained in:
Родитель
5a6cd583d0
Коммит
8fb57e7e27
|
@ -293,6 +293,7 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F,
|
|||
bool hasMulticomponentUAVLoads = false;
|
||||
bool hasViewportOrRTArrayIndex = false;
|
||||
bool hasShadingRate = false;
|
||||
bool hasBarycentrics = false;
|
||||
bool hasSamplerFeedback = false;
|
||||
bool hasRaytracingTier1_1 = false;
|
||||
bool hasAtomicInt64OnTypedResource = false;
|
||||
|
@ -408,6 +409,9 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F,
|
|||
case DXIL::OpCode::GeometryIndex:
|
||||
hasRaytracingTier1_1 = true;
|
||||
break;
|
||||
case DXIL::OpCode::AttributeAtVertex:
|
||||
hasBarycentrics = true;
|
||||
break;
|
||||
case DXIL::OpCode::AtomicBinOp:
|
||||
case DXIL::OpCode::AtomicCompareExchange:
|
||||
if (isInt64) {
|
||||
|
@ -467,6 +471,9 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F,
|
|||
case Semantic::Kind::ShadingRate:
|
||||
hasShadingRate = true;
|
||||
break;
|
||||
case Semantic::Kind::Barycentrics:
|
||||
hasBarycentrics = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -531,6 +538,7 @@ ShaderFlags ShaderFlags::CollectShaderFlags(const Function *F,
|
|||
flag.SetViewID(hasViewID);
|
||||
flag.SetViewportAndRTArrayIndex(hasViewportOrRTArrayIndex);
|
||||
flag.SetShadingRate(hasShadingRate);
|
||||
flag.SetBarycentrics(hasBarycentrics);
|
||||
flag.SetSamplerFeedback(hasSamplerFeedback);
|
||||
flag.SetRaytracingTier1_1(hasRaytracingTier1_1);
|
||||
flag.SetAtomicInt64OnTypedResource(hasAtomicInt64OnTypedResource);
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
// RUN: %dxilver 1.1 | %dxc -E main -T ps_6_1 %s | FileCheck %s
|
||||
|
||||
|
||||
// CHECK: Note: shader requires additional functionality:
|
||||
// CHECK-NEXT: Barycentrics
|
||||
|
||||
// CHECK: call float @dx.op.attributeAtVertex.f32(i32 137, i32 0, i32 0, i8 0, i8 0)
|
||||
// CHECK: call float @dx.op.attributeAtVertex.f32(i32 137, i32 0, i32 0, i8 1, i8 0)
|
||||
// CHECK: call float @dx.op.attributeAtVertex.f32(i32 137, i32 0, i32 0, i8 2, i8 0)
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
// RUN: %dxilver 1.6 | %dxc -E main -T ps_6_2 -HV 2018 -enable-16bit-types %s | FileCheck %s
|
||||
|
||||
|
||||
// CHECK: Note: shader requires additional functionality:
|
||||
// CHECK-NEXT: Barycentrics
|
||||
|
||||
// CHECK: call i32 @dx.op.attributeAtVertex.i32(i32 137, i32 0, i32 0, i8 0, i8 0)
|
||||
// CHECK: call i32 @dx.op.attributeAtVertex.i32(i32 137, i32 0, i32 0, i8 1, i8 0)
|
||||
// CHECK: call i32 @dx.op.attributeAtVertex.i32(i32 137, i32 0, i32 0, i8 2, i8 0)
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
// RUN: %dxilver 1.1 | %dxc -E main -T ps_6_1 -O0 %s | FileCheck %s
|
||||
|
||||
// CHECK: Note: shader requires additional functionality:
|
||||
// CHECK-NEXT: Barycentrics
|
||||
|
||||
// CHECK: call float @dx.op.attributeAtVertex.f32(i32 137, i32 1, i32 0, i8 0, i8 0)
|
||||
// CHECK: call float @dx.op.attributeAtVertex.f32(i32 137, i32 1, i32 0, i8 1, i8 0)
|
||||
// CHECK: call float @dx.op.attributeAtVertex.f32(i32 137, i32 1, i32 0, i8 2, i8 0)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
// RUN: %dxilver 1.1 | %dxc -E main -T ps_6_1 %s | FileCheck %s
|
||||
|
||||
// CHECK: Note: shader requires additional functionality:
|
||||
// CHECK-NEXT: Barycentrics
|
||||
// CHECK: !"SV_Barycentrics"
|
||||
|
||||
float4 main(float3 bary : SV_Barycentrics) : SV_Target
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
// RUN: %dxilver 1.1 | %dxc -E main -T ps_6_1 %s | FileCheck %s
|
||||
|
||||
// CHECK: Note: shader requires additional functionality:
|
||||
// CHECK-NEXT: Barycentrics
|
||||
|
||||
// CHECK: ; SV_Barycentrics
|
||||
// CHECK: ; SV_Barycentrics
|
||||
// CHECK: ; SV_Barycentrics
|
||||
|
|
Загрузка…
Ссылка в новой задаче