2017-07-27 23:34:54 +03:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// //
|
|
|
|
// 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 //
|
|
|
|
// //
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2018-10-16 10:28:35 +03:00
|
|
|
#include "dxc/DXIL/DxilModule.h"
|
2018-10-17 07:38:33 +03:00
|
|
|
#include "dxc/DxilPIXPasses/DxilPIXPasses.h"
|
2019-12-02 22:22:54 +03:00
|
|
|
#include "dxc/HLSL/DxilGenerationPass.h"
|
2017-07-27 23:34:54 +03:00
|
|
|
#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) {}
|
|
|
|
const char *getPassName() const override { return "DXIL Force Early Z"; }
|
|
|
|
bool runOnModule(Module &M) override;
|
|
|
|
};
|
|
|
|
|
2019-12-02 22:22:54 +03:00
|
|
|
bool DxilForceEarlyZ::runOnModule(Module &M) {
|
2017-07-27 23:34:54 +03:00
|
|
|
// 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;
|
|
|
|
|
2019-12-02 22:22:54 +03:00
|
|
|
ModulePass *llvm::createDxilForceEarlyZPass() { return new DxilForceEarlyZ(); }
|
2017-07-27 23:34:54 +03:00
|
|
|
|
2019-12-02 22:22:54 +03:00
|
|
|
INITIALIZE_PASS(
|
|
|
|
DxilForceEarlyZ, "hlsl-dxil-force-early-z",
|
|
|
|
"HLSL DXIL Force the early Z global flag, if shader has no discard calls",
|
|
|
|
false, false)
|