/////////////////////////////////////////////////////////////////////////////// // // // DxilOutputColorBecomesConstant.cpp // // Copyright (C) Microsoft Corporation. All rights reserved. // // This file is distributed under the University of Illinois Open Source // // License. See LICENSE.TXT for details. // // // // Provides a pass to turn on the early-z flag // // // /////////////////////////////////////////////////////////////////////////////// #include "dxc/DXIL/DxilModule.h" #include "dxc/DxilPIXPasses/DxilPIXPasses.h" #include "dxc/HLSL/DxilGenerationPass.h" #include "llvm/IR/Module.h" using namespace llvm; using namespace hlsl; class DxilForceEarlyZ : public ModulePass { public: static char ID; // Pass identification, replacement for typeid explicit DxilForceEarlyZ() : ModulePass(ID) {} StringRef getPassName() const override { return "DXIL Force Early Z"; } bool runOnModule(Module &M) override; }; bool DxilForceEarlyZ::runOnModule(Module &M) { // This pass adds the force-early-z flag DxilModule &DM = M.GetOrCreateDxilModule(); DM.m_ShaderFlags.SetForceEarlyDepthStencil(true); DM.ReEmitDxilResources(); return true; } char DxilForceEarlyZ::ID = 0; ModulePass *llvm::createDxilForceEarlyZPass() { return new DxilForceEarlyZ(); } INITIALIZE_PASS( DxilForceEarlyZ, "hlsl-dxil-force-early-z", "HLSL DXIL Force the early Z global flag, if shader has no discard calls", false, false)