| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- ///////////////////////////////////////////////////////////////////////////////
- // //
- // DxilContainerReader.cpp //
- // Copyright (C) Microsoft Corporation. All rights reserved. //
- // This file is distributed under the University of Illinois Open Source //
- // License. See LICENSE.TXT for details. //
- // //
- // Provides support for manipulating DXIL container structures. //
- // //
- ///////////////////////////////////////////////////////////////////////////////
- #include "dxc/Support/Global.h"
- #include "dxc/Support/Unicode.h"
- #include "dxc/Support/WinIncludes.h"
- #include "dxc/DXIL/DxilSubobject.h"
- #include "dxc/DxilContainer/DxilContainerReader.h"
- #include "dxc/DxilContainer/DxilRuntimeReflection.h"
- namespace hlsl {
- bool LoadSubobjectsFromRDAT(DxilSubobjects &subobjects, RDAT::SubobjectTableReader *pSubobjectTableReader) {
- if (!pSubobjectTableReader)
- return false;
- bool result = true;
- for (unsigned i = 0; i < pSubobjectTableReader->GetCount(); ++i) {
- try {
- auto reader = pSubobjectTableReader->GetItem(i);
- DXIL::SubobjectKind kind = reader.GetKind();
- bool bLocalRS = false;
- switch (kind) {
- case DXIL::SubobjectKind::StateObjectConfig:
- subobjects.CreateStateObjectConfig(reader.GetName(),
- reader.GetStateObjectConfig_Flags());
- break;
- case DXIL::SubobjectKind::LocalRootSignature:
- bLocalRS = true;
- case DXIL::SubobjectKind::GlobalRootSignature: {
- const void *pOutBytes;
- uint32_t OutSizeInBytes;
- if (!reader.GetRootSignature(&pOutBytes, &OutSizeInBytes)) {
- result = false;
- continue;
- }
- subobjects.CreateRootSignature(reader.GetName(), bLocalRS, pOutBytes, OutSizeInBytes);
- break;
- }
- case DXIL::SubobjectKind::SubobjectToExportsAssociation: {
- uint32_t NumExports = reader.GetSubobjectToExportsAssociation_NumExports();
- std::vector<llvm::StringRef> Exports;
- Exports.resize(NumExports);
- for (unsigned i = 0; i < NumExports; ++i) {
- Exports[i] = reader.GetSubobjectToExportsAssociation_Export(i);
- }
- subobjects.CreateSubobjectToExportsAssociation(reader.GetName(),
- reader.GetSubobjectToExportsAssociation_Subobject(),
- Exports.data(), NumExports);
- break;
- }
- case DXIL::SubobjectKind::RaytracingShaderConfig:
- subobjects.CreateRaytracingShaderConfig(reader.GetName(),
- reader.GetRaytracingShaderConfig_MaxPayloadSizeInBytes(),
- reader.GetRaytracingShaderConfig_MaxAttributeSizeInBytes());
- break;
- case DXIL::SubobjectKind::RaytracingPipelineConfig:
- subobjects.CreateRaytracingPipelineConfig(reader.GetName(),
- reader.GetRaytracingPipelineConfig_MaxTraceRecursionDepth());
- break;
- case DXIL::SubobjectKind::HitGroup:
- subobjects.CreateHitGroup(reader.GetName(),
- reader.GetHitGroup_Type(),
- reader.GetHitGroup_AnyHit(),
- reader.GetHitGroup_ClosestHit(),
- reader.GetHitGroup_Intersection());
- break;
- }
- } catch (hlsl::Exception &) {
- result = false;
- }
- }
- return result;
- }
- } // namespace hlsl
- // DxilRuntimeReflection implementation
- #include "dxc/DxilContainer/DxilRuntimeReflection.inl"
|