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:
Greg Roth 2021-02-22 22:26:34 -07:00 коммит произвёл GitHub
Родитель 5a6cd583d0
Коммит 8fb57e7e27
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
6 изменённых файлов: 24 добавлений и 0 удалений

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

@ -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