1111// / Language (DXIL).
1212// ===----------------------------------------------------------------------===//
1313
14+ #include  " DXILRootSignature.h" 
1415#include  " DXILShaderFlags.h" 
1516#include  " DirectX.h" 
1617#include  " DirectXIRPasses/PointerTypeAnalysis.h" 
@@ -286,12 +287,21 @@ class DXILPrepareModule : public ModulePass {
286287    }
287288    //  Remove flags not for DXIL.
288289    cleanModuleFlags (M);
290+ 
291+     //  dx.rootsignatures will have been parsed from its metadata form as its
292+     //  binary form as part of the RootSignatureAnalysisWrapper, so safely
293+     //  remove it as it is not recognized in DXIL
294+     if  (NamedMDNode *RootSignature = M.getNamedMetadata (" dx.rootsignatures" 
295+       RootSignature->eraseFromParent ();
296+ 
289297    return  true ;
290298  }
291299
292300  DXILPrepareModule () : ModulePass(ID) {}
293301  void  getAnalysisUsage (AnalysisUsage &AU) const  override  {
294302    AU.addRequired <DXILMetadataAnalysisWrapperPass>();
303+     AU.addRequired <RootSignatureAnalysisWrapper>();
304+     AU.addPreserved <RootSignatureAnalysisWrapper>();
295305    AU.addPreserved <ShaderFlagsAnalysisWrapper>();
296306    AU.addPreserved <DXILMetadataAnalysisWrapperPass>();
297307    AU.addPreserved <DXILResourceWrapperPass>();
@@ -305,6 +315,7 @@ char DXILPrepareModule::ID = 0;
305315INITIALIZE_PASS_BEGIN (DXILPrepareModule, DEBUG_TYPE, " DXIL Prepare Module" 
306316                      false , false )
307317INITIALIZE_PASS_DEPENDENCY(DXILMetadataAnalysisWrapperPass)
318+ INITIALIZE_PASS_DEPENDENCY(RootSignatureAnalysisWrapper)
308319INITIALIZE_PASS_END(DXILPrepareModule, DEBUG_TYPE, " DXIL Prepare Module" false ,
309320                    false )
310321
0 commit comments