浏览代码

Merge branch 'master' into PIX_Debug_Phis

Jeff Noyle 5 年之前
父节点
当前提交
dafa0cf7b9
共有 51 个文件被更改,包括 323 次插入213 次删除
  1. 35 35
      docs/DXIL.rst
  2. 8 0
      include/dxc/DXIL/DxilMetadataHelper.h
  3. 6 0
      include/dxc/DXIL/DxilModule.h
  4. 32 32
      include/dxc/DXIL/DxilSigPoint.inl
  5. 65 19
      lib/DXIL/DxilMetadataHelper.cpp
  6. 19 1
      lib/DXIL/DxilModule.cpp
  7. 8 12
      lib/DxilContainer/DxilContainerAssembler.cpp
  8. 4 0
      lib/HLSL/DxilValidation.cpp
  9. 1 12
      tools/clang/lib/CodeGen/CGHLSLMS.cpp
  10. 1 1
      tools/clang/test/CodeGenHLSL/rootSigProfile.hlsl
  11. 1 1
      tools/clang/test/CodeGenHLSL/rootSigProfile2.hlsl
  12. 1 1
      tools/clang/test/CodeGenHLSL/rootSigProfile3.hlsl
  13. 1 1
      tools/clang/test/CodeGenHLSL/rootSigProfile4.hlsl
  14. 1 1
      tools/clang/test/CodeGenHLSL/rootSigProfile5.hlsl
  15. 1 1
      tools/clang/test/HLSLFileCheck/d3dreflect/anon_struct.hlsl
  16. 1 1
      tools/clang/test/HLSLFileCheck/d3dreflect/cb_sizes.hlsl
  17. 1 1
      tools/clang/test/HLSLFileCheck/d3dreflect/cbuf-usage-lib.hlsl
  18. 1 1
      tools/clang/test/HLSLFileCheck/d3dreflect/empty_struct2.hlsl
  19. 1 1
      tools/clang/test/HLSLFileCheck/d3dreflect/lib_global.hlsl
  20. 1 1
      tools/clang/test/HLSLFileCheck/d3dreflect/reflect-lib-1.hlsl
  21. 1 1
      tools/clang/test/HLSLFileCheck/d3dreflect/structured_buffer_layout.hlsl
  22. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/compile_options/Qstrip_reflect/Qstrip_reflect.hlsl
  23. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/compile_options/Qstrip_reflect/Qstrip_reflect_struct_buf.hlsl
  24. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/objects/Buffer/multiUAVLoad2.hlsl
  25. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/objects/Buffer/multiUAVLoad4.hlsl
  26. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/objects/Buffer/multiUAVLoad5.hlsl
  27. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/objects/Buffer/multiUAVLoad7.hlsl
  28. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/objects/Cbuffer/uint64_2.hlsl
  29. 3 3
      tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sample3.hlsl
  30. 3 3
      tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleBias.hlsl
  31. 3 3
      tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleCmp.hlsl
  32. 3 3
      tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleCmpLZ.hlsl
  33. 3 3
      tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleCmpLZ2.hlsl
  34. 3 3
      tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleGrad.hlsl
  35. 3 3
      tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleL.hlsl
  36. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/semantics/sv_depth/output1.hlsl
  37. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/semantics/sv_isfrontface/input1.hlsl
  38. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/semantics/sv_isfrontface/input2.hlsl
  39. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/semantics/sv_isfrontface/isfrontface.hlsl
  40. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/semantics/sv_isfrontface/isfrontface2.hlsl
  41. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/signature/sig-bool-as-uint.hlsl
  42. 1 1
      tools/clang/test/HLSLFileCheck/hlsl/types/modifiers/static/static_const_global.hlsl
  43. 9 3
      tools/clang/tools/dxcompiler/dxcompilerobj.cpp
  44. 4 1
      tools/clang/unittests/HLSL/CompilerTest.cpp
  45. 26 24
      tools/clang/unittests/HLSL/DxilContainerTest.cpp
  46. 3 5
      tools/clang/unittests/HLSL/DxilModuleTest.cpp
  47. 0 2
      tools/clang/unittests/HLSL/FileCheckerTest.cpp
  48. 2 2
      tools/clang/unittests/HLSL/OptimizerTest.cpp
  49. 38 2
      tools/clang/unittests/HLSL/SystemValueTest.cpp
  50. 2 2
      tools/clang/unittests/HLSL/ValidationTest.cpp
  51. 14 14
      utils/hct/hctdb.py

+ 35 - 35
docs/DXIL.rst

@@ -669,41 +669,41 @@ Semantic Interpretations for each SemanticKind at each SigPointKind are as follo
 .. <py::lines('SEMINT-TABLE-RST')>hctdb_instrhelp.get_sem_interpretation_table_rst()</py>
 .. SEMINT-TABLE-RST:BEGIN
 
-====================== ============ ======== ============ ============ ======== ======== ========== ============ ======== ======== ======== ============ ======== ============= ============= ======== ============ ============ ============= ============
-Semantic               VSIn         VSOut    PCIn         HSIn         HSCPIn   HSCPOut  PCOut      DSIn         DSCPIn   DSOut    GSVIn    GSIn         GSOut    PSIn          PSOut         CSIn     MSIn         MSOut        MSPOut        ASIn
-====================== ============ ======== ============ ============ ======== ======== ========== ============ ======== ======== ======== ============ ======== ============= ============= ======== ============ ============ ============= ============
-Arbitrary              Arb          Arb      NA           NA           Arb      Arb      Arb        Arb          Arb      Arb      Arb      NA           Arb      Arb           NA            NA       NA           Arb _65      Arb _65       NA
-VertexID               SV           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NA       NA           NA           NA            NA
-InstanceID             SV           Arb      NA           NA           Arb      Arb      NA         NA           Arb      Arb      Arb      NA           Arb      Arb           NA            NA       NA           NA           NA            NA
-Position               Arb          SV       NA           NA           SV       SV       Arb        Arb          SV       SV       SV       NA           SV       SV            NA            NA       NA           SV _65       NA            NA
-RenderTargetArrayIndex Arb          SV       NA           NA           SV       SV       Arb        Arb          SV       SV       SV       NA           SV       SV            NA            NA       NA           NA           SV _65        NA
-ViewPortArrayIndex     Arb          SV       NA           NA           SV       SV       Arb        Arb          SV       SV       SV       NA           SV       SV            NA            NA       NA           NA           SV _65        NA
-ClipDistance           Arb          ClipCull NA           NA           ClipCull ClipCull Arb        Arb          ClipCull ClipCull ClipCull NA           ClipCull ClipCull      NA            NA       NA           ClipCull _65 NA            NA
-CullDistance           Arb          ClipCull NA           NA           ClipCull ClipCull Arb        Arb          ClipCull ClipCull ClipCull NA           ClipCull ClipCull      NA            NA       NA           ClipCull _65 NA            NA
-OutputControlPointID   NA           NA       NA           NotInSig     NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NA       NA           NA           NA            NA
-DomainLocation         NA           NA       NA           NA           NA       NA       NA         NotInSig     NA       NA       NA       NA           NA       NA            NA            NA       NA           NA           NA            NA
-PrimitiveID            NA           NA       NotInSig     NotInSig     NA       NA       NA         NotInSig     NA       NA       NA       Shadow       SGV      SGV           NA            NA       NA           NA           SV _65        NA
-GSInstanceID           NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NotInSig     NA       NA            NA            NA       NA           NA           NA            NA
-SampleIndex            NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       Shadow _41    NA            NA       NA           NA           NA            NA
-IsFrontFace            NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           SGV      SGV           NA            NA       NA           NA           NA            NA
-Coverage               NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NotInSig _50  NotPacked _41 NA       NA           NA           NA            NA
-InnerCoverage          NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NotInSig _50  NA            NA       NA           NA           NA            NA
-Target                 NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            Target        NA       NA           NA           NA            NA
-Depth                  NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NotPacked     NA       NA           NA           NA            NA
-DepthLessEqual         NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NotPacked _50 NA       NA           NA           NA            NA
-DepthGreaterEqual      NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NotPacked _50 NA       NA           NA           NA            NA
-StencilRef             NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NotPacked _50 NA       NA           NA           NA            NA
-DispatchThreadID       NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NotInSig NotInSig _65 NA           NA            NotInSig _65
-GroupID                NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NotInSig NotInSig _65 NA           NA            NotInSig _65
-GroupIndex             NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NotInSig NotInSig _65 NA           NA            NotInSig _65
-GroupThreadID          NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NotInSig NotInSig _65 NA           NA            NotInSig _65
-TessFactor             NA           NA       NA           NA           NA       NA       TessFactor TessFactor   NA       NA       NA       NA           NA       NA            NA            NA       NA           NA           NA            NA
-InsideTessFactor       NA           NA       NA           NA           NA       NA       TessFactor TessFactor   NA       NA       NA       NA           NA       NA            NA            NA       NA           NA           NA            NA
-ViewID                 NotInSig _61 NA       NotInSig _61 NotInSig _61 NA       NA       NA         NotInSig _61 NA       NA       NA       NotInSig _61 NA       NotInSig _61  NA            NA       NotInSig _65 NA           NA            NA
-Barycentrics           NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NotPacked _61 NA            NA       NA           NA           NA            NA
-ShadingRate            NA           SV _64   NA           NA           SV _64   SV _64   NA         NA           SV _64   SV _64   SV _64   NA           SV _64   SV _64        NA            NA       NA           NA           NA            NA
-CullPrimitive          NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NA       NA           NA           NotPacked _65 NA
-====================== ============ ======== ============ ============ ======== ======== ========== ============ ======== ======== ======== ============ ======== ============= ============= ======== ============ ============ ============= ============
+====================== ============ ======== ============ ============ ======== ======== ========== ============ ======== ======== ======== ============ ======== ============= ============= ======== ======== ======== ========= ========
+Semantic               VSIn         VSOut    PCIn         HSIn         HSCPIn   HSCPOut  PCOut      DSIn         DSCPIn   DSOut    GSVIn    GSIn         GSOut    PSIn          PSOut         CSIn     MSIn     MSOut    MSPOut    ASIn
+====================== ============ ======== ============ ============ ======== ======== ========== ============ ======== ======== ======== ============ ======== ============= ============= ======== ======== ======== ========= ========
+Arbitrary              Arb          Arb      NA           NA           Arb      Arb      Arb        Arb          Arb      Arb      Arb      NA           Arb      Arb           NA            NA       NA       Arb      Arb       NA
+VertexID               SV           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NA       NA       NA       NA        NA
+InstanceID             SV           Arb      NA           NA           Arb      Arb      NA         NA           Arb      Arb      Arb      NA           Arb      Arb           NA            NA       NA       NA       NA        NA
+Position               Arb          SV       NA           NA           SV       SV       Arb        Arb          SV       SV       SV       NA           SV       SV            NA            NA       NA       SV       NA        NA
+RenderTargetArrayIndex Arb          SV       NA           NA           SV       SV       Arb        Arb          SV       SV       SV       NA           SV       SV            NA            NA       NA       NA       SV        NA
+ViewPortArrayIndex     Arb          SV       NA           NA           SV       SV       Arb        Arb          SV       SV       SV       NA           SV       SV            NA            NA       NA       NA       SV        NA
+ClipDistance           Arb          ClipCull NA           NA           ClipCull ClipCull Arb        Arb          ClipCull ClipCull ClipCull NA           ClipCull ClipCull      NA            NA       NA       ClipCull NA        NA
+CullDistance           Arb          ClipCull NA           NA           ClipCull ClipCull Arb        Arb          ClipCull ClipCull ClipCull NA           ClipCull ClipCull      NA            NA       NA       ClipCull NA        NA
+OutputControlPointID   NA           NA       NA           NotInSig     NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NA       NA       NA       NA        NA
+DomainLocation         NA           NA       NA           NA           NA       NA       NA         NotInSig     NA       NA       NA       NA           NA       NA            NA            NA       NA       NA       NA        NA
+PrimitiveID            NA           NA       NotInSig     NotInSig     NA       NA       NA         NotInSig     NA       NA       NA       Shadow       SGV      SGV           NA            NA       NA       NA       SV        NA
+GSInstanceID           NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NotInSig     NA       NA            NA            NA       NA       NA       NA        NA
+SampleIndex            NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       Shadow _41    NA            NA       NA       NA       NA        NA
+IsFrontFace            NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           SGV      SGV           NA            NA       NA       NA       NA        NA
+Coverage               NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NotInSig _50  NotPacked _41 NA       NA       NA       NA        NA
+InnerCoverage          NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NotInSig _50  NA            NA       NA       NA       NA        NA
+Target                 NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            Target        NA       NA       NA       NA        NA
+Depth                  NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NotPacked     NA       NA       NA       NA        NA
+DepthLessEqual         NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NotPacked _50 NA       NA       NA       NA        NA
+DepthGreaterEqual      NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NotPacked _50 NA       NA       NA       NA        NA
+StencilRef             NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NotPacked _50 NA       NA       NA       NA        NA
+DispatchThreadID       NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NotInSig NotInSig NA       NA        NotInSig
+GroupID                NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NotInSig NotInSig NA       NA        NotInSig
+GroupIndex             NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NotInSig NotInSig NA       NA        NotInSig
+GroupThreadID          NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NotInSig NotInSig NA       NA        NotInSig
+TessFactor             NA           NA       NA           NA           NA       NA       TessFactor TessFactor   NA       NA       NA       NA           NA       NA            NA            NA       NA       NA       NA        NA
+InsideTessFactor       NA           NA       NA           NA           NA       NA       TessFactor TessFactor   NA       NA       NA       NA           NA       NA            NA            NA       NA       NA       NA        NA
+ViewID                 NotInSig _61 NA       NotInSig _61 NotInSig _61 NA       NA       NA         NotInSig _61 NA       NA       NA       NotInSig _61 NA       NotInSig _61  NA            NA       NotInSig NA       NA        NA
+Barycentrics           NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NotPacked _61 NA            NA       NA       NA       NA        NA
+ShadingRate            NA           SV _64   NA           NA           SV _64   SV _64   NA         NA           SV _64   SV _64   SV _64   NA           SV _64   SV _64        NA            NA       NA       NA       SV        NA
+CullPrimitive          NA           NA       NA           NA           NA       NA       NA         NA           NA       NA       NA       NA           NA       NA            NA            NA       NA       NA       NotPacked NA
+====================== ============ ======== ============ ============ ======== ======== ========== ============ ======== ======== ======== ============ ======== ============= ============= ======== ======== ======== ========= ========
 
 .. SEMINT-TABLE-RST:END
 

+ 8 - 0
include/dxc/DXIL/DxilMetadataHelper.h

@@ -311,6 +311,7 @@ public:
   public:
     unsigned m_ValMajor, m_ValMinor;        // Reported validation version in DXIL
     unsigned m_MinValMajor, m_MinValMinor;  // Minimum validation version dictated by shader model
+    bool m_bExtraMetadata;
   };
 
 public:
@@ -423,6 +424,9 @@ public:
   llvm::Metadata *EmitSubobject(const DxilSubobject &obj);
   void LoadSubobject(const llvm::MDNode &MDO, DxilSubobjects &Subobjects);
 
+  // Extra metadata present
+  bool HasExtraMetadata() { return m_bExtraMetadata; }
+
   // Shader specific.
 private:
   llvm::MDTuple *EmitDxilGSState(DXIL::InputPrimitive Primitive, unsigned MaxVertexCount, 
@@ -508,6 +512,10 @@ private:
   std::unique_ptr<ExtraPropertyHelper> m_ExtraPropertyHelper;
   unsigned m_ValMajor, m_ValMinor;        // Reported validation version in DXIL
   unsigned m_MinValMajor, m_MinValMinor;  // Minimum validation version dictated by shader model
+
+  // Non-fatal if extra metadata is found, but will fail validation.
+  // This is how metadata can be exteneded.
+  bool m_bExtraMetadata;
 };
 
 

+ 6 - 0
include/dxc/DXIL/DxilModule.h

@@ -178,6 +178,8 @@ public:
   void ReEmitDxilResources();
   /// Deserialize DXIL metadata form into in-memory form.
   void LoadDxilMetadata();
+  /// Return true if non-fatal metadata error was detected.
+  bool HasMetadataErrors();
 
   /// Check if a Named meta data node is known by dxil module.
   static bool IsKnownNamedMetaData(llvm::NamedMDNode &Node);
@@ -364,6 +366,10 @@ private:
   uint32_t m_AutoBindingSpace;
 
   std::unique_ptr<DxilSubobjects> m_pSubobjects;
+
+  // m_bMetadataErrors is true if non-fatal metadata errors were encountered.
+  // Validator will fail in this case, but should not block module load.
+  bool m_bMetadataErrors;
 };
 
 } // namespace hlsl

+ 32 - 32
include/dxc/DXIL/DxilSigPoint.inl

@@ -53,39 +53,39 @@ const SigPoint SigPoint::ms_SigPoints[kNumSigPointRecords] = {
 
 // <py::lines('INTERPRETATION-TABLE')>hctdb_instrhelp.get_interpretation_table()</py>
 // INTERPRETATION-TABLE:BEGIN
-//   Semantic,               VSIn,         VSOut,    PCIn,         HSIn,         HSCPIn,   HSCPOut,  PCOut,      DSIn,         DSCPIn,   DSOut,    GSVIn,    GSIn,         GSOut,    PSIn,          PSOut,         CSIn,     MSIn,         MSOut,        MSPOut,        ASIn
+//   Semantic,               VSIn,         VSOut,    PCIn,         HSIn,         HSCPIn,   HSCPOut,  PCOut,      DSIn,         DSCPIn,   DSOut,    GSVIn,    GSIn,         GSOut,    PSIn,          PSOut,         CSIn,     MSIn,     MSOut,    MSPOut,    ASIn
 #define DO_INTERPRETATION_TABLE(ROW) \
-  ROW(Arbitrary,              Arb,          Arb,      NA,           NA,           Arb,      Arb,      Arb,        Arb,          Arb,      Arb,      Arb,      NA,           Arb,      Arb,           NA,            NA,       NA,           Arb _65,      Arb _65,       NA) \
-  ROW(VertexID,               SV,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(InstanceID,             SV,           Arb,      NA,           NA,           Arb,      Arb,      NA,         NA,           Arb,      Arb,      Arb,      NA,           Arb,      Arb,           NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(Position,               Arb,          SV,       NA,           NA,           SV,       SV,       Arb,        Arb,          SV,       SV,       SV,       NA,           SV,       SV,            NA,            NA,       NA,           SV _65,       NA,            NA) \
-  ROW(RenderTargetArrayIndex, Arb,          SV,       NA,           NA,           SV,       SV,       Arb,        Arb,          SV,       SV,       SV,       NA,           SV,       SV,            NA,            NA,       NA,           NA,           SV _65,        NA) \
-  ROW(ViewPortArrayIndex,     Arb,          SV,       NA,           NA,           SV,       SV,       Arb,        Arb,          SV,       SV,       SV,       NA,           SV,       SV,            NA,            NA,       NA,           NA,           SV _65,        NA) \
-  ROW(ClipDistance,           Arb,          ClipCull, NA,           NA,           ClipCull, ClipCull, Arb,        Arb,          ClipCull, ClipCull, ClipCull, NA,           ClipCull, ClipCull,      NA,            NA,       NA,           ClipCull _65, NA,            NA) \
-  ROW(CullDistance,           Arb,          ClipCull, NA,           NA,           ClipCull, ClipCull, Arb,        Arb,          ClipCull, ClipCull, ClipCull, NA,           ClipCull, ClipCull,      NA,            NA,       NA,           ClipCull _65, NA,            NA) \
-  ROW(OutputControlPointID,   NA,           NA,       NA,           NotInSig,     NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(DomainLocation,         NA,           NA,       NA,           NA,           NA,       NA,       NA,         NotInSig,     NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(PrimitiveID,            NA,           NA,       NotInSig,     NotInSig,     NA,       NA,       NA,         NotInSig,     NA,       NA,       NA,       Shadow,       SGV,      SGV,           NA,            NA,       NA,           NA,           SV _65,        NA) \
-  ROW(GSInstanceID,           NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NotInSig,     NA,       NA,            NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(SampleIndex,            NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       Shadow _41,    NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(IsFrontFace,            NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           SGV,      SGV,           NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(Coverage,               NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NotInSig _50,  NotPacked _41, NA,       NA,           NA,           NA,            NA) \
-  ROW(InnerCoverage,          NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NotInSig _50,  NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(Target,                 NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            Target,        NA,       NA,           NA,           NA,            NA) \
-  ROW(Depth,                  NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NotPacked,     NA,       NA,           NA,           NA,            NA) \
-  ROW(DepthLessEqual,         NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NotPacked _50, NA,       NA,           NA,           NA,            NA) \
-  ROW(DepthGreaterEqual,      NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NotPacked _50, NA,       NA,           NA,           NA,            NA) \
-  ROW(StencilRef,             NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NotPacked _50, NA,       NA,           NA,           NA,            NA) \
-  ROW(DispatchThreadID,       NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NotInSig, NotInSig _65, NA,           NA,            NotInSig _65) \
-  ROW(GroupID,                NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NotInSig, NotInSig _65, NA,           NA,            NotInSig _65) \
-  ROW(GroupIndex,             NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NotInSig, NotInSig _65, NA,           NA,            NotInSig _65) \
-  ROW(GroupThreadID,          NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NotInSig, NotInSig _65, NA,           NA,            NotInSig _65) \
-  ROW(TessFactor,             NA,           NA,       NA,           NA,           NA,       NA,       TessFactor, TessFactor,   NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(InsideTessFactor,       NA,           NA,       NA,           NA,           NA,       NA,       TessFactor, TessFactor,   NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(ViewID,                 NotInSig _61, NA,       NotInSig _61, NotInSig _61, NA,       NA,       NA,         NotInSig _61, NA,       NA,       NA,       NotInSig _61, NA,       NotInSig _61,  NA,            NA,       NotInSig _65, NA,           NA,            NA) \
-  ROW(Barycentrics,           NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NotPacked _61, NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(ShadingRate,            NA,           SV _64,   NA,           NA,           SV _64,   SV _64,   NA,         NA,           SV _64,   SV _64,   SV _64,   NA,           SV _64,   SV _64,        NA,            NA,       NA,           NA,           NA,            NA) \
-  ROW(CullPrimitive,          NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,           NA,           NotPacked _65, NA)
+  ROW(Arbitrary,              Arb,          Arb,      NA,           NA,           Arb,      Arb,      Arb,        Arb,          Arb,      Arb,      Arb,      NA,           Arb,      Arb,           NA,            NA,       NA,       Arb,      Arb,       NA) \
+  ROW(VertexID,               SV,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(InstanceID,             SV,           Arb,      NA,           NA,           Arb,      Arb,      NA,         NA,           Arb,      Arb,      Arb,      NA,           Arb,      Arb,           NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(Position,               Arb,          SV,       NA,           NA,           SV,       SV,       Arb,        Arb,          SV,       SV,       SV,       NA,           SV,       SV,            NA,            NA,       NA,       SV,       NA,        NA) \
+  ROW(RenderTargetArrayIndex, Arb,          SV,       NA,           NA,           SV,       SV,       Arb,        Arb,          SV,       SV,       SV,       NA,           SV,       SV,            NA,            NA,       NA,       NA,       SV,        NA) \
+  ROW(ViewPortArrayIndex,     Arb,          SV,       NA,           NA,           SV,       SV,       Arb,        Arb,          SV,       SV,       SV,       NA,           SV,       SV,            NA,            NA,       NA,       NA,       SV,        NA) \
+  ROW(ClipDistance,           Arb,          ClipCull, NA,           NA,           ClipCull, ClipCull, Arb,        Arb,          ClipCull, ClipCull, ClipCull, NA,           ClipCull, ClipCull,      NA,            NA,       NA,       ClipCull, NA,        NA) \
+  ROW(CullDistance,           Arb,          ClipCull, NA,           NA,           ClipCull, ClipCull, Arb,        Arb,          ClipCull, ClipCull, ClipCull, NA,           ClipCull, ClipCull,      NA,            NA,       NA,       ClipCull, NA,        NA) \
+  ROW(OutputControlPointID,   NA,           NA,       NA,           NotInSig,     NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(DomainLocation,         NA,           NA,       NA,           NA,           NA,       NA,       NA,         NotInSig,     NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(PrimitiveID,            NA,           NA,       NotInSig,     NotInSig,     NA,       NA,       NA,         NotInSig,     NA,       NA,       NA,       Shadow,       SGV,      SGV,           NA,            NA,       NA,       NA,       SV,        NA) \
+  ROW(GSInstanceID,           NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NotInSig,     NA,       NA,            NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(SampleIndex,            NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       Shadow _41,    NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(IsFrontFace,            NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           SGV,      SGV,           NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(Coverage,               NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NotInSig _50,  NotPacked _41, NA,       NA,       NA,       NA,        NA) \
+  ROW(InnerCoverage,          NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NotInSig _50,  NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(Target,                 NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            Target,        NA,       NA,       NA,       NA,        NA) \
+  ROW(Depth,                  NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NotPacked,     NA,       NA,       NA,       NA,        NA) \
+  ROW(DepthLessEqual,         NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NotPacked _50, NA,       NA,       NA,       NA,        NA) \
+  ROW(DepthGreaterEqual,      NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NotPacked _50, NA,       NA,       NA,       NA,        NA) \
+  ROW(StencilRef,             NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NotPacked _50, NA,       NA,       NA,       NA,        NA) \
+  ROW(DispatchThreadID,       NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NotInSig, NotInSig, NA,       NA,        NotInSig) \
+  ROW(GroupID,                NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NotInSig, NotInSig, NA,       NA,        NotInSig) \
+  ROW(GroupIndex,             NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NotInSig, NotInSig, NA,       NA,        NotInSig) \
+  ROW(GroupThreadID,          NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NotInSig, NotInSig, NA,       NA,        NotInSig) \
+  ROW(TessFactor,             NA,           NA,       NA,           NA,           NA,       NA,       TessFactor, TessFactor,   NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(InsideTessFactor,       NA,           NA,       NA,           NA,           NA,       NA,       TessFactor, TessFactor,   NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(ViewID,                 NotInSig _61, NA,       NotInSig _61, NotInSig _61, NA,       NA,       NA,         NotInSig _61, NA,       NA,       NA,       NotInSig _61, NA,       NotInSig _61,  NA,            NA,       NotInSig, NA,       NA,        NA) \
+  ROW(Barycentrics,           NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NotPacked _61, NA,            NA,       NA,       NA,       NA,        NA) \
+  ROW(ShadingRate,            NA,           SV _64,   NA,           NA,           SV _64,   SV _64,   NA,         NA,           SV _64,   SV _64,   SV _64,   NA,           SV _64,   SV _64,        NA,            NA,       NA,       NA,       SV,        NA) \
+  ROW(CullPrimitive,          NA,           NA,       NA,           NA,           NA,       NA,       NA,         NA,           NA,       NA,       NA,       NA,           NA,       NA,            NA,            NA,       NA,       NA,       NotPacked, NA)
 // INTERPRETATION-TABLE:END
 
 const VersionedSemanticInterpretation SigPoint::ms_SemanticInterpretationTable[(unsigned)DXIL::SemanticKind::Invalid][(unsigned)SigPoint::Kind::Invalid] = {

+ 65 - 19
lib/DXIL/DxilMetadataHelper.cpp

@@ -84,6 +84,7 @@ DxilMDHelper::DxilMDHelper(Module *pModule, std::unique_ptr<ExtraPropertyHelper>
 , m_ValMinor(0)
 , m_MinValMajor(1)
 , m_MinValMinor(0)
+, m_bExtraMetadata(false)
 {
 }
 
@@ -97,6 +98,14 @@ void DxilMDHelper::SetShaderModel(const ShaderModel *pSM) {
     m_ValMajor = m_MinValMajor;
     m_ValMinor = m_MinValMinor;
   }
+  // Validator version 0.0 is not meant for validation or retail driver consumption,
+  // and is used for separate reflection.
+  // MinVal version drives metadata decisions for compatilbility, so snap this to
+  // latest for reflection/no validation case.
+  if (DXIL::CompareVersions(m_ValMajor, m_ValMinor, 0, 0) == 0) {
+    m_MinValMajor = 0;
+    m_MinValMinor = 0;
+  }
   if (m_ExtraPropertyHelper) {
     m_ExtraPropertyHelper->m_ValMajor = m_ValMajor;
     m_ExtraPropertyHelper->m_ValMinor = m_ValMinor;
@@ -509,7 +518,9 @@ void DxilMDHelper::LoadSignatureElement(const MDOperand &MDO, DxilSignatureEleme
     SE.SetSemanticIndexVec({0});
   }
   // Name-value list of extended properties.
+  m_ExtraPropertyHelper->m_bExtraMetadata = false;
   m_ExtraPropertyHelper->LoadSignatureElementProperties(pTupleMD->getOperand(kDxilSignatureElementNameValueList), SE);
+  m_bExtraMetadata |= m_ExtraPropertyHelper->m_bExtraMetadata;
 }
 
 //
@@ -627,7 +638,9 @@ void DxilMDHelper::LoadDxilSRV(const MDOperand &MDO, DxilResource &SRV) {
   SRV.SetSampleCount(ConstMDToUint32(pTupleMD->getOperand(kDxilSRVSampleCount)));
 
   // Name-value list of extended properties.
+  m_ExtraPropertyHelper->m_bExtraMetadata = false;
   m_ExtraPropertyHelper->LoadSRVProperties(pTupleMD->getOperand(kDxilSRVNameValueList), SRV);
+  m_bExtraMetadata |= m_ExtraPropertyHelper->m_bExtraMetadata;
 }
 
 MDTuple *DxilMDHelper::EmitDxilUAV(const DxilResource &UAV) {
@@ -669,7 +682,9 @@ void DxilMDHelper::LoadDxilUAV(const MDOperand &MDO, DxilResource &UAV) {
   UAV.SetROV(ConstMDToBool(pTupleMD->getOperand(kDxilUAVRasterizerOrderedView)));
 
   // Name-value list of extended properties.
+  m_ExtraPropertyHelper->m_bExtraMetadata = false;
   m_ExtraPropertyHelper->LoadUAVProperties(pTupleMD->getOperand(kDxilUAVNameValueList), UAV);
+  m_bExtraMetadata |= m_ExtraPropertyHelper->m_bExtraMetadata;
 }
 
 MDTuple *DxilMDHelper::EmitDxilCBuffer(const DxilCBuffer &CB) {
@@ -704,7 +719,9 @@ void DxilMDHelper::LoadDxilCBuffer(const MDOperand &MDO, DxilCBuffer &CB) {
   CB.SetSize(ConstMDToUint32(pTupleMD->getOperand(kDxilCBufferSizeInBytes)));
 
   // Name-value list of extended properties.
+  m_ExtraPropertyHelper->m_bExtraMetadata = false;
   m_ExtraPropertyHelper->LoadCBufferProperties(pTupleMD->getOperand(kDxilCBufferNameValueList), CB);
+  m_bExtraMetadata |= m_ExtraPropertyHelper->m_bExtraMetadata;
 }
 
 void DxilMDHelper::EmitDxilTypeSystem(DxilTypeSystem &TypeSystem, vector<GlobalVariable*> &LLVMUsed) {
@@ -826,11 +843,15 @@ void DxilMDHelper::LoadDxilTemplateArgAnnotation(const llvm::MDOperand &MDO, Dxi
     IFTBOOL(pTupleMD->getNumOperands() == 2, DXC_E_INCORRECT_DXIL_METADATA);
     annotation.SetIntegral((int64_t)ConstMDToUint64(pTupleMD->getOperand(kDxilTemplateArgValue)));
     break;
+  default:
+    DXASSERT(false, "Unknown template argument type tag.");
+    m_bExtraMetadata = true;
+    break;
   }
 }
 
 Metadata *DxilMDHelper::EmitDxilStructAnnotation(const DxilStructAnnotation &SA) {
-  bool bSupportExtended = DXIL::CompareVersions(m_ValMajor, m_ValMinor, 1, 5) >= 0;
+  bool bSupportExtended = DXIL::CompareVersions(m_MinValMajor, m_MinValMinor, 1, 5) >= 0;
 
   vector<Metadata *> MDVals;
   MDVals.reserve(SA.GetNumFields() + 2);  // In case of extended 1.5 property list
@@ -863,20 +884,32 @@ void DxilMDHelper::LoadDxilStructAnnotation(const MDOperand &MDO, DxilStructAnno
   if (pTupleMD->getNumOperands() == 1) {
     SA.MarkEmptyStruct();
   }
-  if (DXIL::CompareVersions(m_ValMajor, m_ValMinor, 1, 5) >= 0 &&
-      (pTupleMD->getNumOperands() == SA.GetNumFields()+2)) {
+  if (pTupleMD->getNumOperands() == SA.GetNumFields()+2) {
+    DXASSERT(DXIL::CompareVersions(m_MinValMajor, m_MinValMinor, 1, 5) >= 0,
+      "otherwise, template annotation emitted for dxil version < 1.5");
     // Load template args from extended operand
     const MDOperand &MDOExtra = pTupleMD->getOperand(SA.GetNumFields()+1);
     const MDTuple *pTupleMDExtra = dyn_cast_or_null<MDTuple>(MDOExtra.get());
     if(pTupleMDExtra) {
-      IFTBOOL(pTupleMDExtra->getNumOperands() % 2 == 0, DXC_E_INCORRECT_DXIL_METADATA);
-      unsigned Tag = ConstMDToUint32(pTupleMDExtra->getOperand(0));
-      IFTBOOL(Tag == kDxilTemplateArgumentsTag, DXC_E_INCORRECT_DXIL_METADATA); // Only one allowed at this point
-      const MDTuple *pTupleTemplateArgs = dyn_cast_or_null<MDTuple>(pTupleMDExtra->getOperand(1).get());
-      IFTBOOL(pTupleTemplateArgs, DXC_E_INCORRECT_DXIL_METADATA);
-      SA.SetNumTemplateArgs(pTupleTemplateArgs->getNumOperands());
-      for (unsigned i = 0; i < pTupleTemplateArgs->getNumOperands(); ++i) {
-        LoadDxilTemplateArgAnnotation(pTupleTemplateArgs->getOperand(i), SA.GetTemplateArgAnnotation(i));
+      for (unsigned i = 0; i < pTupleMDExtra->getNumOperands(); i += 2) {
+        unsigned Tag = ConstMDToUint32(pTupleMDExtra->getOperand(i));
+        const MDOperand &MDO = pTupleMDExtra->getOperand(i + 1);
+        IFTBOOL(MDO.get() != nullptr, DXC_E_INCORRECT_DXIL_METADATA);
+
+        switch (Tag) {
+        case kDxilTemplateArgumentsTag: {
+          const MDTuple *pTupleTemplateArgs = dyn_cast_or_null<MDTuple>(pTupleMDExtra->getOperand(1).get());
+          IFTBOOL(pTupleTemplateArgs, DXC_E_INCORRECT_DXIL_METADATA);
+          SA.SetNumTemplateArgs(pTupleTemplateArgs->getNumOperands());
+          for (unsigned i = 0; i < pTupleTemplateArgs->getNumOperands(); ++i) {
+            LoadDxilTemplateArgAnnotation(pTupleTemplateArgs->getOperand(i), SA.GetTemplateArgAnnotation(i));
+          }
+        } break;
+        default:
+          DXASSERT(false, "unknown extended tag for struct annotation.");
+          m_bExtraMetadata = true;
+          break;
+        }
       }
     }
   } else {
@@ -989,7 +1022,7 @@ Metadata *DxilMDHelper::EmitDxilFieldAnnotation(const DxilFieldAnnotation &FA) {
     MDVals.emplace_back(Uint32ToConstMD((unsigned)FA.GetCompType().GetKind()));
   }
   if (FA.IsCBVarUsed() &&
-      DXIL::CompareVersions(m_ValMajor, m_ValMinor, 1, 5) >= 0) {
+      DXIL::CompareVersions(m_MinValMajor, m_MinValMinor, 1, 5) >= 0) {
     MDVals.emplace_back(Uint32ToConstMD(kDxilFieldAnnotationCBUsedTag));
     MDVals.emplace_back(BoolToConstMD(true));
   }
@@ -1041,12 +1074,9 @@ void DxilMDHelper::LoadDxilFieldAnnotation(const MDOperand &MDO, DxilFieldAnnota
       FA.SetCBVarUsed(ConstMDToBool(MDO));
       break;
     default:
-      // TODO:  I don't think we should be failing unrecognized extended tags.
-      //        Perhaps we can flag this case in the module and fail validation
-      //        if flagged.
-      //        That way, an existing loader will not fail on an additional tag
-      //        and the blob would not be signed if the extra tag was not legal.
-      IFTBOOL(false, DXC_E_INCORRECT_DXIL_METADATA);
+      DXASSERT(false, "Unknown extended shader properties tag");
+      m_bExtraMetadata = true;
+      break;
     }
   }
 }
@@ -1393,6 +1423,7 @@ void DxilMDHelper::LoadDxilEntryProperties(const MDOperand &MDO,
     } break;
     default:
       DXASSERT(false, "Unknown extended shader properties tag");
+      m_bExtraMetadata = true;
       break;
     }
   }
@@ -1666,6 +1697,7 @@ Metadata *DxilMDHelper::EmitSubobject(const DxilSubobject &obj) {
   }
   default:
     DXASSERT(false, "otherwise, we didn't handle a valid subobject kind");
+    m_bExtraMetadata = true;
     break;
   }
   return MDNode::get(m_Ctx, Args);
@@ -1745,6 +1777,7 @@ void DxilMDHelper::LoadSubobject(const llvm::MDNode &MD, DxilSubobjects &Subobje
   }
   default:
     DXASSERT(false, "otherwise, we didn't handle a valid subobject kind");
+    m_bExtraMetadata = true;
     break;
   }
 }
@@ -1780,7 +1813,9 @@ void DxilMDHelper::LoadDxilSampler(const MDOperand &MDO, DxilSampler &S) {
   S.SetSamplerKind((DxilSampler::SamplerKind)ConstMDToUint32(pTupleMD->getOperand(kDxilSamplerType)));
 
   // Name-value list of extended properties.
+  m_ExtraPropertyHelper->m_bExtraMetadata = false;
   m_ExtraPropertyHelper->LoadSamplerProperties(pTupleMD->getOperand(kDxilSamplerNameValueList), S);
+  m_bExtraMetadata |= m_ExtraPropertyHelper->m_bExtraMetadata;
 }
 
 const MDOperand &DxilMDHelper::GetResourceClass(llvm::MDNode *MD,
@@ -2026,7 +2061,8 @@ void DxilMDHelper::LoadDxilASState(const MDOperand &MDO, unsigned *NumThreads, u
 //
 DxilMDHelper::ExtraPropertyHelper::ExtraPropertyHelper(Module *pModule)
 : m_Ctx(pModule->getContext())
-, m_pModule(pModule) {
+, m_pModule(pModule)
+, m_bExtraMetadata(false) {
 }
 
 DxilExtraPropertyHelper::DxilExtraPropertyHelper(Module *pModule)
@@ -2073,6 +2109,8 @@ void DxilExtraPropertyHelper::LoadSRVProperties(const MDOperand &MDO, DxilResour
       break;
     default:
       DXASSERT(false, "Unknown resource record tag");
+      m_bExtraMetadata = true;
+      break;
     }
   }
 }
@@ -2126,6 +2164,8 @@ void DxilExtraPropertyHelper::LoadUAVProperties(const MDOperand &MDO, DxilResour
       break;
     default:
       DXASSERT(false, "Unknown resource record tag");
+      m_bExtraMetadata = true;
+      break;
     }
   }
 }
@@ -2160,6 +2200,8 @@ void DxilExtraPropertyHelper::LoadCBufferProperties(const MDOperand &MDO, DxilCB
       break;
     default:
       DXASSERT(false, "Unknown cbuffer tag");
+      m_bExtraMetadata = true;
+      break;
     }
   }
 }
@@ -2188,6 +2230,8 @@ void DxilExtraPropertyHelper::EmitSignatureElementProperties(const DxilSignature
 
   if (SE.GetUsageMask() != 0 &&
       DXIL::CompareVersions(m_ValMajor, m_ValMinor, 1, 5) >= 0) {
+    // Emitting this will not hurt old reatil loader (only asserts),
+    // and is required for signatures to match in validation.
     MDVals.emplace_back(DxilMDHelper::Uint32ToConstMD(DxilMDHelper::kDxilSignatureElementUsageCompMaskTag, m_Ctx));
     MDVals.emplace_back(DxilMDHelper::Uint32ToConstMD(SE.GetUsageMask(), m_Ctx));
   }
@@ -2220,6 +2264,8 @@ void DxilExtraPropertyHelper::LoadSignatureElementProperties(const MDOperand &MD
       break;
     default:
       DXASSERT(false, "Unknown signature element tag");
+      m_bExtraMetadata = true;
+      break;
     }
   }
 }

+ 19 - 1
lib/DXIL/DxilModule.cpp

@@ -115,6 +115,7 @@ DxilModule::DxilModule(Module *pModule)
 , m_IntermediateFlags(0)
 , m_AutoBindingSpace(UINT_MAX)
 , m_pSubobjects(nullptr)
+, m_bMetadataErrors(false)
 {
 
   DXASSERT_NOMSG(m_pModule != nullptr);
@@ -1389,7 +1390,12 @@ bool DxilModule::IsKnownNamedMetaData(llvm::NamedMDNode &Node) {
   return DxilMDHelper::IsKnownNamedMetaData(Node);
 }
 
+bool DxilModule::HasMetadataErrors() {
+  return m_bMetadataErrors;
+}
+
 void DxilModule::LoadDxilMetadata() {
+  m_bMetadataErrors = false;
   m_pMDHelper->LoadDxilVersion(m_DxilMajor, m_DxilMinor);
   m_pMDHelper->LoadValidatorVersion(m_ValMajor, m_ValMinor);
   const ShaderModel *loadedSM;
@@ -1480,11 +1486,23 @@ void DxilModule::LoadDxilMetadata() {
 
   LoadDxilResources(*pEntryResources);
 
-  m_pMDHelper->LoadDxilTypeSystem(*m_pTypeSystem.get());
+  // Type system is not required for consumption of dxil.
+  try {
+    m_pMDHelper->LoadDxilTypeSystem(*m_pTypeSystem.get());
+  } catch (hlsl::Exception &) {
+    m_bMetadataErrors = true;
+#ifdef DBG
+    throw;
+#endif
+    m_pTypeSystem->GetStructAnnotationMap().clear();
+    m_pTypeSystem->GetFunctionAnnotationMap().clear();
+  }
 
   m_pMDHelper->LoadRootSignature(m_SerializedRootSignature);
 
   m_pMDHelper->LoadDxilViewIdState(m_SerializedState);
+
+  m_bMetadataErrors |= m_pMDHelper->HasExtraMetadata();
 }
 
 MDTuple *DxilModule::EmitDxilResources() {

+ 8 - 12
lib/DxilContainer/DxilContainerAssembler.cpp

@@ -1693,21 +1693,17 @@ void hlsl::SerializeDxilContainerForModule(DxilModule *pModule,
   // Clone module for reflection, strip function defs
   std::unique_ptr<Module> reflectionModule;
   if (bEmitReflection) {
-    if (DXIL::CompareVersions(ValMajor, ValMinor, 1, 5) < 0) {
-      // Retain usage information in metadata for reflection by:
-      // Upgrade validator version, re-emit metadata, then clone module for reflection.
-      // 0,0 = Not meant to be validated, support latest
-      pModule->SetValidatorVersion(0, 0);
-      pModule->ReEmitDxilResources();
-    }
+    // Retain usage information in metadata for reflection by:
+    // Upgrade validator version, re-emit metadata, then clone module for reflection.
+    // 0,0 = Not meant to be validated, support latest
+    pModule->SetValidatorVersion(0, 0);
+    pModule->ReEmitDxilResources();
 
     reflectionModule.reset(llvm::CloneModule(pModule->GetModule()));
 
-    if (DXIL::CompareVersions(ValMajor, ValMinor, 1, 5) < 0) {
-      // Now restore validator version on main module and re-emit metadata.
-      pModule->SetValidatorVersion(ValMajor, ValMinor);
-      pModule->ReEmitDxilResources();
-    }
+    // Now restore validator version on main module and re-emit metadata.
+    pModule->SetValidatorVersion(ValMajor, ValMinor);
+    pModule->ReEmitDxilResources();
 
     for (Function &F : reflectionModule->functions()) {
       if (!F.isDeclaration()) {

+ 4 - 0
lib/HLSL/DxilValidation.cpp

@@ -5617,6 +5617,10 @@ ValidateDxilModule(llvm::Module *pModule, llvm::Module *pDebugModule) {
   if (!pDxilModule) {
     return DXC_E_IR_VERIFICATION_FAILED;
   }
+  if (pDxilModule->HasMetadataErrors()) {
+    DiagPrinter << "Metadata error encountered in non-critical metadata (such as Type Annotations).\n";
+    return DXC_E_IR_VERIFICATION_FAILED;
+  }
 
   ValidationContext ValCtx(*pModule, pDebugModule, *pDxilModule, DiagPrinter);
 

+ 1 - 12
tools/clang/lib/CodeGen/CGHLSLMS.cpp

@@ -422,18 +422,7 @@ CGMSHLSLRuntime::CGMSHLSLRuntime(CodeGenModule &CGM)
 
   m_pHLModule->SetAutoBindingSpace(CGM.getCodeGenOpts().HLSLDefaultSpace);
 
-  unsigned ValMajor = CGM.getCodeGenOpts().HLSLValidatorMajorVer;
-  if (ValMajor == UINT_MAX) {
-    // Use dxil version as validator version when no user-specified validator
-    // version.
-    unsigned DxilMajor = 1;
-    unsigned DxilMinor = 0;
-    SM->GetDxilVersion(DxilMajor, DxilMinor);
-    m_pHLModule->SetValidatorVersion(DxilMajor, DxilMinor);
-  } else {
-    unsigned ValMinor = CGM.getCodeGenOpts().HLSLValidatorMinorVer;
-    m_pHLModule->SetValidatorVersion(ValMajor, ValMinor);
-  }
+  m_pHLModule->SetValidatorVersion(CGM.getCodeGenOpts().HLSLValidatorMajorVer, CGM.getCodeGenOpts().HLSLValidatorMinorVer);
 
   m_bDebugInfo = CGM.getCodeGenOpts().getDebugInfo() == CodeGenOptions::FullDebugInfo;
 

+ 1 - 1
tools/clang/test/CodeGenHLSL/rootSigProfile.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T rootsig_1_0 %s
+// RUN: %dxilver 1.5 | %dxc -E main -T rootsig_1_0 %s
 
 #define main "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), DescriptorTable( visibility=SHADER_VISIBILITY_PIXEL, SRV(t0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_PIXEL, CBV(b0, numDescriptors=8) ), DescriptorTable( visibility=SHADER_VISIBILITY_PIXEL, Sampler(s0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_VERTEX, SRV(t0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_VERTEX, CBV(b0, numDescriptors=8) ), DescriptorTable( visibility=SHADER_VISIBILITY_VERTEX, Sampler(s0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_GEOMETRY, SRV(t0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_GEOMETRY, CBV(b0, numDescriptors=8) ), DescriptorTable( visibility=SHADER_VISIBILITY_GEOMETRY, Sampler(s0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_HULL, SRV(t0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_HULL, CBV(b0, numDescriptors=8) ), DescriptorTable( visibility=SHADER_VISIBILITY_HULL, Sampler(s0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_DOMAIN, SRV(t0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_DOMAIN, CBV(b0, numDescriptors=8) ), DescriptorTable( visibility=SHADER_VISIBILITY_DOMAIN, Sampler(s0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_ALL, UAV(u0, numDescriptors=8) )"
 

+ 1 - 1
tools/clang/test/CodeGenHLSL/rootSigProfile2.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T rootsig_1_0  /Dmain="SRV(t0)"  %s
+// RUN: %dxilver 1.5 | %dxc -E main -T rootsig_1_0  /Dmain="SRV(t0)"  %s
 
 #define MyRS2 RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), DescriptorTable( visibility=SHADER_VISIBILITY_PIXEL, SRV(t0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_PIXEL, CBV(b0, numDescriptors=8) ), DescriptorTable( visibility=SHADER_VISIBILITY_PIXEL, Sampler(s0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_VERTEX, SRV(t0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_VERTEX, CBV(b0, numDescriptors=8) ), DescriptorTable( visibility=SHADER_VISIBILITY_VERTEX, Sampler(s0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_GEOMETRY, SRV(t0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_GEOMETRY, CBV(b0, numDescriptors=8) ), DescriptorTable( visibility=SHADER_VISIBILITY_GEOMETRY, Sampler(s0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_HULL, SRV(t0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_HULL, CBV(b0, numDescriptors=8) ), DescriptorTable( visibility=SHADER_VISIBILITY_HULL, Sampler(s0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_DOMAIN, SRV(t0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_DOMAIN, CBV(b0, numDescriptors=8) ), DescriptorTable( visibility=SHADER_VISIBILITY_DOMAIN, Sampler(s0, numDescriptors=16) ), DescriptorTable( visibility=SHADER_VISIBILITY_ALL, UAV(u0, numDescriptors=8) )
 

+ 1 - 1
tools/clang/test/CodeGenHLSL/rootSigProfile3.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T rootsig_1_0  %s | FileCheck %s
+// RUN: %dxilver 1.5 | %dxc -E main -T rootsig_1_0  %s | FileCheck %s
 
 // CHECK: root signature error - undeclared identifier main
 

+ 1 - 1
tools/clang/test/CodeGenHLSL/rootSigProfile4.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T rootsig_1_0  /Dmain="SSRV(t0)"  %s  | FileCheck %s
+// RUN: %dxilver 1.5 | %dxc -E main -T rootsig_1_0  /Dmain="SSRV(t0)"  %s  | FileCheck %s
 
 // CHECK: root signature error - Unexpected token 'SSRV' when parsing root signature
 

+ 1 - 1
tools/clang/test/CodeGenHLSL/rootSigProfile5.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E RS -T rootsig_1_0 %s
+// RUN: %dxilver 1.5 | %dxc -E RS -T rootsig_1_0 %s
 // Test root signature compilation from expanded macro.
 
 #define YYY "DescriptorTable" "(SRV(t3))"

+ 1 - 1
tools/clang/test/HLSLFileCheck/d3dreflect/anon_struct.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T ps_6_0 -E main %s  -validator-version 1.5  | %D3DReflect %s | FileCheck %s
+// RUN: %dxc -T ps_6_0 -E main %s | %D3DReflect %s | FileCheck %s
 
 struct {
     int X;

+ 1 - 1
tools/clang/test/HLSLFileCheck/d3dreflect/cb_sizes.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.5 | %dxc -E main -T vs_6_0 -validator-version 1.5 %s | %D3DReflect %s | FileCheck %s
+// RUN: %dxc -E main -T vs_6_0 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
 
 // Verify CB variable sizes align with expectations.
 // This also tests some matrix, struct, and array cases that may

+ 1 - 1
tools/clang/test/HLSLFileCheck/d3dreflect/cbuf-usage-lib.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.5 | %dxc -auto-binding-space 13 -T lib_6_3 -validator-version 1.5 %s | %D3DReflect %s | FileCheck %s
+// RUN: %dxc -auto-binding-space 13 -T lib_6_3 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
 
 // Make sure usage flag is set properly for cbuffers used in libraries
 

+ 1 - 1
tools/clang/test/HLSLFileCheck/d3dreflect/empty_struct2.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.5 | %dxc -E main -T vs_6_0 -validator-version 1.5 %s | %D3DReflect %s | FileCheck %s
+// RUN: %dxc -E main -T vs_6_0 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
 
 // Make sure nest empty struct works.
 

+ 1 - 1
tools/clang/test/HLSLFileCheck/d3dreflect/lib_global.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.5 | %dxc -T lib_6_3 -enable-16bit-types -validator-version 1.5 %s | %D3DReflect %s | FileCheck %s
+// RUN: %dxc -T lib_6_3 -enable-16bit-types -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
 
 // Note: validator version 1.5 is required because these tests use
 // module disassembly -> reassembly between steps, and type annotations

+ 1 - 1
tools/clang/test/HLSLFileCheck/d3dreflect/reflect-lib-1.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.5 | %dxc -T lib_6_3 -auto-binding-space 11 -default-linkage external -validator-version 1.5 %s | %D3DReflect %s | FileCheck %s
+// RUN: %dxc -T lib_6_3 -auto-binding-space 11 -default-linkage external -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
 
 float cbval1;
 cbuffer MyCB : register(b11, space2) { int4 cbval2, cbval3; }

+ 1 - 1
tools/clang/test/HLSLFileCheck/d3dreflect/structured_buffer_layout.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.5 | %dxc -E main -T vs_6_0 -validator-version 1.5 %s | %D3DReflect %s | FileCheck %s
+// RUN: %dxc -E main -T vs_6_0 -Vd -validator-version 0.0 %s | %D3DReflect %s | FileCheck %s
 
 // Verify SB type description does not follow the CB offseting alignment
 // even when structure is shared with a ConstantBuffer.

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/compile_options/Qstrip_reflect/Qstrip_reflect.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_0 %s -Qstrip_reflect -validator-version 1.5 | FileCheck %s
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_0 %s -Qstrip_reflect | FileCheck %s
 
 // Make sure there are no type annotations
 // CHECK-NOT: !dx.typeAnnotations

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/compile_options/Qstrip_reflect/Qstrip_reflect_struct_buf.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -enable-16bit-types -HV 2018 -Qstrip_reflect %s -validator-version 1.5 | FileCheck %s
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -enable-16bit-types -HV 2018 -Qstrip_reflect %s  | FileCheck %s
 
 
 struct MyStruct1

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/objects/Buffer/multiUAVLoad2.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.1 | %dxc -E main -T cs_6_0 -validator-version 1.5 %s | FileCheck %s
+// RUN: %dxilver 1.1 | %dxc -E main -T cs_6_0 %s | FileCheck %s
 
 // CHECK-NOT: Typed UAV Load Additional Formats
 

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/objects/Buffer/multiUAVLoad4.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.1 | %dxc -E main -T ps_6_0 -validator-version 1.1 %s | FileCheck %s
+// RUN: %dxilver 1.1 | %dxc -E main -T ps_6_0 %s | FileCheck %s
 
 // CHECK-NOT: Typed UAV Load Additional Formats
 

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/objects/Buffer/multiUAVLoad5.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.1 | %dxc -E main -T cs_6_0 -validator-version 1.1 %s | FileCheck %s
+// RUN: %dxilver 1.1 | %dxc -E main -T cs_6_0 %s | FileCheck %s
 
 // CHECK-NOT: Typed UAV Load Additional Formats
 

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/objects/Buffer/multiUAVLoad7.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.1 | %dxc -E main -T cs_6_0 %s -validator-version 1.1 | FileCheck %s
+// RUN: %dxilver 1.1 | %dxc -E main -T cs_6_0 %s | FileCheck %s
 
 // CHECK-NOT: Typed UAV Load Additional Formats
 

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/objects/Cbuffer/uint64_2.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.1 | %dxc -E main -T cs_6_0 -not_use_legacy_cbuf_load -validator-version 1.1  %s | FileCheck %s
+// RUN: %dxilver 1.1 | %dxc -E main -T cs_6_0 -not_use_legacy_cbuf_load  %s | FileCheck %s
 
 // CHECK: 64-Bit integer
 // CHECK: dx.op.bufferStore.i32

+ 3 - 3
tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sample3.hlsl

@@ -1,6 +1,6 @@
-// RUN: %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHK_FLOAT
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHK_FLOAT
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
 
 
 // CHECK: @main

+ 3 - 3
tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleBias.hlsl

@@ -1,6 +1,6 @@
-// RUN: %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHK_FLOAT
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHK_FLOAT
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
 
 SamplerState samp1 : register(s5);
 Texture2D<TYPE> text1 : register(t3);

+ 3 - 3
tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleCmp.hlsl

@@ -1,6 +1,6 @@
-// RUN: %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHECK
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHECK
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
 
 SamplerComparisonState samp1 : register(s5);
 Texture2D<TYPE> text1 : register(t3);

+ 3 - 3
tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleCmpLZ.hlsl

@@ -1,6 +1,6 @@
-// RUN: %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHECK
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHECK
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
 
 SamplerComparisonState samp1 : register(s5);
 Texture2D<TYPE> text1 : register(t3);

+ 3 - 3
tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleCmpLZ2.hlsl

@@ -1,6 +1,6 @@
-// RUN: %dxc -E main -T cs_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHECK
-// RUN: %dxc -E main -T cs_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
-// RUN: %dxc -E main -T cs_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
+// RUN: %dxilver 1.5 | %dxc -E main -T cs_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHECK
+// RUN: %dxilver 1.5 | %dxc -E main -T cs_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
+// RUN: %dxilver 1.5 | %dxc -E main -T cs_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHECK
 
 SamplerComparisonState samp1 : register(s5);
 Texture2D<TYPE> text1 : register(t3);

+ 3 - 3
tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleGrad.hlsl

@@ -1,6 +1,6 @@
-// RUN: %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHK_FLOAT
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHK_FLOAT
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
 
 SamplerState samp1 : register(s5);
 Texture2D<TYPE> text1 : register(t3);

+ 3 - 3
tools/clang/test/HLSLFileCheck/hlsl/objects/Texture/sampleL.hlsl

@@ -1,6 +1,6 @@
-// RUN: %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHK_FLOAT
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
-// RUN: %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_0 -DTYPE=float4 %s                            | FileCheck %s -check-prefix=CHK_FLOAT
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=half4       -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_2 -DTYPE=min16float4 -enable-16bit-types %s   | FileCheck %s -check-prefix=CHK_HALF
 
 SamplerState samp1 : register(s5);
 Texture2D<TYPE> text1 : register(t3);

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/semantics/sv_depth/output1.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_0 %s -validator-version 1.5 | FileCheck %s
+// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
 
 // CHECK: DepthOutput=1
 // CHECK: SampleFrequency=1

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/semantics/sv_isfrontface/input1.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_0 %s -validator-version 1.5 | FileCheck %s
+// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
 
 // For IsFrontFace.
 // CHECK: icmp ne

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/semantics/sv_isfrontface/input2.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T ps_6_0 %s -validator-version 1.5 | FileCheck %s
+// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
 
 // CHECK: @main
 float4 main(

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/semantics/sv_isfrontface/isfrontface.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -T ps_6_0 -E main %s -validator-version 1.5 | FileCheck %s
+// RUN: %dxc -T ps_6_0 -E main %s | FileCheck %s
 
 // Make sure use uint isfrontface works.
 // CHECK: main

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/semantics/sv_isfrontface/isfrontface2.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxc -E main -T gs_6_0 %s -validator-version 1.5 | FileCheck %s
+// RUN: %dxc -E main -T gs_6_0 %s | FileCheck %s
 
 // Make sure uint isfrontface works.
 // CHECK: emitStream

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/signature/sig-bool-as-uint.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_0 %s -validator-version 1.5 | FileCheck %s
+// RUN: %dxilver 1.5 | %dxc -E main -T ps_6_0 %s | FileCheck %s
 
 // make sure bool maps to uint in signature
 // CHECK: ; BOOL                     0   x           0     NONE    uint

+ 1 - 1
tools/clang/test/HLSLFileCheck/hlsl/types/modifiers/static/static_const_global.hlsl

@@ -1,4 +1,4 @@
-// RUN: %dxilver 1.5 | %dxc -T lib_6_3 -auto-binding-space 11 -validator-version 1.5 %s | FileCheck %s
+// RUN: %dxilver 1.5 | %dxc -T lib_6_3 -auto-binding-space 11 %s | FileCheck %s
 
 // Make sure ST is removed
 // CHECK-NOT: @ST

+ 9 - 3
tools/clang/tools/dxcompiler/dxcompilerobj.cpp

@@ -665,9 +665,15 @@ public:
           opts.KeepReflectionInDxil = true;
         }
 
-        // user-specified validator version override
-        compiler.getCodeGenOpts().HLSLValidatorMajorVer = opts.ValVerMajor;
-        compiler.getCodeGenOpts().HLSLValidatorMinorVer = opts.ValVerMinor;
+        if (opts.ValVerMajor != UINT_MAX) {
+          // user-specified validator version override
+          compiler.getCodeGenOpts().HLSLValidatorMajorVer = opts.ValVerMajor;
+          compiler.getCodeGenOpts().HLSLValidatorMinorVer = opts.ValVerMinor;
+        } else {
+          // Version from dxil.dll, or internal validator if unavailable
+          dxcutil::GetValidatorVersion(&compiler.getCodeGenOpts().HLSLValidatorMajorVer,
+                                      &compiler.getCodeGenOpts().HLSLValidatorMinorVer);
+        }
       }
 
       if (opts.AstDump) {

+ 4 - 1
tools/clang/unittests/HLSL/CompilerTest.cpp

@@ -1485,7 +1485,7 @@ TEST_F(CompilerTest, CompileThenAddCustomDebugName) {
   LPCWSTR args[] = { L"/Zi", L"/Qembed_debug", L"/Zss" };
 
   VERIFY_SUCCEEDED(pCompiler->Compile(pSource, L"source.hlsl", L"main",
-    L"ps_6_5", args, _countof(args), nullptr, 0,
+    L"ps_6_0", args, _countof(args), nullptr, 0,
     nullptr, &pResult));
   VERIFY_SUCCEEDED(pResult->GetResult(&pProgram));
   // Append private data blob
@@ -2767,15 +2767,18 @@ TEST_F(CompilerTest, CodeGenLibUnusedFunc) {
 }
 
 TEST_F(CompilerTest, CodeGenRootSigProfile) {
+  if (m_ver.SkipDxilVersion(1, 5)) return;
   CodeGenTest(L"rootSigProfile.hlsl");
 }
 
 TEST_F(CompilerTest, CodeGenRootSigProfile2) {
+  if (m_ver.SkipDxilVersion(1, 5)) return;
   // TODO: Verify the result when reflect the structures.
   CodeGenTest(L"rootSigProfile2.hlsl");
 }
 
 TEST_F(CompilerTest, CodeGenRootSigProfile5) {
+  if (m_ver.SkipDxilVersion(1, 5)) return;
   CodeGenTest(L"rootSigProfile5.hlsl");
 }
 

+ 26 - 24
tools/clang/unittests/HLSL/DxilContainerTest.cpp

@@ -586,31 +586,31 @@ TEST_F(DxilContainerTest, CompileWhenDebugSourceThenSourceMatters) {
   LPCWSTR Zsb[] = { L"/Zsb" };
   
   // No debug info, no debug name...
-  std::string noName = CompileToDebugName(program1, L"main", L"ps_6_5", nullptr, 0);
+  std::string noName = CompileToDebugName(program1, L"main", L"ps_6_0", nullptr, 0);
   VERIFY_IS_TRUE(noName.empty());
 
   if (!DoesValidatorSupportDebugName())
     return;
 
   // Debug info, default to source name.
-  std::string sourceName1 = CompileToDebugName(program1, L"main", L"ps_6_5", Zi, _countof(Zi));
+  std::string sourceName1 = CompileToDebugName(program1, L"main", L"ps_6_0", Zi, _countof(Zi));
   VERIFY_IS_FALSE(sourceName1.empty());
 
   // Deterministic naming.
-  std::string sourceName1Again = CompileToDebugName(program1, L"main", L"ps_6_5", Zi, _countof(Zi));
+  std::string sourceName1Again = CompileToDebugName(program1, L"main", L"ps_6_0", Zi, _countof(Zi));
   VERIFY_ARE_EQUAL_STR(sourceName1.c_str(), sourceName1Again.c_str());
 
   // Use program binary by default, so name should be the same.
-  std::string sourceName2 = CompileToDebugName(program2, L"main", L"ps_6_5", Zi, _countof(Zi));
+  std::string sourceName2 = CompileToDebugName(program2, L"main", L"ps_6_0", Zi, _countof(Zi));
   VERIFY_IS_TRUE(0 == strcmp(sourceName2.c_str(), sourceName1.c_str()));
 
   // Source again, different because different switches are specified.
-  std::string sourceName1Zss = CompileToDebugName(program1, L"main", L"ps_6_5", ZiZss, _countof(ZiZss));
+  std::string sourceName1Zss = CompileToDebugName(program1, L"main", L"ps_6_0", ZiZss, _countof(ZiZss));
   VERIFY_IS_FALSE(0 == strcmp(sourceName1Zss.c_str(), sourceName1.c_str()));
 
   // Binary program 1 and 2 should be different from source and equal to each other.
-  std::string binName1 = CompileToDebugName(program1, L"main", L"ps_6_5", ZiZsb, _countof(ZiZsb));
-  std::string binName2 = CompileToDebugName(program2, L"main", L"ps_6_5", ZiZsb, _countof(ZiZsb));
+  std::string binName1 = CompileToDebugName(program1, L"main", L"ps_6_0", ZiZsb, _countof(ZiZsb));
+  std::string binName2 = CompileToDebugName(program2, L"main", L"ps_6_0", ZiZsb, _countof(ZiZsb));
   VERIFY_ARE_EQUAL_STR(binName1.c_str(), binName2.c_str());
   VERIFY_IS_FALSE(0 == strcmp(sourceName1Zss.c_str(), binName1.c_str()));
 
@@ -618,15 +618,15 @@ TEST_F(DxilContainerTest, CompileWhenDebugSourceThenSourceMatters) {
     return;
 
   // Verify source hash
-  std::string binHash1Zss = CompileToShaderHash(program1, L"main", L"ps_6_5", ZiZss, _countof(ZiZss));
+  std::string binHash1Zss = CompileToShaderHash(program1, L"main", L"ps_6_0", ZiZss, _countof(ZiZss));
   VERIFY_IS_FALSE(binHash1Zss.empty());
 
   // bin hash when compiling with /Zi
-  std::string binHash1 = CompileToShaderHash(program1, L"main", L"ps_6_5", ZiZsb, _countof(ZiZsb));
+  std::string binHash1 = CompileToShaderHash(program1, L"main", L"ps_6_0", ZiZsb, _countof(ZiZsb));
   VERIFY_IS_FALSE(binHash1.empty());
 
   // Without /Zi hash for /Zsb should be the same
-  std::string binHash2 = CompileToShaderHash(program2, L"main", L"ps_6_5", Zsb, _countof(Zsb));
+  std::string binHash2 = CompileToShaderHash(program2, L"main", L"ps_6_0", Zsb, _countof(Zsb));
   VERIFY_IS_FALSE(binHash2.empty());
   VERIFY_ARE_EQUAL_STR(binHash1.c_str(), binHash2.c_str());
 
@@ -652,6 +652,7 @@ TEST_F(DxilContainerTest, CompileWhenOKThenIncludesSignatures) {
     "}";
 
   {
+    std::string s = DisassembleProgram(program, L"VSMain", L"vs_6_0");
     // NOTE: this will change when proper packing is done, and when 'always-reads' is accurately implemented.
     const char expected_1_4[] =
       ";\n"
@@ -685,15 +686,17 @@ TEST_F(DxilContainerTest, CompileWhenOKThenIncludesSignatures) {
       "; -------------------- ----- ------ -------- -------- ------- ------\n"
       "; SV_Position              0   xyzw        0      POS   float   xyzw\n"  // could read SV_POSITION
       "; COLOR                    0   xyzw        1     NONE   float   xyzw\n"; // should read '1' in register
-    std::string s64 = DisassembleProgram(program, L"VSMain", L"vs_6_4");
-    std::string start64(s64.c_str(), strlen(expected_1_4));
-    VERIFY_ARE_EQUAL_STR(expected_1_4, start64.c_str());
-    std::string s65 = DisassembleProgram(program, L"VSMain", L"vs_6_5");
-    std::string start65(s65.c_str(), strlen(expected));
-    VERIFY_ARE_EQUAL_STR(expected, start65.c_str());
+    if (hlsl::DXIL::CompareVersions(m_ver.m_ValMajor, m_ver.m_ValMinor, 1, 5) < 0) {
+      std::string start(s.c_str(), strlen(expected_1_4));
+      VERIFY_ARE_EQUAL_STR(expected_1_4, start.c_str());
+    } else {
+      std::string start(s.c_str(), strlen(expected));
+      VERIFY_ARE_EQUAL_STR(expected, start.c_str());
+    }
   }
 
   {
+    std::string s = DisassembleProgram(program, L"PSMain", L"ps_6_0");
     // NOTE: this will change when proper packing is done, and when 'always-reads' is accurately implemented.
     const char expected_1_4[] =
       ";\n"
@@ -725,14 +728,13 @@ TEST_F(DxilContainerTest, CompileWhenOKThenIncludesSignatures) {
       "; Name                 Index   Mask Register SysValue  Format   Used\n"
       "; -------------------- ----- ------ -------- -------- ------- ------\n"
       "; SV_Target                0   xyzw        0   TARGET   float   xyzw\n";// could read SV_TARGET
-    
-    std::string s64 = DisassembleProgram(program, L"PSMain", L"ps_6_4");
-    std::string start64(s64.c_str(), strlen(expected_1_4));
-    VERIFY_ARE_EQUAL_STR(expected_1_4, start64.c_str());
-
-    std::string s65 = DisassembleProgram(program, L"PSMain", L"ps_6_5");
-    std::string start65(s65.c_str(), strlen(expected));
-    VERIFY_ARE_EQUAL_STR(expected, start65.c_str());
+    if (hlsl::DXIL::CompareVersions(m_ver.m_ValMajor, m_ver.m_ValMinor, 1, 5) < 0) {
+      std::string start(s.c_str(), strlen(expected_1_4));
+      VERIFY_ARE_EQUAL_STR(expected_1_4, start.c_str());
+    } else {
+      std::string start(s.c_str(), strlen(expected));
+      VERIFY_ARE_EQUAL_STR(expected, start.c_str());
+    }
   }
 }
 

+ 3 - 5
tools/clang/unittests/HLSL/DxilModuleTest.cpp

@@ -529,11 +529,9 @@ void DxilModuleTest::VerifyValidatorVersionMatches(
   DM.GetValidatorVersion(vMajor, vMinor);
 
   if (expectedMajor == UINT_MAX) {
-    // Expect dxil version
-    unsigned vMajorDxil, vMinorDxil;
-    DM.GetDxilVersion(vMajorDxil, vMinorDxil);
-    VERIFY_ARE_EQUAL(vMajor, vMajorDxil);
-    VERIFY_ARE_EQUAL(vMinor, vMinorDxil);
+    // Expect current version
+    VERIFY_ARE_EQUAL(vMajor, c.m_ver.m_ValMajor);
+    VERIFY_ARE_EQUAL(vMinor, c.m_ver.m_ValMinor);
   } else {
     VERIFY_ARE_EQUAL(vMajor, expectedMajor);
     VERIFY_ARE_EQUAL(vMinor, expectedMinor);

+ 0 - 2
tools/clang/unittests/HLSL/FileCheckerTest.cpp

@@ -292,8 +292,6 @@ FileRunCommandResult FileRunCommandPart::RunDxcHashTest(dxc::DxcDllSupport &DllS
     if (a.find(L"Zi") != std::wstring::npos) continue;
     original_flags.push_back(a.data());
   }
-  original_flags.push_back(L"-validator-version");
-  original_flags.push_back(L"1.5");
 
   std::string originalOutput;
   CComPtr<IDxcBlob> pOriginalHash;

+ 2 - 2
tools/clang/unittests/HLSL/OptimizerTest.cpp

@@ -117,7 +117,7 @@ TEST_F(OptimizerTest, OptimizerWhenSliceWithIntermediateOptionsThenOK) {
     "float4 main() : SV_Target {\r\n"
     "  return tex1.Load((int3)0);\r\n"
     "}";
-  OptimizerWhenSliceNThenOK(1, SampleProgram, L"ps_6_5", { L"-flegacy-resource-reservation" });
+  OptimizerWhenSliceNThenOK(1, SampleProgram, L"ps_6_0", { L"-flegacy-resource-reservation" });
 }
 
 void OptimizerTest::OptimizerWhenSliceNThenOK(int optLevel) {
@@ -130,7 +130,7 @@ void OptimizerTest::OptimizerWhenSliceNThenOK(int optLevel) {
     "  if (b) user = g_Tex.Sample(g_Sampler, pos.xy);\r\n"
     "  return user * pos;\r\n"
     "}";
-  OptimizerWhenSliceNThenOK(optLevel, SampleProgram, L"ps_6_5");
+  OptimizerWhenSliceNThenOK(optLevel, SampleProgram, L"ps_6_0");
 }
 static bool IsPassMarkerFunction(LPCWSTR pName) {
   return 0 == _wcsicmp(pName, L"-opt-fn-passes");

+ 38 - 2
tools/clang/unittests/HLSL/SystemValueTest.cpp

@@ -276,6 +276,10 @@ TEST_F(SystemValueTest, VerifyNotAvailableFail) {
 TEST_F(SystemValueTest, VerifySVAsArbitrary) {
   WEX::TestExecution::SetVerifyOutput verifySettings(WEX::TestExecution::VerifyOutputSettings::LogOnlyFailures);
   for (DXIL::SigPointKind sp = (DXIL::SigPointKind)0; sp < DXIL::SigPointKind::Invalid; sp = (DXIL::SigPointKind)((unsigned)sp + 1)) {
+    if (sp >= DXIL::SigPointKind::MSIn && sp <= DXIL::SigPointKind::ASIn) {
+      // TODO: add tests for mesh/amplification shaders to system-values.hlsl
+      continue;
+    }
     for (DXIL::SemanticKind sv = (DXIL::SemanticKind)((unsigned)DXIL::SemanticKind::Arbitrary + 1); sv < DXIL::SemanticKind::Invalid; sv = (DXIL::SemanticKind)((unsigned)sv + 1)) {
       DXIL::SemanticInterpretationKind interpretation = hlsl::SigPoint::GetInterpretation(sv, sp, m_HighestMajor, m_HighestMinor);
       if (interpretation == DXIL::SemanticInterpretationKind::Arb) {
@@ -294,11 +298,15 @@ TEST_F(SystemValueTest, VerifySVAsArbitrary) {
 TEST_F(SystemValueTest, VerifySVAsSV) {
   WEX::TestExecution::SetVerifyOutput verifySettings(WEX::TestExecution::VerifyOutputSettings::LogOnlyFailures);
   for (DXIL::SigPointKind sp = (DXIL::SigPointKind)0; sp < DXIL::SigPointKind::Invalid; sp = (DXIL::SigPointKind)((unsigned)sp + 1)) {
+    if (sp >= DXIL::SigPointKind::MSIn && sp <= DXIL::SigPointKind::ASIn) {
+      // TODO: add tests for mesh/amplification shaders to system-values.hlsl
+      continue;
+    }
     for (DXIL::SemanticKind sv = (DXIL::SemanticKind)((unsigned)DXIL::SemanticKind::Arbitrary + 1); sv < DXIL::SemanticKind::Invalid; sv = (DXIL::SemanticKind)((unsigned)sv + 1)) {
       DXIL::SemanticInterpretationKind interpretation = hlsl::SigPoint::GetInterpretation(sv, sp, m_HighestMajor, m_HighestMinor);
       if (interpretation == DXIL::SemanticInterpretationKind::SV || interpretation == DXIL::SemanticInterpretationKind::SGV) {
         CComPtr<IDxcOperationResult> pResult;
-        CompileHLSLTemplate(pResult, sp, sv, false, 6, 5);
+        CompileHLSLTemplate(pResult, sp, sv, false);
         HRESULT result;
         VERIFY_SUCCEEDED(pResult->GetStatus(&result));
         VERIFY_SUCCEEDED(result);
@@ -312,11 +320,15 @@ TEST_F(SystemValueTest, VerifySVAsSV) {
 TEST_F(SystemValueTest, VerifySGV) {
   WEX::TestExecution::SetVerifyOutput verifySettings(WEX::TestExecution::VerifyOutputSettings::LogOnlyFailures);
   for (DXIL::SigPointKind sp = (DXIL::SigPointKind)0; sp < DXIL::SigPointKind::Invalid; sp = (DXIL::SigPointKind)((unsigned)sp + 1)) {
+    if (sp >= DXIL::SigPointKind::MSIn && sp <= DXIL::SigPointKind::ASIn) {
+      // TODO: add tests for mesh/amplification shaders to system-values.hlsl
+      continue;
+    }
     for (DXIL::SemanticKind sv = (DXIL::SemanticKind)((unsigned)DXIL::SemanticKind::Arbitrary + 1); sv < DXIL::SemanticKind::Invalid; sv = (DXIL::SemanticKind)((unsigned)sv + 1)) {
       DXIL::SemanticInterpretationKind interpretation = hlsl::SigPoint::GetInterpretation(sv, sp, m_HighestMajor, m_HighestMinor);
       if (interpretation == DXIL::SemanticInterpretationKind::SGV) {
         CComPtr<IDxcOperationResult> pResult;
-        CompileHLSLTemplate(pResult, sp, sv, true, 6, 5);
+        CompileHLSLTemplate(pResult, sp, sv, true);
         HRESULT result;
         VERIFY_SUCCEEDED(pResult->GetStatus(&result));
         VERIFY_SUCCEEDED(result);
@@ -331,6 +343,10 @@ TEST_F(SystemValueTest, VerifySGV) {
 TEST_F(SystemValueTest, VerifySVNotPacked) {
   WEX::TestExecution::SetVerifyOutput verifySettings(WEX::TestExecution::VerifyOutputSettings::LogOnlyFailures);
   for (DXIL::SigPointKind sp = (DXIL::SigPointKind)0; sp < DXIL::SigPointKind::Invalid; sp = (DXIL::SigPointKind)((unsigned)sp + 1)) {
+    if (sp >= DXIL::SigPointKind::MSIn && sp <= DXIL::SigPointKind::ASIn) {
+      // TODO: add tests for mesh/amplification shaders to system-values.hlsl
+      continue;
+    }
     for (DXIL::SemanticKind sv = (DXIL::SemanticKind)((unsigned)DXIL::SemanticKind::Arbitrary + 1); sv < DXIL::SemanticKind::Invalid; sv = (DXIL::SemanticKind)((unsigned)sv + 1)) {
       DXIL::SemanticInterpretationKind interpretation = hlsl::SigPoint::GetInterpretation(sv, sp, m_HighestMajor, m_HighestMinor);
       if (interpretation == DXIL::SemanticInterpretationKind::NotPacked) {
@@ -349,6 +365,10 @@ TEST_F(SystemValueTest, VerifySVNotPacked) {
 TEST_F(SystemValueTest, VerifySVNotInSig) {
   WEX::TestExecution::SetVerifyOutput verifySettings(WEX::TestExecution::VerifyOutputSettings::LogOnlyFailures);
   for (DXIL::SigPointKind sp = (DXIL::SigPointKind)0; sp < DXIL::SigPointKind::Invalid; sp = (DXIL::SigPointKind)((unsigned)sp + 1)) {
+    if (sp >= DXIL::SigPointKind::MSIn && sp <= DXIL::SigPointKind::ASIn) {
+      // TODO: add tests for mesh/amplification shaders to system-values.hlsl
+      continue;
+    }
     for (DXIL::SemanticKind sv = (DXIL::SemanticKind)((unsigned)DXIL::SemanticKind::Arbitrary + 1); sv < DXIL::SemanticKind::Invalid; sv = (DXIL::SemanticKind)((unsigned)sv + 1)) {
       DXIL::SemanticInterpretationKind interpretation = hlsl::SigPoint::GetInterpretation(sv, sp, m_HighestMajor, m_HighestMinor);
       if (interpretation == DXIL::SemanticInterpretationKind::NotInSig) {
@@ -369,6 +389,10 @@ TEST_F(SystemValueTest, VerifyVertexPacking) {
   VERIFY_IS_TRUE("Not Implemented");
 
   for (DXIL::SigPointKind sp = (DXIL::SigPointKind)0; sp < DXIL::SigPointKind::Invalid; sp = (DXIL::SigPointKind)((unsigned)sp + 1)) {
+    if (sp >= DXIL::SigPointKind::MSIn && sp <= DXIL::SigPointKind::ASIn) {
+      // TODO: add tests for mesh/amplification shaders to system-values.hlsl
+      continue;
+    }
     DXIL::PackingKind pk = SigPoint::GetSigPoint(sp)->GetPackingKind();
     if (pk == DXIL::PackingKind::Vertex) {
       // TBD: Test constraints here, or add constraints to validator and just generate cases to pack here, expecting success?
@@ -381,6 +405,10 @@ TEST_F(SystemValueTest, VerifyPatchConstantPacking) {
   VERIFY_IS_TRUE("Not Implemented");
 
   for (DXIL::SigPointKind sp = (DXIL::SigPointKind)0; sp < DXIL::SigPointKind::Invalid; sp = (DXIL::SigPointKind)((unsigned)sp + 1)) {
+    if (sp >= DXIL::SigPointKind::MSIn && sp <= DXIL::SigPointKind::ASIn) {
+      // TODO: add tests for mesh/amplification shaders to system-values.hlsl
+      continue;
+    }
     DXIL::PackingKind pk = SigPoint::GetSigPoint(sp)->GetPackingKind();
     if (pk == DXIL::PackingKind::PatchConstant) {
       // TBD: Test constraints here, or add constraints to validator and just generate cases to pack here, expecting success?
@@ -393,6 +421,10 @@ TEST_F(SystemValueTest, VerifyTargetPacking) {
   VERIFY_IS_TRUE("Not Implemented");
 
   for (DXIL::SigPointKind sp = (DXIL::SigPointKind)0; sp < DXIL::SigPointKind::Invalid; sp = (DXIL::SigPointKind)((unsigned)sp + 1)) {
+    if (sp >= DXIL::SigPointKind::MSIn && sp <= DXIL::SigPointKind::ASIn) {
+      // TODO: add tests for mesh/amplification shaders to system-values.hlsl
+      continue;
+    }
     DXIL::PackingKind pk = SigPoint::GetSigPoint(sp)->GetPackingKind();
     if (pk == DXIL::PackingKind::Target) {
       // TBD: Test constraints here, or add constraints to validator and just generate cases to pack here, expecting success?
@@ -409,6 +441,10 @@ TEST_F(SystemValueTest, VerifyTessFactors) {
 TEST_F(SystemValueTest, VerifyShadowEntries) {
   WEX::TestExecution::SetVerifyOutput verifySettings(WEX::TestExecution::VerifyOutputSettings::LogOnlyFailures);
   for (DXIL::SigPointKind sp = (DXIL::SigPointKind)0; sp < DXIL::SigPointKind::Invalid; sp = (DXIL::SigPointKind)((unsigned)sp + 1)) {
+    if (sp >= DXIL::SigPointKind::MSIn && sp <= DXIL::SigPointKind::ASIn) {
+      // TODO: add tests for mesh/amplification shaders to system-values.hlsl
+      continue;
+    }
     for (DXIL::SemanticKind sv = (DXIL::SemanticKind)((unsigned)DXIL::SemanticKind::Arbitrary + 1); sv < DXIL::SemanticKind::Invalid; sv = (DXIL::SemanticKind)((unsigned)sv + 1)) {
       DXIL::SemanticInterpretationKind interpretation = hlsl::SigPoint::GetInterpretation(sv, sp, m_HighestMajor, m_HighestMinor);
       if (interpretation == DXIL::SemanticInterpretationKind::Shadow) {

+ 2 - 2
tools/clang/unittests/HLSL/ValidationTest.cpp

@@ -2062,7 +2062,7 @@ float4 main( \
   return col; \
 } \
     ",
-    "ps_6_5",
+    "ps_6_0",
 
     "= !{i32 1, !\"Value\", i8 5, i8 0, !([0-9]+), i8 1, i32 1, i8 2, i32 1, i8 0, null}\n"
     "!([0-9]+) = !{i32 2, !\"SV_PrimitiveID\", i8 5, i8 10, !([0-9]+), i8 1, i32 1, i8 1, i32 1, i8 2, null}\n"
@@ -2089,7 +2089,7 @@ float4 main( \
   return col; \
 } \
     ",
-    "ps_6_5",
+    "ps_6_0",
 
     { "= !{i32 1, !\"Value\", i8 5, i8 0, !([0-9]+), i8 1, i32 1, i8 1, i32 1, i8 0, null}\n"
       "!([0-9]+) = !{i32 2, !\"SV_PrimitiveID\", i8 5, i8 10, !([0-9]+), i8 1, i32 1, i8 1, i32 1, i8 1, null}\n"

+ 14 - 14
utils/hct/hctdb.py

@@ -2200,17 +2200,17 @@ class db_dxil(object):
         # The following has SampleIndex, Coverage, and InnerCoverage as loaded with instructions rather than from the signature
         SemanticInterpretationCSV = """
             Semantic,VSIn,VSOut,PCIn,HSIn,HSCPIn,HSCPOut,PCOut,DSIn,DSCPIn,DSOut,GSVIn,GSIn,GSOut,PSIn,PSOut,CSIn,MSIn,MSOut,MSPOut,ASIn
-            Arbitrary,Arb,Arb,NA,NA,Arb,Arb,Arb,Arb,Arb,Arb,Arb,NA,Arb,Arb,NA,NA,NA,Arb _65,Arb _65,NA
+            Arbitrary,Arb,Arb,NA,NA,Arb,Arb,Arb,Arb,Arb,Arb,Arb,NA,Arb,Arb,NA,NA,NA,Arb,Arb,NA
             VertexID,SV,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
             InstanceID,SV,Arb,NA,NA,Arb,Arb,NA,NA,Arb,Arb,Arb,NA,Arb,Arb,NA,NA,NA,NA,NA,NA
-            Position,Arb,SV,NA,NA,SV,SV,Arb,Arb,SV,SV,SV,NA,SV,SV,NA,NA,NA,SV _65,NA,NA
-            RenderTargetArrayIndex,Arb,SV,NA,NA,SV,SV,Arb,Arb,SV,SV,SV,NA,SV,SV,NA,NA,NA,NA,SV _65,NA
-            ViewPortArrayIndex,Arb,SV,NA,NA,SV,SV,Arb,Arb,SV,SV,SV,NA,SV,SV,NA,NA,NA,NA,SV _65,NA
-            ClipDistance,Arb,ClipCull,NA,NA,ClipCull,ClipCull,Arb,Arb,ClipCull,ClipCull,ClipCull,NA,ClipCull,ClipCull,NA,NA,NA,ClipCull _65,NA,NA
-            CullDistance,Arb,ClipCull,NA,NA,ClipCull,ClipCull,Arb,Arb,ClipCull,ClipCull,ClipCull,NA,ClipCull,ClipCull,NA,NA,NA,ClipCull _65,NA,NA
+            Position,Arb,SV,NA,NA,SV,SV,Arb,Arb,SV,SV,SV,NA,SV,SV,NA,NA,NA,SV,NA,NA
+            RenderTargetArrayIndex,Arb,SV,NA,NA,SV,SV,Arb,Arb,SV,SV,SV,NA,SV,SV,NA,NA,NA,NA,SV,NA
+            ViewPortArrayIndex,Arb,SV,NA,NA,SV,SV,Arb,Arb,SV,SV,SV,NA,SV,SV,NA,NA,NA,NA,SV,NA
+            ClipDistance,Arb,ClipCull,NA,NA,ClipCull,ClipCull,Arb,Arb,ClipCull,ClipCull,ClipCull,NA,ClipCull,ClipCull,NA,NA,NA,ClipCull,NA,NA
+            CullDistance,Arb,ClipCull,NA,NA,ClipCull,ClipCull,Arb,Arb,ClipCull,ClipCull,ClipCull,NA,ClipCull,ClipCull,NA,NA,NA,ClipCull,NA,NA
             OutputControlPointID,NA,NA,NA,NotInSig,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
             DomainLocation,NA,NA,NA,NA,NA,NA,NA,NotInSig,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
-            PrimitiveID,NA,NA,NotInSig,NotInSig,NA,NA,NA,NotInSig,NA,NA,NA,Shadow,SGV,SGV,NA,NA,NA,NA,SV _65,NA
+            PrimitiveID,NA,NA,NotInSig,NotInSig,NA,NA,NA,NotInSig,NA,NA,NA,Shadow,SGV,SGV,NA,NA,NA,NA,SV,NA
             GSInstanceID,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotInSig,NA,NA,NA,NA,NA,NA,NA,NA
             SampleIndex,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,Shadow _41,NA,NA,NA,NA,NA,NA
             IsFrontFace,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,SGV,SGV,NA,NA,NA,NA,NA,NA
@@ -2221,16 +2221,16 @@ class db_dxil(object):
             DepthLessEqual,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotPacked _50,NA,NA,NA,NA,NA
             DepthGreaterEqual,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotPacked _50,NA,NA,NA,NA,NA
             StencilRef,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotPacked _50,NA,NA,NA,NA,NA
-            DispatchThreadID,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotInSig,NotInSig _65,NA,NA,NotInSig _65
-            GroupID,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotInSig,NotInSig _65,NA,NA,NotInSig _65
-            GroupIndex,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotInSig,NotInSig _65,NA,NA,NotInSig _65
-            GroupThreadID,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotInSig,NotInSig _65,NA,NA,NotInSig _65
+            DispatchThreadID,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotInSig,NotInSig,NA,NA,NotInSig
+            GroupID,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotInSig,NotInSig,NA,NA,NotInSig
+            GroupIndex,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotInSig,NotInSig,NA,NA,NotInSig
+            GroupThreadID,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotInSig,NotInSig,NA,NA,NotInSig
             TessFactor,NA,NA,NA,NA,NA,NA,TessFactor,TessFactor,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
             InsideTessFactor,NA,NA,NA,NA,NA,NA,TessFactor,TessFactor,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
-            ViewID,NotInSig _61,NA,NotInSig _61,NotInSig _61,NA,NA,NA,NotInSig _61,NA,NA,NA,NotInSig _61,NA,NotInSig _61,NA,NA,NotInSig _65,NA,NA,NA
+            ViewID,NotInSig _61,NA,NotInSig _61,NotInSig _61,NA,NA,NA,NotInSig _61,NA,NA,NA,NotInSig _61,NA,NotInSig _61,NA,NA,NotInSig,NA,NA,NA
             Barycentrics,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotPacked _61,NA,NA,NA,NA,NA,NA
-            ShadingRate,NA,SV _64,NA,NA,SV _64,SV _64,NA,NA,SV _64,SV _64,SV _64,NA,SV _64,SV _64,NA,NA,NA,NA,NA,NA
-            CullPrimitive,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotPacked _65,NA
+            ShadingRate,NA,SV _64,NA,NA,SV _64,SV _64,NA,NA,SV _64,SV _64,SV _64,NA,SV _64,SV _64,NA,NA,NA,NA,SV,NA
+            CullPrimitive,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NotPacked,NA
         """
         table = [list(map(str.strip, line.split(','))) for line in SemanticInterpretationCSV.splitlines() if line.strip()]
         for row in table[1:]: assert(len(row) == len(table[0])) # Ensure table is rectangular