DirectXShaderCompiler/lib/DxilPIXPasses/DxilForceEarlyZ.cpp

49 строки
1.7 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// //
// 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)