Skip to content

Commit 26f6091

Browse files
authored
[DirectX] Replace ResourceFlag enum with struct fields (llvm#106617)
Remove the enum about ResourceFlag. Add struct ResourceFlags which save the resource flags with bool fields. This will get better yaml dump. For llvm#103275
1 parent 9aa25b8 commit 26f6091

22 files changed

+155
-91
lines changed

llvm/include/llvm/BinaryFormat/DXContainer.h

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -313,13 +313,19 @@ enum class ResourceKind : uint32_t {
313313

314314
ArrayRef<EnumEntry<ResourceKind>> getResourceKinds();
315315

316-
#define RESOURCE_FLAG(Val, Enum) Enum = Val,
317-
enum class ResourceFlag : uint32_t {
318-
#include "DXContainerConstants.def"
316+
#define RESOURCE_FLAG(Index, Enum) bool Enum = false;
317+
struct ResourceFlags {
318+
ResourceFlags() {};
319+
struct FlagsBits {
320+
#include "llvm/BinaryFormat/DXContainerConstants.def"
321+
};
322+
union {
323+
uint32_t Flags;
324+
FlagsBits Bits;
325+
};
326+
bool operator==(const uint32_t RFlags) const { return Flags == RFlags; }
319327
};
320328

321-
ArrayRef<EnumEntry<ResourceFlag>> getResourceFlags();
322-
323329
namespace v0 {
324330
struct RuntimeInfo {
325331
PipelinePSVInfo StageInfo;
@@ -439,12 +445,12 @@ struct RuntimeInfo : public v1::RuntimeInfo {
439445

440446
struct ResourceBindInfo : public v0::ResourceBindInfo {
441447
ResourceKind Kind;
442-
uint32_t Flags;
448+
ResourceFlags Flags;
443449

444450
void swapBytes() {
445451
v0::ResourceBindInfo::swapBytes();
446452
sys::swapByteOrder(Kind);
447-
sys::swapByteOrder(Flags);
453+
sys::swapByteOrder(Flags.Flags);
448454
}
449455
};
450456

llvm/include/llvm/BinaryFormat/DXContainerConstants.def

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,7 @@ RESOURCE_KIND(18, FeedbackTexture2DArray)
190190
#endif // RESOURCE_KIND
191191

192192
#ifdef RESOURCE_FLAG
193-
RESOURCE_FLAG(0, None)
194-
RESOURCE_FLAG(1, UsedByAtomic64)
193+
RESOURCE_FLAG(0, UsedByAtomic64)
195194

196195
#undef RESOURCE_FLAG
197196
#endif // RESOURCE_FLAG

llvm/include/llvm/ObjectYAML/DXContainerYAML.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ struct ShaderHash {
7272
std::vector<llvm::yaml::Hex8> Digest;
7373
};
7474

75+
using ResourceFlags = dxbc::PSV::ResourceFlags;
7576
using ResourceBindInfo = dxbc::PSV::v2::ResourceBindInfo;
7677

7778
struct SignatureElement {
@@ -178,7 +179,6 @@ LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::PSV::ComponentType)
178179
LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::PSV::InterpolationMode)
179180
LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::PSV::ResourceType)
180181
LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::PSV::ResourceKind)
181-
LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::PSV::ResourceFlag)
182182
LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::D3DSystemValue)
183183
LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::SigComponentType)
184184
LLVM_YAML_DECLARE_ENUM_TRAITS(llvm::dxbc::SigMinPrecision)
@@ -221,6 +221,10 @@ template <> struct MappingTraits<DXContainerYAML::Object> {
221221
static void mapping(IO &IO, DXContainerYAML::Object &Obj);
222222
};
223223

224+
template <> struct MappingTraits<DXContainerYAML::ResourceFlags> {
225+
static void mapping(IO &IO, DXContainerYAML::ResourceFlags &Flags);
226+
};
227+
224228
template <> struct MappingTraits<DXContainerYAML::ResourceBindInfo> {
225229
static void mapping(IO &IO, DXContainerYAML::ResourceBindInfo &Res);
226230
};

llvm/lib/BinaryFormat/DXContainer.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,3 @@ static const EnumEntry<PSV::ResourceKind> ResourceKindNames[] = {
109109
ArrayRef<EnumEntry<PSV::ResourceKind>> PSV::getResourceKinds() {
110110
return ArrayRef(ResourceKindNames);
111111
}
112-
113-
#define RESOURCE_FLAG(Val, Enum) {#Enum, PSV::ResourceFlag::Enum},
114-
115-
static const EnumEntry<PSV::ResourceFlag> ResourceFlagNames[] = {
116-
#include "llvm/BinaryFormat/DXContainerConstants.def"
117-
};
118-
119-
ArrayRef<EnumEntry<PSV::ResourceFlag>> PSV::getResourceFlags() {
120-
return ArrayRef(ResourceFlagNames);
121-
}

llvm/lib/ObjectYAML/DXContainerYAML.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ void MappingTraits<DXContainerYAML::Object>::mapping(
206206
IO.mapRequired("Parts", Obj.Parts);
207207
}
208208

209+
void MappingTraits<DXContainerYAML::ResourceFlags>::mapping(
210+
IO &IO, DXContainerYAML::ResourceFlags &Flags) {
211+
#define RESOURCE_FLAG(FlagIndex, Enum) IO.mapRequired(#Enum, Flags.Bits.Enum);
212+
#include "llvm/BinaryFormat/DXContainerConstants.def"
213+
}
214+
209215
void MappingTraits<DXContainerYAML::ResourceBindInfo>::mapping(
210216
IO &IO, DXContainerYAML::ResourceBindInfo &Res) {
211217
IO.mapRequired("Type", Res.Type);
@@ -266,12 +272,6 @@ void ScalarEnumerationTraits<dxbc::PSV::ResourceKind>::enumeration(
266272
IO.enumCase(Value, E.Name.str().c_str(), E.Value);
267273
}
268274

269-
void ScalarEnumerationTraits<dxbc::PSV::ResourceFlag>::enumeration(
270-
IO &IO, dxbc::PSV::ResourceFlag &Value) {
271-
for (const auto &E : dxbc::PSV::getResourceFlags())
272-
IO.enumCase(Value, E.Name.str().c_str(), E.Value);
273-
}
274-
275275
void ScalarEnumerationTraits<dxbc::D3DSystemValue>::enumeration(
276276
IO &IO, dxbc::D3DSystemValue &Value) {
277277
for (const auto &E : dxbc::getD3DSystemValues())

llvm/test/ObjectYAML/DXContainer/DomainMaskVectors.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ Parts:
7575
LowerBound: 0
7676
UpperBound: 0
7777
Kind: CBuffer
78-
Flags: 0
78+
Flags:
79+
UsedByAtomic64: true
7980
SigInputElements:
8081
- Name: AAA_HSFoo
8182
Indices: [ 0 ]

llvm/test/ObjectYAML/DXContainer/PSVv2-amplification.yaml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,15 @@ Parts:
3030
LowerBound: 3
3131
UpperBound: 4
3232
Kind: TextureCube
33-
Flags: 0
33+
Flags:
34+
UsedByAtomic64: false
3435
- Type: Invalid
3536
Space: 32768
3637
LowerBound: 8388608
3738
UpperBound: 2147483648
3839
Kind: Invalid
39-
Flags: 0
40+
Flags:
41+
UsedByAtomic64: false
4042
SigInputElements: []
4143
SigOutputElements: []
4244
SigPatchOrPrimElements: []
@@ -77,13 +79,15 @@ Parts:
7779
# CHECK-NEXT: LowerBound: 3
7880
# CHECK-NEXT: UpperBound: 4
7981
# CHECK-NEXT: Kind: TextureCube
80-
# CHECK-NEXT: Flags: 0
82+
# CHECK-NEXT: Flags:
83+
# CHECK-NEXT: UsedByAtomic64: false
8184
# CHECK-NEXT: - Type: Invalid
8285
# CHECK-NEXT: Space: 32768
8386
# CHECK-NEXT: LowerBound: 8388608
8487
# CHECK-NEXT: UpperBound: 2147483648
8588
# CHECK-NEXT: Kind: Invalid
86-
# CHECK-NEXT: Flags: 0
89+
# CHECK-NEXT: Flags:
90+
# CHECK-NEXT: UsedByAtomic64: false
8791
# CHECK-NEXT: SigInputElements: []
8892
# CHECK-NEXT: SigOutputElements: []
8993
# CHECK-NEXT: SigPatchOrPrimElements: []

llvm/test/ObjectYAML/DXContainer/PSVv2-compute.yaml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ Parts:
2929
LowerBound: 3
3030
UpperBound: 4
3131
Kind: TextureCube
32-
Flags: 0
32+
Flags:
33+
UsedByAtomic64: false
3334
- Type: Invalid
3435
Space: 32768
3536
LowerBound: 8388608
3637
UpperBound: 2147483648
3738
Kind: Invalid
38-
Flags: 0
39+
Flags:
40+
UsedByAtomic64: false
3941
SigInputElements: []
4042
SigOutputElements: []
4143
SigPatchOrPrimElements: []
@@ -75,13 +77,15 @@ Parts:
7577
# CHECK-NEXT: LowerBound: 3
7678
# CHECK-NEXT: UpperBound: 4
7779
# CHECK-NEXT: Kind: TextureCube
78-
# CHECK-NEXT: Flags: 0
80+
# CHECK-NEXT: Flags:
81+
# CHECK-NEXT: UsedByAtomic64: false
7982
# CHECK-NEXT: - Type: Invalid
8083
# CHECK-NEXT: Space: 32768
8184
# CHECK-NEXT: LowerBound: 8388608
8285
# CHECK-NEXT: UpperBound: 2147483648
8386
# CHECK-NEXT: Kind: Invalid
84-
# CHECK-NEXT: Flags: 0
87+
# CHECK-NEXT: Flags:
88+
# CHECK-NEXT: UsedByAtomic64: false
8589
# CHECK-NEXT: SigInputElements: []
8690
# CHECK-NEXT: SigOutputElements: []
8791
# CHECK-NEXT: SigPatchOrPrimElements: []

llvm/test/ObjectYAML/DXContainer/PSVv2-domain.yaml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,15 @@ Parts:
3333
LowerBound: 3
3434
UpperBound: 4
3535
Kind: TextureCube
36-
Flags: 0
36+
Flags:
37+
UsedByAtomic64: false
3738
- Type: Invalid
3839
Space: 32768
3940
LowerBound: 8388608
4041
UpperBound: 2147483648
4142
Kind: Invalid
42-
Flags: 0
43+
Flags:
44+
UsedByAtomic64: false
4345
SigInputElements: []
4446
SigOutputElements: []
4547
SigPatchOrPrimElements: []
@@ -84,13 +86,15 @@ Parts:
8486
# CHECK-NEXT: LowerBound: 3
8587
# CHECK-NEXT: UpperBound: 4
8688
# CHECK-NEXT: Kind: TextureCube
87-
# CHECK-NEXT: Flags: 0
89+
# CHECK-NEXT: Flags:
90+
# CHECK-NEXT: UsedByAtomic64: false
8891
# CHECK-NEXT: - Type: Invalid
8992
# CHECK-NEXT: Space: 32768
9093
# CHECK-NEXT: LowerBound: 8388608
9194
# CHECK-NEXT: UpperBound: 2147483648
9295
# CHECK-NEXT: Kind: Invalid
93-
# CHECK-NEXT: Flags: 0
96+
# CHECK-NEXT: Flags:
97+
# CHECK-NEXT: UsedByAtomic64: false
9498
# CHECK-NEXT: SigInputElements: []
9599
# CHECK-NEXT: SigOutputElements: []
96100
# CHECK-NEXT: SigPatchOrPrimElements: []

llvm/test/ObjectYAML/DXContainer/PSVv2-geometry.yaml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ Parts:
3434
LowerBound: 3
3535
UpperBound: 4
3636
Kind: TextureCube
37-
Flags: 0
37+
Flags:
38+
UsedByAtomic64: false
3839
- Type: Invalid
3940
Space: 32768
4041
LowerBound: 8388608
4142
UpperBound: 2147483648
4243
Kind: Invalid
43-
Flags: 0
44+
Flags:
45+
UsedByAtomic64: false
4446
SigInputElements: []
4547
SigOutputElements: []
4648
SigPatchOrPrimElements: []
@@ -85,13 +87,15 @@ Parts:
8587
# CHECK-NEXT: LowerBound: 3
8688
# CHECK-NEXT: UpperBound: 4
8789
# CHECK-NEXT: Kind: TextureCube
88-
# CHECK-NEXT: Flags: 0
90+
# CHECK-NEXT: Flags:
91+
# CHECK-NEXT: UsedByAtomic64: false
8992
# CHECK-NEXT: - Type: Invalid
9093
# CHECK-NEXT: Space: 32768
9194
# CHECK-NEXT: LowerBound: 8388608
9295
# CHECK-NEXT: UpperBound: 2147483648
9396
# CHECK-NEXT: Kind: Invalid
94-
# CHECK-NEXT: Flags: 0
97+
# CHECK-NEXT: Flags:
98+
# CHECK-NEXT: UsedByAtomic64: false
9599
# CHECK-NEXT: SigInputElements: []
96100
# CHECK-NEXT: SigOutputElements: []
97101
# CHECK-NEXT: SigPatchOrPrimElements: []

0 commit comments

Comments
 (0)