@@ -1967,6 +1967,7 @@ void DxilMDHelper::SerializeNodeProps(SmallVectorImpl<llvm::Metadata *> &MDVals,
19671967 nodeinput.RecordType .SV_DispatchGrid .ComponentType )));
19681968 MDVals.push_back (
19691969 Uint32ToConstMD (nodeinput.RecordType .SV_DispatchGrid .NumComponents ));
1970+ MDVals.push_back (Uint32ToConstMD (nodeinput.RecordType .alignment ));
19701971 }
19711972 for (auto &nodeoutput : props->OutputNodes ) {
19721973 MDVals.push_back (Uint32ToConstMD (nodeoutput.Flags ));
@@ -1983,6 +1984,7 @@ void DxilMDHelper::SerializeNodeProps(SmallVectorImpl<llvm::Metadata *> &MDVals,
19831984 MDVals.push_back (Int32ToConstMD (nodeoutput.MaxRecordsSharedWith ));
19841985 MDVals.push_back (Uint32ToConstMD (nodeoutput.OutputArraySize ));
19851986 MDVals.push_back (BoolToConstMD (nodeoutput.AllowSparseNodes ));
1987+ MDVals.push_back (Uint32ToConstMD (nodeoutput.RecordType .alignment ));
19861988 }
19871989}
19881990
@@ -2019,6 +2021,10 @@ void DxilMDHelper::DeserializeNodeProps(const MDTuple *pProps, unsigned &idx,
20192021 ConstMDToUint32 (pProps->getOperand (idx++)));
20202022 nodeinput.RecordType .SV_DispatchGrid .NumComponents =
20212023 ConstMDToUint32 (pProps->getOperand (idx++));
2024+ if (pProps->getNumOperands () > idx) {
2025+ nodeinput.RecordType .alignment =
2026+ ConstMDToUint32 (pProps->getOperand (idx++));
2027+ }
20222028 }
20232029
20242030 for (auto &nodeoutput : props->OutputNodes ) {
@@ -2037,6 +2043,10 @@ void DxilMDHelper::DeserializeNodeProps(const MDTuple *pProps, unsigned &idx,
20372043 nodeoutput.MaxRecordsSharedWith = ConstMDToInt32 (pProps->getOperand (idx++));
20382044 nodeoutput.OutputArraySize = ConstMDToUint32 (pProps->getOperand (idx++));
20392045 nodeoutput.AllowSparseNodes = ConstMDToBool (pProps->getOperand (idx++));
2046+ if (pProps->getNumOperands () > idx) {
2047+ nodeoutput.RecordType .alignment =
2048+ ConstMDToUint32 (pProps->getOperand (idx++));
2049+ }
20402050 }
20412051}
20422052
@@ -2755,6 +2765,32 @@ void DxilMDHelper::EmitDxilNodeState(std::vector<llvm::Metadata *> &MDVals,
27552765 }
27562766}
27572767
2768+ llvm::MDTuple *
2769+ DxilMDHelper::EmitDxilNodeRecordType (const NodeRecordType &RecordType) {
2770+ vector<Metadata *> MDVals;
2771+ MDVals.emplace_back (Uint32ToConstMD (DxilMDHelper::kDxilNodeRecordSizeTag ));
2772+ MDVals.emplace_back (Uint32ToConstMD (RecordType.size ));
2773+
2774+ if (RecordType.SV_DispatchGrid .NumComponents ) {
2775+ MDVals.emplace_back (
2776+ Uint32ToConstMD (DxilMDHelper::kDxilNodeSVDispatchGridTag ));
2777+ vector<Metadata *> SVDispatchGridVals;
2778+ SVDispatchGridVals.emplace_back (
2779+ Uint32ToConstMD (RecordType.SV_DispatchGrid .ByteOffset ));
2780+ SVDispatchGridVals.emplace_back (Uint32ToConstMD (
2781+ static_cast <unsigned >(RecordType.SV_DispatchGrid .ComponentType )));
2782+ SVDispatchGridVals.emplace_back (
2783+ Uint32ToConstMD (RecordType.SV_DispatchGrid .NumComponents ));
2784+ MDVals.emplace_back (MDNode::get (m_Ctx, SVDispatchGridVals));
2785+ }
2786+ if (RecordType.alignment ) {
2787+ MDVals.emplace_back (
2788+ Uint32ToConstMD (DxilMDHelper::kDxilNodeRecordAlignmentTag ));
2789+ MDVals.emplace_back (Uint32ToConstMD (RecordType.alignment ));
2790+ }
2791+ return MDNode::get (m_Ctx, MDVals);
2792+ }
2793+
27582794llvm::MDTuple *
27592795DxilMDHelper::EmitDxilNodeIOState (const hlsl::NodeIOProperties &Node) {
27602796 vector<Metadata *> MDVals;
@@ -2763,24 +2799,7 @@ DxilMDHelper::EmitDxilNodeIOState(const hlsl::NodeIOProperties &Node) {
27632799
27642800 if (Node.RecordType .size ) {
27652801 MDVals.emplace_back (Uint32ToConstMD (DxilMDHelper::kDxilNodeRecordTypeTag ));
2766- vector<Metadata *> NodeRecordTypeVals;
2767- NodeRecordTypeVals.emplace_back (
2768- Uint32ToConstMD (DxilMDHelper::kDxilNodeRecordSizeTag ));
2769- NodeRecordTypeVals.emplace_back (Uint32ToConstMD (Node.RecordType .size ));
2770- // If the record has a SV_DispatchGrid field
2771- if (Node.RecordType .SV_DispatchGrid .NumComponents ) {
2772- NodeRecordTypeVals.emplace_back (
2773- Uint32ToConstMD (DxilMDHelper::kDxilNodeSVDispatchGridTag ));
2774- vector<Metadata *> SVDispatchGridVals;
2775- SVDispatchGridVals.emplace_back (
2776- Uint32ToConstMD (Node.RecordType .SV_DispatchGrid .ByteOffset ));
2777- SVDispatchGridVals.emplace_back (Uint32ToConstMD (static_cast <unsigned >(
2778- Node.RecordType .SV_DispatchGrid .ComponentType )));
2779- SVDispatchGridVals.emplace_back (
2780- Uint32ToConstMD (Node.RecordType .SV_DispatchGrid .NumComponents ));
2781- NodeRecordTypeVals.emplace_back (MDNode::get (m_Ctx, SVDispatchGridVals));
2782- }
2783- MDVals.emplace_back (MDNode::get (m_Ctx, NodeRecordTypeVals));
2802+ MDVals.emplace_back (EmitDxilNodeRecordType (Node.RecordType ));
27842803 }
27852804
27862805 if (Node.Flags .IsOutputNode ()) {
@@ -2856,6 +2875,9 @@ DxilMDHelper::LoadDxilNodeRecordType(const llvm::MDOperand &MDO) {
28562875 Record.SV_DispatchGrid .NumComponents =
28572876 ConstMDToUint32 (pSVDTupleMD->getOperand (2 ));
28582877 } break ;
2878+ case DxilMDHelper::kDxilNodeRecordAlignmentTag : {
2879+ Record.alignment = ConstMDToUint32 (MDO);
2880+ } break ;
28592881 default :
28602882 m_bExtraMetadata = true ;
28612883 break ;
0 commit comments