self-review: recompute offsets instead of storing them
This commit is contained in:
parent
648d0fc2fc
commit
c4b10967ee
@ -22,13 +22,22 @@ using namespace object;
|
||||
|
||||
struct Part {
|
||||
StringRef Name;
|
||||
uint32_t Offset;
|
||||
ArrayRef<uint8_t> Data;
|
||||
|
||||
size_t size() const {
|
||||
return sizeof(dxbc::PartHeader) // base header
|
||||
+ Data.size(); // contents size
|
||||
}
|
||||
};
|
||||
|
||||
struct Object {
|
||||
dxbc::Header Header;
|
||||
SmallVector<Part> Parts;
|
||||
|
||||
size_t headerSize() const {
|
||||
return sizeof(dxbc::Header) // base header
|
||||
+ sizeof(uint32_t) * Parts.size(); // part offset values
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace dxc
|
||||
|
||||
@ -22,13 +22,14 @@ Expected<std::unique_ptr<Object>> DXContainerReader::create() const {
|
||||
Expected<StringRef> Name = DXContainerObj.getSectionName(PartDRI);
|
||||
if (auto E = Name.takeError())
|
||||
return createStringError(inconvertibleErrorCode(), "Missing Part Name");
|
||||
uint32_t Offset = DXContainerObj.getSectionAddress(PartDRI);
|
||||
assert(Name->size() == 4 &&
|
||||
"Valid DXIL Part name consists of 4 characters");
|
||||
Expected<ArrayRef<uint8_t>> Data =
|
||||
DXContainerObj.getSectionContents(PartDRI);
|
||||
if (auto E = Data.takeError())
|
||||
return createStringError(inconvertibleErrorCode(),
|
||||
"Missing Part Contents");
|
||||
Obj->Parts.push_back({*Name, Offset, *Data});
|
||||
Obj->Parts.push_back({*Name, *Data});
|
||||
}
|
||||
return std::move(Obj);
|
||||
}
|
||||
|
||||
@ -15,16 +15,13 @@ namespace dxc {
|
||||
using namespace object;
|
||||
|
||||
size_t DXContainerWriter::finalize() {
|
||||
size_t ObjectSize = sizeof(dxbc::Header);
|
||||
ObjectSize += Obj.Parts.size() * sizeof(uint32_t);
|
||||
Offsets.reserve(Obj.Parts.size());
|
||||
size_t Offset = Obj.headerSize();
|
||||
for (const Part &P : Obj.Parts) {
|
||||
Offsets.push_back(ObjectSize);
|
||||
assert(P.Name.size() == 4 &&
|
||||
"Valid DXIL Part name consists of 4 characters");
|
||||
ObjectSize += 4 + sizeof(uint32_t) + P.Data.size();
|
||||
Offsets.push_back(Offset);
|
||||
Offset += P.size();
|
||||
}
|
||||
return ObjectSize;
|
||||
return Obj.Header.FileSize;
|
||||
}
|
||||
|
||||
Error DXContainerWriter::write() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user