Просмотр исходного кода

Move PIX options out of DxilGenerationPass.*, use option string properly, reduce header usage (#1022)

* Clean up option usage, includes, and move PIX passes to their own header

* move utils to header

* use radix, pass proper default
Jeff Noyle 7 лет назад
Родитель
Сommit
004c681a97

+ 0 - 14
include/dxc/HLSL/DxilGenerationPass.h

@@ -62,13 +62,6 @@ ModulePass *createDxilLegalizeStaticResourceUsePass();
 ModulePass *createDxilLegalizeEvalOperationsPass();
 ModulePass *createDxilLegalizeEvalOperationsPass();
 FunctionPass *createDxilLegalizeSampleOffsetPass();
 FunctionPass *createDxilLegalizeSampleOffsetPass();
 FunctionPass *createSimplifyInstPass();
 FunctionPass *createSimplifyInstPass();
-ModulePass *createDxilAddPixelHitInstrumentationPass();
-ModulePass *createDxilOutputColorBecomesConstantPass();
-ModulePass *createDxilRemoveDiscardsPass();
-ModulePass *createDxilReduceMSAAToSingleSamplePass();
-ModulePass *createDxilForceEarlyZPass();
-ModulePass *createDxilDebugInstrumentationPass();
-ModulePass *createDxilShaderAccessTrackingPass();
 ModulePass *createDxilTranslateRawBuffer();
 ModulePass *createDxilTranslateRawBuffer();
 ModulePass *createNoPausePassesPass();
 ModulePass *createNoPausePassesPass();
 ModulePass *createPausePassesPass();
 ModulePass *createPausePassesPass();
@@ -93,14 +86,7 @@ void initializeDxilLegalizeStaticResourceUsePassPass(llvm::PassRegistry&);
 void initializeDxilLegalizeEvalOperationsPass(llvm::PassRegistry&);
 void initializeDxilLegalizeEvalOperationsPass(llvm::PassRegistry&);
 void initializeDxilLegalizeSampleOffsetPassPass(llvm::PassRegistry&);
 void initializeDxilLegalizeSampleOffsetPassPass(llvm::PassRegistry&);
 void initializeSimplifyInstPass(llvm::PassRegistry&);
 void initializeSimplifyInstPass(llvm::PassRegistry&);
-void initializeDxilAddPixelHitInstrumentationPass(llvm::PassRegistry&);
-void initializeDxilOutputColorBecomesConstantPass(llvm::PassRegistry&);
-void initializeDxilRemoveDiscardsPass(llvm::PassRegistry&);
 void initializeDxilTranslateRawBufferPass(llvm::PassRegistry&);
 void initializeDxilTranslateRawBufferPass(llvm::PassRegistry&);
-void initializeDxilReduceMSAAToSingleSamplePass(llvm::PassRegistry&);
-void initializeDxilForceEarlyZPass(llvm::PassRegistry&);
-void initializeDxilDebugInstrumentationPass(llvm::PassRegistry&);
-void initializeDxilShaderAccessTrackingPass(llvm::PassRegistry&);
 void initializeNoPausePassesPass(llvm::PassRegistry&);
 void initializeNoPausePassesPass(llvm::PassRegistry&);
 void initializePausePassesPass(llvm::PassRegistry&);
 void initializePausePassesPass(llvm::PassRegistry&);
 void initializeResumePassesPass(llvm::PassRegistry&);
 void initializeResumePassesPass(llvm::PassRegistry&);

+ 32 - 0
include/dxc/HLSL/DxilPIXPasses.h

@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// DxilPixPasses.h                                                           //
+// Copyright (C) Microsoft Corporation. All rights reserved.                 //
+// This file is distributed under the University of Illinois Open Source     //
+// License. See LICENSE.TXT for details.                                     //
+//                                                                           //
+// This file provides a DXIL passes to support PIX.                          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+namespace llvm {
+
+ModulePass *createDxilAddPixelHitInstrumentationPass();
+ModulePass *createDxilOutputColorBecomesConstantPass();
+ModulePass *createDxilRemoveDiscardsPass();
+ModulePass *createDxilReduceMSAAToSingleSamplePass();
+ModulePass *createDxilForceEarlyZPass();
+ModulePass *createDxilDebugInstrumentationPass();
+ModulePass *createDxilShaderAccessTrackingPass();
+
+void initializeDxilAddPixelHitInstrumentationPass(llvm::PassRegistry&);
+void initializeDxilOutputColorBecomesConstantPass(llvm::PassRegistry&);
+void initializeDxilRemoveDiscardsPass(llvm::PassRegistry&);
+void initializeDxilReduceMSAAToSingleSamplePass(llvm::PassRegistry&);
+void initializeDxilForceEarlyZPass(llvm::PassRegistry&);
+void initializeDxilDebugInstrumentationPass(llvm::PassRegistry&);
+void initializeDxilShaderAccessTrackingPass(llvm::PassRegistry&);
+
+}

+ 2 - 0
include/llvm/Pass.h

@@ -103,6 +103,8 @@ bool GetPassOptionBool(PassOptions &O, llvm::StringRef name, bool *pValue, bool
 bool GetPassOptionUnsigned(PassOptions &O, llvm::StringRef name, unsigned *pValue, unsigned defaultValue);
 bool GetPassOptionUnsigned(PassOptions &O, llvm::StringRef name, unsigned *pValue, unsigned defaultValue);
 bool GetPassOptionInt(PassOptions &O, llvm::StringRef name, int *pValue, int defaultValue);
 bool GetPassOptionInt(PassOptions &O, llvm::StringRef name, int *pValue, int defaultValue);
 bool GetPassOptionUInt32(PassOptions &O, llvm::StringRef name, uint32_t *pValue, uint32_t defaultValue);
 bool GetPassOptionUInt32(PassOptions &O, llvm::StringRef name, uint32_t *pValue, uint32_t defaultValue);
+bool GetPassOptionUInt64(PassOptions &O, llvm::StringRef name, uint64_t *pValue, uint64_t defaultValue);
+bool GetPassOptionFloat(PassOptions &O, llvm::StringRef name, float *pValue, float defaultValue);
 // HLSL Change Ends
 // HLSL Change Ends
 
 
 //===----------------------------------------------------------------------===//
 //===----------------------------------------------------------------------===//

+ 1 - 0
lib/HLSL/DxcOptimizer.cpp

@@ -16,6 +16,7 @@
 #include "dxc/HLSL/DxilContainer.h"
 #include "dxc/HLSL/DxilContainer.h"
 #include "dxc/Support/FileIOHelper.h"
 #include "dxc/Support/FileIOHelper.h"
 #include "dxc/HLSL/DxilModule.h"
 #include "dxc/HLSL/DxilModule.h"
+#include "dxc/HLSL/DxilPIXPasses.h"
 #include "dxc/HLSL/ReducibilityAnalysis.h"
 #include "dxc/HLSL/ReducibilityAnalysis.h"
 #include "dxc/HLSL/HLMatrixLowerPass.h"
 #include "dxc/HLSL/HLMatrixLowerPass.h"
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilGenerationPass.h"

+ 7 - 38
lib/HLSL/DxilAddPixelHitInstrumentation.cpp

@@ -12,25 +12,12 @@
 
 
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilOperations.h"
 #include "dxc/HLSL/DxilOperations.h"
-#include "dxc/HLSL/DxilSignatureElement.h"
-#include "dxc/HLSL/DxilModule.h"
-#include "dxc/Support/Global.h"
-#include "dxc/HLSL/DxilTypeSystem.h"
-#include "dxc/HLSL/DxilConstants.h"
 #include "dxc/HLSL/DxilInstructions.h"
 #include "dxc/HLSL/DxilInstructions.h"
-#include "dxc/HLSL/DxilSpanAllocator.h"
+#include "dxc/HLSL/DxilModule.h"
+#include "dxc/HLSL/DxilPIXPasses.h"
 
 
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/IntrinsicInst.h"
-#include "llvm/IR/InstIterator.h"
-#include "llvm/IR/Module.h"
 #include "llvm/IR/PassManager.h"
 #include "llvm/IR/PassManager.h"
-#include "llvm/ADT/BitVector.h"
-#include "llvm/Pass.h"
 #include "llvm/Transforms/Utils/Local.h"
 #include "llvm/Transforms/Utils/Local.h"
-#include <memory>
-#include <unordered_set>
-#include <array>
 
 
 using namespace llvm;
 using namespace llvm;
 using namespace hlsl;
 using namespace hlsl;
@@ -53,29 +40,11 @@ public:
 
 
 void DxilAddPixelHitInstrumentation::applyOptions(PassOptions O)
 void DxilAddPixelHitInstrumentation::applyOptions(PassOptions O)
 {
 {
-  for (const auto & option : O)
-  {
-    if (0 == option.first.compare("force-early-z"))
-    {
-      ForceEarlyZ = atoi(option.second.data()) != 0;
-    }
-    else if (0 == option.first.compare("rt-width"))
-    {
-      RTWidth = atoi(option.second.data());
-    }
-    else if (0 == option.first.compare("num-pixels"))
-    {
-      NumPixels = atoi(option.second.data());
-    }
-    else if (0 == option.first.compare("add-pixel-cost"))
-    {
-      AddPixelCost = atoi(option.second.data()) != 0;
-    }
-    else if (0 == option.first.compare("sv-position-index"))
-    {
-      SVPositionIndex = atoi(option.second.data());
-    }
-  }
+  GetPassOptionBool(O, "force-early-z", &ForceEarlyZ, false);
+  GetPassOptionBool(O, "add-pixel-cost", &AddPixelCost, false);
+  GetPassOptionInt(O, "rt-width", &RTWidth, 0);
+  GetPassOptionInt(O, "num-pixels", &NumPixels, 0);
+  GetPassOptionInt(O, "sv-position-index", &SVPositionIndex, 0);
 }
 }
 
 
 bool DxilAddPixelHitInstrumentation::runOnModule(Module &M)
 bool DxilAddPixelHitInstrumentation::runOnModule(Module &M)

+ 6 - 15
lib/HLSL/DxilDebugInstrumentation.cpp

@@ -10,8 +10,9 @@
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
 
 
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilGenerationPass.h"
-#include "dxc/HLSL/DxilOperations.h"
 #include "dxc/HLSL/DxilModule.h"
 #include "dxc/HLSL/DxilModule.h"
+#include "dxc/HLSL/DxilOperations.h"
+#include "dxc/HLSL/DxilPIXPasses.h"
 
 
 #include "llvm/IR/Module.h"
 #include "llvm/IR/Module.h"
 #include "llvm/IR/Constants.h"
 #include "llvm/IR/Constants.h"
@@ -232,20 +233,10 @@ private:
 };
 };
 
 
 void DxilDebugInstrumentation::applyOptions(PassOptions O) {
 void DxilDebugInstrumentation::applyOptions(PassOptions O) {
-  for (const auto & option : O) {
-    if (0 == option.first.compare("parameter0")) {
-      m_Parameters.Parameters[0] = atoi(option.second.data());
-    }
-    else if (0 == option.first.compare("parameter1")) {
-      m_Parameters.Parameters[1] = atoi(option.second.data()); 
-    }
-    else if (0 == option.first.compare("parameter2")) {
-      m_Parameters.Parameters[2] = atoi(option.second.data());
-    }
-    else if (0 == option.first.compare("UAVSize")) {
-      m_UAVSize = std::stoull(option.second.data());
-    }
-  }
+  GetPassOptionUnsigned(O, "parameter0", &m_Parameters.Parameters[0], 0);
+  GetPassOptionUnsigned(O, "parameter1", &m_Parameters.Parameters[1], 0);
+  GetPassOptionUnsigned(O, "parameter2", &m_Parameters.Parameters[2], 0);
+  GetPassOptionUInt64(O, "UAVSize", &m_UAVSize, 1024 * 1024);
 }
 }
 
 
 uint32_t DxilDebugInstrumentation::UAVDumpingGroundOffset() {
 uint32_t DxilDebugInstrumentation::UAVDumpingGroundOffset() {

+ 1 - 0
lib/HLSL/DxilForceEarlyZ.cpp

@@ -11,6 +11,7 @@
 
 
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilModule.h"
 #include "dxc/HLSL/DxilModule.h"
+#include "dxc/HLSL/DxilPIXPasses.h"
 #include "llvm/IR/Module.h"
 #include "llvm/IR/Module.h"
 
 
 using namespace llvm;
 using namespace llvm;

+ 11 - 38
lib/HLSL/DxilOutputColorBecomesConstant.cpp

@@ -11,24 +11,13 @@
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
 
 
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilGenerationPass.h"
-#include "dxc/HLSL/DxilOperations.h"
-#include "dxc/HLSL/DxilSignatureElement.h"
 #include "dxc/HLSL/DxilModule.h"
 #include "dxc/HLSL/DxilModule.h"
-#include "dxc/Support/Global.h"
-#include "dxc/HLSL/DxilTypeSystem.h"
-#include "dxc/HLSL/DxilInstructions.h"
+#include "dxc/HLSL/DxilOperations.h"
+#include "dxc/HLSL/DxilPIXPasses.h"
 #include "dxc/HLSL/DxilSpanAllocator.h"
 #include "dxc/HLSL/DxilSpanAllocator.h"
 
 
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/IntrinsicInst.h"
-#include "llvm/IR/InstIterator.h"
-#include "llvm/IR/Module.h"
 #include "llvm/IR/PassManager.h"
 #include "llvm/IR/PassManager.h"
-#include "llvm/ADT/BitVector.h"
-#include "llvm/Pass.h"
 #include "llvm/Transforms/Utils/Local.h"
 #include "llvm/Transforms/Utils/Local.h"
-#include <memory>
-#include <unordered_set>
 #include <array>
 #include <array>
 
 
 using namespace llvm;
 using namespace llvm;
@@ -62,31 +51,15 @@ public:
   bool runOnModule(Module &M) override;
   bool runOnModule(Module &M) override;
 };
 };
 
 
-void DxilOutputColorBecomesConstant::applyOptions(PassOptions O)
-{
-  for (const auto & option : O)
-  {
-    if (0 == option.first.compare("constant-red"))
-    {
-      Red = atof(option.second.data());
-    }
-    else if (0 == option.first.compare("constant-green"))
-    {
-      Green = atof(option.second.data());
-    }
-    else if (0 == option.first.compare("constant-blue"))
-    {
-      Blue = atof(option.second.data());
-    }
-    else if (0 == option.first.compare("constant-alpha"))
-    {
-      Alpha = atof(option.second.data());
-    }
-    else if (0 == option.first.compare("mod-mode"))
-    {
-      Mode = static_cast<VisualizerInstrumentationMode>(atoi(option.second.data()));
-    }
-  }
+void DxilOutputColorBecomesConstant::applyOptions(PassOptions O) {
+  GetPassOptionFloat(O, "constant-red", &Red, 1.f);
+  GetPassOptionFloat(O, "constant-green", &Green, 1.f);
+  GetPassOptionFloat(O, "constant-blue", &Blue, 1.f);
+  GetPassOptionFloat(O, "constant-alpha", &Alpha, 1.f);
+
+  int mode = 0;
+  GetPassOptionInt(O, "mod-mode", &mode, 0);
+  Mode = static_cast<VisualizerInstrumentationMode>(mode);
 }
 }
 
 
 void DxilOutputColorBecomesConstant::visitOutputInstructionCallers(
 void DxilOutputColorBecomesConstant::visitOutputInstructionCallers(

+ 2 - 1
lib/HLSL/DxilReduceMSAAToSingleSample.cpp

@@ -11,8 +11,9 @@
 
 
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilOperations.h"
 #include "dxc/HLSL/DxilOperations.h"
-#include "dxc/HLSL/DxilModule.h"
 #include "dxc/HLSL/DxilInstructions.h"
 #include "dxc/HLSL/DxilInstructions.h"
+#include "dxc/HLSL/DxilModule.h"
+#include "dxc/HLSL/DxilPIXPasses.h"
 
 
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/PassManager.h"
 #include "llvm/IR/PassManager.h"

+ 2 - 1
lib/HLSL/DxilRemoveDiscards.cpp

@@ -10,8 +10,9 @@
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
 
 
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilGenerationPass.h"
-#include "dxc/HLSL/DxilOperations.h"
 #include "dxc/HLSL/DxilModule.h"
 #include "dxc/HLSL/DxilModule.h"
+#include "dxc/HLSL/DxilOperations.h"
+#include "dxc/HLSL/DxilPIXPasses.h"
 
 
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/PassManager.h"
 #include "llvm/IR/PassManager.h"

+ 2 - 13
lib/HLSL/DxilShaderAccessTracking.cpp

@@ -12,25 +12,14 @@
 
 
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilGenerationPass.h"
 #include "dxc/HLSL/DxilOperations.h"
 #include "dxc/HLSL/DxilOperations.h"
-#include "dxc/HLSL/DxilSignatureElement.h"
-#include "dxc/HLSL/DxilModule.h"
-#include "dxc/Support/Global.h"
-#include "dxc/HLSL/DxilTypeSystem.h"
-#include "dxc/HLSL/DxilConstants.h"
 #include "dxc/HLSL/DxilInstructions.h"
 #include "dxc/HLSL/DxilInstructions.h"
+#include "dxc/HLSL/DxilModule.h"
+#include "dxc/HLSL/DxilPIXPasses.h"
 #include "dxc/HLSL/DxilSpanAllocator.h"
 #include "dxc/HLSL/DxilSpanAllocator.h"
 
 
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/IntrinsicInst.h"
-#include "llvm/IR/InstIterator.h"
-#include "llvm/IR/Module.h"
 #include "llvm/IR/PassManager.h"
 #include "llvm/IR/PassManager.h"
-#include "llvm/ADT/BitVector.h"
-#include "llvm/Pass.h"
 #include "llvm/Support/FormattedStream.h"
 #include "llvm/Support/FormattedStream.h"
 #include "llvm/Transforms/Utils/Local.h"
 #include "llvm/Transforms/Utils/Local.h"
-#include <memory>
-#include <map>
 #include <deque>
 #include <deque>
 
 
 #include <winerror.h>
 #include <winerror.h>

+ 20 - 0
lib/IR/Pass.cpp

@@ -353,5 +353,25 @@ bool llvm::GetPassOptionUInt32(PassOptions &O, llvm::StringRef name, uint32_t *p
   *pValue = defaultValue;
   *pValue = defaultValue;
   return false;
   return false;
 }
 }
+bool llvm::GetPassOptionUInt64(PassOptions &O, llvm::StringRef name, uint64_t *pValue, uint64_t defaultValue) {
+  StringRef val;
+  if (GetPassOption(O, name, &val)) {
+    val.getAsInteger<uint64_t>(0, *pValue);
+    return true;
+  }
+  *pValue = defaultValue;
+  return false;
+}
+bool llvm::GetPassOptionFloat(PassOptions &O, llvm::StringRef name, float *pValue, float defaultValue) {
+  StringRef val;
+  if (GetPassOption(O, name, &val)) {
+    std::string str;
+    str.assign(val.begin(), val.end());
+    *pValue = atof(str.c_str());
+    return true;
+  }
+  *pValue = defaultValue;
+  return false;
+}
 
 
 // HLSL Changes End
 // HLSL Changes End