Skip to content

Commit fb7043e

Browse files
authored
[Metadata] Limit bitfield annotation to validator version >= 1.7 (#5282)
* [Metadata] Limit bitfield annotation to validator version >= 1.7 Only emit bitfield annotation for validator version >= 1.7 This is to avoid validation error on old validator.
1 parent c8c6347 commit fb7043e

6 files changed

Lines changed: 26 additions & 18 deletions

File tree

lib/DXIL/DxilMetadataHelper.cpp

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,21 +1218,23 @@ Metadata *DxilMDHelper::EmitDxilFieldAnnotation(const DxilFieldAnnotation &FA) {
12181218
m_pModule->GetDxilModule().GetOP()->GetResourcePropertiesType(),
12191219
*m_pSM)));
12201220
}
1221-
if (FA.HasBitFields()) {
1222-
const std::vector<DxilFieldAnnotation> &BitFields = FA.GetBitFields();
1223-
vector<Metadata *> MDBitFieldVals;
1224-
for (const DxilFieldAnnotation &BitField : BitFields) {
1225-
MDBitFieldVals.emplace_back(EmitDxilFieldAnnotation(BitField));
1221+
if (DXIL::CompareVersions(m_MinValMajor, m_MinValMinor, 1, 7) >= 0) {
1222+
if (FA.HasBitFields()) {
1223+
const std::vector<DxilFieldAnnotation> &BitFields = FA.GetBitFields();
1224+
vector<Metadata *> MDBitFieldVals;
1225+
for (const DxilFieldAnnotation &BitField : BitFields) {
1226+
MDBitFieldVals.emplace_back(EmitDxilFieldAnnotation(BitField));
1227+
}
1228+
auto *BitFieldsMD = MDNode::get(m_Ctx, MDBitFieldVals);
1229+
MDVals.emplace_back(Uint32ToConstMD(kDxilFieldAnnotationBitFieldsTag));
1230+
MDVals.emplace_back(BitFieldsMD);
1231+
}
1232+
if (FA.HasBitFieldWidth()) {
1233+
MDVals.emplace_back(
1234+
Uint32ToConstMD(kDxilFieldAnnotationBitFieldWidthTag));
1235+
MDVals.emplace_back(Uint32ToConstMD(FA.GetBitFieldWidth()));
12261236
}
1227-
auto *BitFieldsMD = MDNode::get(m_Ctx, MDBitFieldVals);
1228-
MDVals.emplace_back(Uint32ToConstMD(kDxilFieldAnnotationBitFieldsTag));
1229-
MDVals.emplace_back(BitFieldsMD);
1230-
}
1231-
if (FA.HasBitFieldWidth()) {
1232-
MDVals.emplace_back(Uint32ToConstMD(kDxilFieldAnnotationBitFieldWidthTag));
1233-
MDVals.emplace_back(Uint32ToConstMD(FA.GetBitFieldWidth()));
12341237
}
1235-
12361238
return MDNode::get(m_Ctx, MDVals);
12371239
}
12381240

@@ -1286,6 +1288,9 @@ void DxilMDHelper::LoadDxilFieldAnnotation(const MDOperand &MDO, DxilFieldAnnota
12861288
FA.SetResourceProperties(resource_helper::loadPropsFromConstant(*C));
12871289
break;
12881290
case kDxilFieldAnnotationBitFieldsTag: {
1291+
if (DXIL::CompareVersions(m_MinValMajor, m_MinValMinor, 1, 7) < 0) {
1292+
DXASSERT(false, "bitfields tag emitted for dxil version < 1.7");
1293+
}
12891294
const MDTuple *pBitFieldsTupleMD = dyn_cast<MDTuple>(MDO.get());
12901295
std::vector<DxilFieldAnnotation> BitFields(pBitFieldsTupleMD->getNumOperands());
12911296
for (unsigned i = 0; i < pBitFieldsTupleMD->getNumOperands(); ++i) {
@@ -1294,6 +1299,9 @@ void DxilMDHelper::LoadDxilFieldAnnotation(const MDOperand &MDO, DxilFieldAnnota
12941299
FA.SetBitFields(BitFields);
12951300
} break;
12961301
case kDxilFieldAnnotationBitFieldWidthTag:
1302+
if (DXIL::CompareVersions(m_MinValMajor, m_MinValMinor, 1, 7) < 0) {
1303+
DXASSERT(false, "bitfields width tag emitted for dxil version < 1.7");
1304+
}
12971305
FA.SetBitFieldWidth(ConstMDToUint32(MDO));
12981306
break;
12991307
default:

tools/clang/test/HLSLFileCheck/d3dreflect/bitfield-combine-to-unsigned.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %dxc -E main -T ps_6_0 -HV 2021 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
1+
// RUN: %dxilver 1.7 | %dxc -E main -T ps_6_0 -HV 2021 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
22

33
// Make sure bitfiled info is saved.
44

tools/clang/test/HLSLFileCheck/d3dreflect/bitfield-enum.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %dxc -T lib_6_6 -HV 2021 -E main %s | %D3DReflect %s | FileCheck %s
1+
// RUN: %dxilver 1.7 | %dxc -T lib_6_6 -HV 2021 -E main -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
22

33
// Make sure bit field on enum works.
44

tools/clang/test/HLSLFileCheck/d3dreflect/bitfield_in-structured-buffer.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %dxc -E main -T ps_6_0 -HV 2021 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
1+
// RUN: %dxilver 1.7 | %dxc -E main -T ps_6_0 -HV 2021 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
22

33
// Make sure bitfiled info is saved.
44

tools/clang/test/HLSLFileCheck/d3dreflect/bitfield_single_member.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %dxc -E main -T ps_6_0 -HV 2021 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
1+
// RUN: %dxilver 1.7 | %dxc -E main -T ps_6_0 -HV 2021 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
22

33
// Make sure bitfiled info is saved.
44

tools/clang/test/HLSLFileCheck/d3dreflect/bitfield_spill-over.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %dxc -E main -T ps_6_0 -HV 2021 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
1+
// RUN: %dxilver 1.7 | %dxc -E main -T ps_6_0 -HV 2021 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
22

33
// Make sure bitfiled info is saved.
44
// FIXME: check half as 16bit when enable-16bit-types.

0 commit comments

Comments
 (0)