Skip to content

Commit 1538b82

Browse files
cooppCooper Partin
andauthored
Revert "Add support for PSV EntryFunctionName (#84409)" (#86211)
This reverts commit cde54df. Co-authored-by: Cooper Partin <[email protected]>
1 parent 8d1affb commit 1538b82

18 files changed

+52
-940
lines changed

llvm/include/llvm/BinaryFormat/DXContainer.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -424,19 +424,6 @@ struct ResourceBindInfo : public v0::ResourceBindInfo {
424424
};
425425

426426
} // namespace v2
427-
428-
namespace v3 {
429-
struct RuntimeInfo : public v2::RuntimeInfo {
430-
uint32_t EntryNameOffset;
431-
432-
void swapBytes() { sys::swapByteOrder(EntryNameOffset); }
433-
434-
void swapBytes(Triple::EnvironmentType Stage) {
435-
v2::RuntimeInfo::swapBytes(Stage);
436-
}
437-
};
438-
439-
} // namespace v3
440427
} // namespace PSV
441428

442429
#define COMPONENT_PRECISION(Val, Enum) Enum = Val,

llvm/include/llvm/MC/DXContainerPSVInfo.h

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@
99
#ifndef LLVM_MC_DXCONTAINERPSVINFO_H
1010
#define LLVM_MC_DXCONTAINERPSVINFO_H
1111

12-
#include "llvm/ADT/ArrayRef.h"
1312
#include "llvm/ADT/SmallVector.h"
1413
#include "llvm/ADT/StringRef.h"
1514
#include "llvm/BinaryFormat/DXContainer.h"
16-
#include "llvm/MC/StringTableBuilder.h"
1715
#include "llvm/TargetParser/Triple.h"
1816

1917
#include <array>
@@ -47,9 +45,8 @@ struct PSVSignatureElement {
4745
// modifiable format, and can be used to serialize the data back into valid PSV
4846
// RuntimeInfo.
4947
struct PSVRuntimeInfo {
50-
PSVRuntimeInfo() : DXConStrTabBuilder(StringTableBuilder::DXContainer) {}
5148
bool IsFinalized = false;
52-
dxbc::PSV::v3::RuntimeInfo BaseData;
49+
dxbc::PSV::v2::RuntimeInfo BaseData;
5350
SmallVector<dxbc::PSV::v2::ResourceBindInfo> Resources;
5451
SmallVector<PSVSignatureElement> InputElements;
5552
SmallVector<PSVSignatureElement> OutputElements;
@@ -67,20 +64,26 @@ struct PSVRuntimeInfo {
6764
std::array<SmallVector<uint32_t>, 4> InputOutputMap;
6865
SmallVector<uint32_t> InputPatchMap;
6966
SmallVector<uint32_t> PatchOutputMap;
70-
llvm::StringRef EntryName;
7167

7268
// Serialize PSVInfo into the provided raw_ostream. The version field
7369
// specifies the data version to encode, the default value specifies encoding
7470
// the highest supported version.
7571
void write(raw_ostream &OS,
7672
uint32_t Version = std::numeric_limits<uint32_t>::max()) const;
7773

78-
void finalize(Triple::EnvironmentType Stage);
79-
80-
private:
81-
SmallVector<uint32_t, 64> IndexBuffer;
82-
SmallVector<llvm::dxbc::PSV::v0::SignatureElement, 32> SignatureElements;
83-
StringTableBuilder DXConStrTabBuilder;
74+
void finalize(Triple::EnvironmentType Stage) {
75+
IsFinalized = true;
76+
BaseData.SigInputElements = static_cast<uint32_t>(InputElements.size());
77+
BaseData.SigOutputElements = static_cast<uint32_t>(OutputElements.size());
78+
BaseData.SigPatchOrPrimElements =
79+
static_cast<uint32_t>(PatchOrPrimElements.size());
80+
if (!sys::IsBigEndianHost)
81+
return;
82+
BaseData.swapBytes();
83+
BaseData.swapBytes(Stage);
84+
for (auto &Res : Resources)
85+
Res.swapBytes();
86+
}
8487
};
8588

8689
class Signature {

llvm/include/llvm/MC/StringTableBuilder.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,12 @@ class StringTableBuilder {
7474
/// Check if a string is contained in the string table. Since this class
7575
/// doesn't store the string values, this function can be used to check if
7676
/// storage needs to be done prior to adding the string.
77-
bool contains(StringRef S) const { return contains(CachedHashStringRef(S)); }
78-
bool contains(CachedHashStringRef S) const { return StringIndexMap.count(S); }
77+
bool contains(StringRef S) const {
78+
return contains(CachedHashStringRef(S));
79+
}
80+
bool contains(CachedHashStringRef S) const {
81+
return StringIndexMap.count(S);
82+
}
7983

8084
size_t getSize() const { return Size; }
8185
void clear();

llvm/include/llvm/Object/DXContainer.h

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,7 @@ class PSVRuntimeInfo {
125125
uint32_t Size;
126126
using InfoStruct =
127127
std::variant<std::monostate, dxbc::PSV::v0::RuntimeInfo,
128-
dxbc::PSV::v1::RuntimeInfo, dxbc::PSV::v2::RuntimeInfo,
129-
dxbc::PSV::v3::RuntimeInfo>;
128+
dxbc::PSV::v1::RuntimeInfo, dxbc::PSV::v2::RuntimeInfo>;
130129
InfoStruct BasicInfo;
131130
ResourceArray Resources;
132131
StringRef StringTable;
@@ -152,23 +151,16 @@ class PSVRuntimeInfo {
152151
ResourceArray getResources() const { return Resources; }
153152

154153
uint32_t getVersion() const {
155-
return Size >= sizeof(dxbc::PSV::v3::RuntimeInfo)
156-
? 3
157-
: (Size >= sizeof(dxbc::PSV::v2::RuntimeInfo) ? 2
158-
: (Size >= sizeof(dxbc::PSV::v1::RuntimeInfo)) ? 1
159-
: 0);
154+
return Size >= sizeof(dxbc::PSV::v2::RuntimeInfo)
155+
? 2
156+
: (Size >= sizeof(dxbc::PSV::v1::RuntimeInfo) ? 1 : 0);
160157
}
161158

162159
uint32_t getResourceStride() const { return Resources.Stride; }
163160

164161
const InfoStruct &getInfo() const { return BasicInfo; }
165162

166163
template <typename T> const T *getInfoAs() const {
167-
if (const auto *P = std::get_if<dxbc::PSV::v3::RuntimeInfo>(&BasicInfo))
168-
return static_cast<const T *>(P);
169-
if (std::is_same<T, dxbc::PSV::v3::RuntimeInfo>::value)
170-
return nullptr;
171-
172164
if (const auto *P = std::get_if<dxbc::PSV::v2::RuntimeInfo>(&BasicInfo))
173165
return static_cast<const T *>(P);
174166
if (std::is_same<T, dxbc::PSV::v2::RuntimeInfo>::value)

llvm/include/llvm/ObjectYAML/DXContainerYAML.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ struct PSVInfo {
107107
// the format.
108108
uint32_t Version;
109109

110-
dxbc::PSV::v3::RuntimeInfo Info;
110+
dxbc::PSV::v2::RuntimeInfo Info;
111111
uint32_t ResourceStride;
112112
SmallVector<ResourceBindInfo> Resources;
113113
SmallVector<SignatureElement> SigInputElements;
@@ -121,15 +121,12 @@ struct PSVInfo {
121121
MaskVector InputPatchMap;
122122
MaskVector PatchOutputMap;
123123

124-
StringRef EntryName;
125-
126124
void mapInfoForVersion(yaml::IO &IO);
127125

128126
PSVInfo();
129127
PSVInfo(const dxbc::PSV::v0::RuntimeInfo *P, uint16_t Stage);
130128
PSVInfo(const dxbc::PSV::v1::RuntimeInfo *P);
131129
PSVInfo(const dxbc::PSV::v2::RuntimeInfo *P);
132-
PSVInfo(const dxbc::PSV::v3::RuntimeInfo *P, StringRef StringTable);
133130
};
134131

135132
struct SignatureParameter {

llvm/lib/MC/DXContainerPSVInfo.cpp

Lines changed: 25 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,13 @@ void PSVRuntimeInfo::write(raw_ostream &OS, uint32_t Version) const {
8181
BindingSize = sizeof(dxbc::PSV::v0::ResourceBindInfo);
8282
break;
8383
case 2:
84-
InfoSize = sizeof(dxbc::PSV::v2::RuntimeInfo);
85-
BindingSize = sizeof(dxbc::PSV::v2::ResourceBindInfo);
86-
break;
87-
case 3:
8884
default:
89-
InfoSize = sizeof(dxbc::PSV::v3::RuntimeInfo);
85+
InfoSize = sizeof(dxbc::PSV::v2::RuntimeInfo);
9086
BindingSize = sizeof(dxbc::PSV::v2::ResourceBindInfo);
9187
}
92-
9388
// Write the size of the info.
94-
support::endian::write(OS, InfoSize, llvm::endianness::little);
9589

90+
support::endian::write(OS, InfoSize, llvm::endianness::little);
9691
// Write the info itself.
9792
OS.write(reinterpret_cast<const char *>(&BaseData), InfoSize);
9893

@@ -109,12 +104,32 @@ void PSVRuntimeInfo::write(raw_ostream &OS, uint32_t Version) const {
109104
if (Version == 0)
110105
return;
111106

112-
support::endian::write(OS,
113-
static_cast<uint32_t>(DXConStrTabBuilder.getSize()),
107+
StringTableBuilder StrTabBuilder((StringTableBuilder::DXContainer));
108+
SmallVector<uint32_t, 64> IndexBuffer;
109+
SmallVector<v0::SignatureElement, 32> SignatureElements;
110+
SmallVector<StringRef, 32> SemanticNames;
111+
112+
ProcessElementList(StrTabBuilder, IndexBuffer, SignatureElements,
113+
SemanticNames, InputElements);
114+
ProcessElementList(StrTabBuilder, IndexBuffer, SignatureElements,
115+
SemanticNames, OutputElements);
116+
ProcessElementList(StrTabBuilder, IndexBuffer, SignatureElements,
117+
SemanticNames, PatchOrPrimElements);
118+
119+
StrTabBuilder.finalize();
120+
for (auto ElAndName : zip(SignatureElements, SemanticNames)) {
121+
v0::SignatureElement &El = std::get<0>(ElAndName);
122+
StringRef Name = std::get<1>(ElAndName);
123+
El.NameOffset = static_cast<uint32_t>(StrTabBuilder.getOffset(Name));
124+
if (sys::IsBigEndianHost)
125+
El.swapBytes();
126+
}
127+
128+
support::endian::write(OS, static_cast<uint32_t>(StrTabBuilder.getSize()),
114129
llvm::endianness::little);
115130

116131
// Write the string table.
117-
DXConStrTabBuilder.write(OS);
132+
StrTabBuilder.write(OS);
118133

119134
// Write the index table size, then table.
120135
support::endian::write(OS, static_cast<uint32_t>(IndexBuffer.size()),
@@ -147,46 +162,6 @@ void PSVRuntimeInfo::write(raw_ostream &OS, uint32_t Version) const {
147162
llvm::endianness::little);
148163
}
149164

150-
void PSVRuntimeInfo::finalize(Triple::EnvironmentType Stage) {
151-
IsFinalized = true;
152-
BaseData.SigInputElements = static_cast<uint32_t>(InputElements.size());
153-
BaseData.SigOutputElements = static_cast<uint32_t>(OutputElements.size());
154-
BaseData.SigPatchOrPrimElements =
155-
static_cast<uint32_t>(PatchOrPrimElements.size());
156-
157-
SmallVector<StringRef, 32> SemanticNames;
158-
159-
// Build a string table and set associated offsets to be written when
160-
// write() is called
161-
ProcessElementList(DXConStrTabBuilder, IndexBuffer, SignatureElements,
162-
SemanticNames, InputElements);
163-
ProcessElementList(DXConStrTabBuilder, IndexBuffer, SignatureElements,
164-
SemanticNames, OutputElements);
165-
ProcessElementList(DXConStrTabBuilder, IndexBuffer, SignatureElements,
166-
SemanticNames, PatchOrPrimElements);
167-
168-
DXConStrTabBuilder.add(EntryName);
169-
170-
DXConStrTabBuilder.finalize();
171-
for (auto ElAndName : zip(SignatureElements, SemanticNames)) {
172-
llvm::dxbc::PSV::v0::SignatureElement &El = std::get<0>(ElAndName);
173-
StringRef Name = std::get<1>(ElAndName);
174-
El.NameOffset = static_cast<uint32_t>(DXConStrTabBuilder.getOffset(Name));
175-
if (sys::IsBigEndianHost)
176-
El.swapBytes();
177-
}
178-
179-
BaseData.EntryNameOffset =
180-
static_cast<uint32_t>(DXConStrTabBuilder.getOffset(EntryName));
181-
182-
if (!sys::IsBigEndianHost)
183-
return;
184-
BaseData.swapBytes();
185-
BaseData.swapBytes(Stage);
186-
for (auto &Res : Resources)
187-
Res.swapBytes();
188-
}
189-
190165
void Signature::write(raw_ostream &OS) {
191166
SmallVector<dxbc::ProgramSignatureElement> SigParams;
192167
SigParams.reserve(Params.size());

llvm/lib/Object/DXContainer.cpp

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -247,14 +247,7 @@ Error DirectX::PSVRuntimeInfo::parse(uint16_t ShaderKind) {
247247
const uint32_t PSVVersion = getVersion();
248248

249249
// Detect the PSVVersion by looking at the size field.
250-
if (PSVVersion == 3) {
251-
v3::RuntimeInfo Info;
252-
if (Error Err = readStruct(PSVInfoData, Current, Info))
253-
return Err;
254-
if (sys::IsBigEndianHost)
255-
Info.swapBytes(ShaderStage);
256-
BasicInfo = Info;
257-
} else if (PSVVersion == 2) {
250+
if (PSVVersion == 2) {
258251
v2::RuntimeInfo Info;
259252
if (Error Err = readStruct(PSVInfoData, Current, Info))
260253
return Err;
@@ -432,8 +425,6 @@ Error DirectX::PSVRuntimeInfo::parse(uint16_t ShaderKind) {
432425
}
433426

434427
uint8_t DirectX::PSVRuntimeInfo::getSigInputCount() const {
435-
if (const auto *P = std::get_if<dxbc::PSV::v3::RuntimeInfo>(&BasicInfo))
436-
return P->SigInputElements;
437428
if (const auto *P = std::get_if<dxbc::PSV::v2::RuntimeInfo>(&BasicInfo))
438429
return P->SigInputElements;
439430
if (const auto *P = std::get_if<dxbc::PSV::v1::RuntimeInfo>(&BasicInfo))
@@ -442,8 +433,6 @@ uint8_t DirectX::PSVRuntimeInfo::getSigInputCount() const {
442433
}
443434

444435
uint8_t DirectX::PSVRuntimeInfo::getSigOutputCount() const {
445-
if (const auto *P = std::get_if<dxbc::PSV::v3::RuntimeInfo>(&BasicInfo))
446-
return P->SigOutputElements;
447436
if (const auto *P = std::get_if<dxbc::PSV::v2::RuntimeInfo>(&BasicInfo))
448437
return P->SigOutputElements;
449438
if (const auto *P = std::get_if<dxbc::PSV::v1::RuntimeInfo>(&BasicInfo))
@@ -452,8 +441,6 @@ uint8_t DirectX::PSVRuntimeInfo::getSigOutputCount() const {
452441
}
453442

454443
uint8_t DirectX::PSVRuntimeInfo::getSigPatchOrPrimCount() const {
455-
if (const auto *P = std::get_if<dxbc::PSV::v3::RuntimeInfo>(&BasicInfo))
456-
return P->SigPatchOrPrimElements;
457444
if (const auto *P = std::get_if<dxbc::PSV::v2::RuntimeInfo>(&BasicInfo))
458445
return P->SigPatchOrPrimElements;
459446
if (const auto *P = std::get_if<dxbc::PSV::v1::RuntimeInfo>(&BasicInfo))

llvm/lib/ObjectYAML/DXContainerEmitter.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,8 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
198198
if (!P.Info.has_value())
199199
continue;
200200
mcdxbc::PSVRuntimeInfo PSV;
201-
memcpy(&PSV.BaseData, &P.Info->Info, sizeof(dxbc::PSV::v3::RuntimeInfo));
201+
memcpy(&PSV.BaseData, &P.Info->Info, sizeof(dxbc::PSV::v2::RuntimeInfo));
202202
PSV.Resources = P.Info->Resources;
203-
PSV.EntryName = P.Info->EntryName;
204203

205204
for (auto El : P.Info->SigInputElements)
206205
PSV.InputElements.push_back(mcdxbc::PSVSignatureElement{

llvm/lib/ObjectYAML/DXContainerYAML.cpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,6 @@ DXContainerYAML::PSVInfo::PSVInfo(const dxbc::PSV::v2::RuntimeInfo *P)
7474
memcpy(&Info, P, sizeof(dxbc::PSV::v2::RuntimeInfo));
7575
}
7676

77-
DXContainerYAML::PSVInfo::PSVInfo(const dxbc::PSV::v3::RuntimeInfo *P,
78-
StringRef StringTable)
79-
: Version(3),
80-
EntryName(StringTable.substr(P->EntryNameOffset,
81-
StringTable.find('\0', P->EntryNameOffset) -
82-
P->EntryNameOffset)) {
83-
memset(&Info, 0, sizeof(Info));
84-
memcpy(&Info, P, sizeof(dxbc::PSV::v3::RuntimeInfo));
85-
}
86-
8777
namespace yaml {
8878

8979
void MappingTraits<DXContainerYAML::VersionTuple>::mapping(
@@ -358,11 +348,6 @@ void DXContainerYAML::PSVInfo::mapInfoForVersion(yaml::IO &IO) {
358348
IO.mapRequired("NumThreadsX", Info.NumThreadsX);
359349
IO.mapRequired("NumThreadsY", Info.NumThreadsY);
360350
IO.mapRequired("NumThreadsZ", Info.NumThreadsZ);
361-
362-
if (Version == 2)
363-
return;
364-
365-
IO.mapRequired("EntryName", EntryName);
366351
}
367352

368353
} // namespace llvm

0 commit comments

Comments
 (0)