Files
UnrealEngineUWP/Engine/Shaders/PixelShaderOutputCommon.usf
Ben Marsh 20bf0eb6a1 Updating copyright notices to 2017 (copying from //Tasks/UE4/Dev-Copyright-2017).
#rb none
#lockdown Nick.Penwarden

[CL 3226823 by Ben Marsh in Main branch]
2016-12-08 08:52:44 -05:00

167 lines
4.1 KiB
Plaintext

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
/*=============================================================================
PixelShaderOutputCommon.usf: To allow PS input/output passed int functions through a single struct, allowing for a more readable code (less #ifdefs, reducing the boolean hell)
=============================================================================*/
#ifndef PIXELSHADEROUTPUT_INTERPOLANTS
#define PIXELSHADEROUTPUT_INTERPOLANTS 0
#endif
#ifndef PIXELSHADEROUTPUT_BASEPASS
#define PIXELSHADEROUTPUT_BASEPASS 0
#endif
#ifndef PIXELSHADEROUTPUT_MRT0
#define PIXELSHADEROUTPUT_MRT0 0
#endif
#ifndef PIXELSHADEROUTPUT_MRT1
#define PIXELSHADEROUTPUT_MRT1 0
#endif
#ifndef PIXELSHADEROUTPUT_MRT2
#define PIXELSHADEROUTPUT_MRT2 0
#endif
#ifndef PIXELSHADEROUTPUT_MRT3
#define PIXELSHADEROUTPUT_MRT3 0
#endif
#ifndef PIXELSHADEROUTPUT_MRT4
#define PIXELSHADEROUTPUT_MRT4 0
#endif
#ifndef PIXELSHADEROUTPUT_MRT5
#define PIXELSHADEROUTPUT_MRT5 0
#endif
#ifndef PIXELSHADEROUTPUT_MRT6
#define PIXELSHADEROUTPUT_MRT6 0
#endif
#ifndef PIXELSHADEROUTPUT_MRT7
#define PIXELSHADEROUTPUT_MRT7 0
#endif
#ifndef PIXELSHADEROUTPUT_COVERAGE
#define PIXELSHADEROUTPUT_COVERAGE 0
#endif
#ifndef PIXELSHADEROUTPUT_A2C
#define PIXELSHADEROUTPUT_A2C 0
#endif
// ---------------------------------------------------------------------------------
void MainPS
(
#if PIXELSHADEROUTPUT_INTERPOLANTS || PIXELSHADEROUTPUT_BASEPASS
FVertexFactoryInterpolantsVSToPS Interpolants,
#endif
#if PIXELSHADEROUTPUT_BASEPASS
FBasePassInterpolantsVSToPS BasePassInterpolants,
#endif
in INPUT_POSITION_QUALIFIERS float4 SvPosition : SV_Position // after all interpolators
OPTIONAL_IsFrontFace
#if PIXELSHADEROUTPUT_MRT0
, out float4 OutTarget0 : SV_Target0
#endif
#if PIXELSHADEROUTPUT_MRT1
, out float4 OutTarget1 : SV_Target1
#endif
#if PIXELSHADEROUTPUT_MRT2
, out float4 OutTarget2 : SV_Target2
#endif
#if PIXELSHADEROUTPUT_MRT3
, out float4 OutTarget3 : SV_Target3
#endif
#if PIXELSHADEROUTPUT_MRT4
, out float4 OutTarget4 : SV_Target4
#endif
#if PIXELSHADEROUTPUT_MRT5
, out float4 OutTarget5 : SV_Target5
#endif
#if PIXELSHADEROUTPUT_MRT6
, out float4 OutTarget6 : SV_Target6
#endif
#if PIXELSHADEROUTPUT_MRT7
, out float4 OutTarget7 : SV_Target7
#endif
// todo: if we are not inside a volumetric decal we could use OPTIONAL_OutDepthConservative for better performance, this would require a shader permutation
OPTIONAL_OutDepthConservative
#if PIXELSHADEROUTPUT_COVERAGE || PIXELSHADEROUTPUT_A2C
#if PIXELSHADEROUTPUT_A2C
, in uint InCoverage : SV_Coverage
#endif
, out uint OutCoverage : SV_Coverage
#endif
)
{
// ---------------------------------------------------------------------------------
FPixelShaderIn PixelShaderIn = (FPixelShaderIn)0;
FPixelShaderOut PixelShaderOut = (FPixelShaderOut)0;
#if PIXELSHADEROUTPUT_COVERAGE || PIXELSHADEROUTPUT_A2C
#if PIXELSHADEROUTPUT_A2C
PixelShaderIn.Coverage = InCoverage;
#else
PixelShaderIn.Coverage = 0xF;
#endif
PixelShaderOut.Coverage = PixelShaderIn.Coverage;
#endif
PixelShaderIn.SvPosition = SvPosition;
PixelShaderIn.bIsFrontFace = bIsFrontFace;
#if PIXELSHADEROUTPUT_BASEPASS
FPixelShaderInOut_MainPS(Interpolants, BasePassInterpolants, PixelShaderIn, PixelShaderOut);
#elif PIXELSHADEROUTPUT_INTERPOLANTS
FPixelShaderInOut_MainPS(Interpolants, PixelShaderIn, PixelShaderOut);
#else
FPixelShaderInOut_MainPS(PixelShaderIn, PixelShaderOut);
#endif
#if PIXELSHADEROUTPUT_MRT0
OutTarget0 = PixelShaderOut.MRT[0];
#endif
#if PIXELSHADEROUTPUT_MRT1
OutTarget1 = PixelShaderOut.MRT[1];
#endif
#if PIXELSHADEROUTPUT_MRT2
OutTarget2 = PixelShaderOut.MRT[2];
#endif
#if PIXELSHADEROUTPUT_MRT3
OutTarget3 = PixelShaderOut.MRT[3];
#endif
#if PIXELSHADEROUTPUT_MRT4
OutTarget4 = PixelShaderOut.MRT[4];
#endif
#if PIXELSHADEROUTPUT_MRT5
OutTarget5 = PixelShaderOut.MRT[5];
#endif
#if PIXELSHADEROUTPUT_MRT6
OutTarget6 = PixelShaderOut.MRT[6];
#endif
#if PIXELSHADEROUTPUT_MRT7
OutTarget7 = PixelShaderOut.MRT[7];
#endif
#if PIXELSHADEROUTPUT_COVERAGE || PIXELSHADEROUTPUT_A2C
OutCoverage = PixelShaderOut.Coverage;
#endif
#if OUTPUT_PIXEL_DEPTH_OFFSET
OutDepth = PixelShaderOut.Depth;
#endif
}