| //===- DXContainerReader.cpp ----------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "DXContainerReader.h" |
| |
| namespace llvm { |
| namespace objcopy { |
| namespace dxbc { |
| |
| using namespace object; |
| |
| Expected<std::unique_ptr<Object>> DXContainerReader::create() const { |
| auto Obj = std::make_unique<Object>(); |
| Obj->Header = DXContainerObj.getHeader(); |
| for (const SectionRef &Part : DXContainerObj.sections()) { |
| DataRefImpl PartDRI = Part.getRawDataRefImpl(); |
| Expected<StringRef> Name = DXContainerObj.getSectionName(PartDRI); |
| if (auto E = Name.takeError()) |
| return E; |
| 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 E; |
| Obj->Parts.push_back({*Name, *Data}); |
| } |
| return std::move(Obj); |
| } |
| |
| } // end namespace dxbc |
| } // end namespace objcopy |
| } // end namespace llvm |