瀏覽代碼

Don't override valver in DxcAssembler if metadata already present. (#2784)

Tex Riddell 5 年之前
父節點
當前提交
2cf1763884
共有 2 個文件被更改,包括 5 次插入2 次删除
  1. 2 1
      tools/clang/tools/dxcompiler/dxcassembler.cpp
  2. 3 1
      tools/clang/unittests/HLSL/OptimizerTest.cpp

+ 2 - 1
tools/clang/tools/dxcompiler/dxcassembler.cpp

@@ -124,7 +124,8 @@ HRESULT STDMETHODCALLTYPE DxcAssembler::AssembleToContainer(
     try {
       DxilModule &program = M->GetOrCreateDxilModule();
 
-      {
+      // Only set validator version metadata if none present.
+      if (nullptr == M->getNamedMetadata(DxilMDHelper::kDxilValidatorVersionMDName)) {
         UINT32 majorVer, minorVer;
         dxcutil::GetValidatorVersion(&majorVer, &minorVer);
         if (program.UpgradeValidatorVersion(majorVer, minorVer)) {

+ 3 - 1
tools/clang/unittests/HLSL/OptimizerTest.cpp

@@ -130,7 +130,9 @@ 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_0");
+  OptimizerWhenSliceNThenOK(optLevel, SampleProgram, L"ps_6_0",
+    // Add -validator-version 1.4 to ensure it's not changed by DxcAssembler.
+    {L"-validator-version", L"1.4"});
 }
 static bool IsPassMarkerFunction(LPCWSTR pName) {
   return 0 == _wcsicmp(pName, L"-opt-fn-passes");