| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511 | // Copyright Epic Games, Inc. All Rights Reserved.#pragma once#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5float SampleDeviceZFromSceneTexturesTempCopy(float2 UV){	return SceneDepthTexture.SampleLevel(SceneDepthTextureSampler, UV, 0).r;}#endif#ifndef GBUFFER_LAYOUT#define GBUFFER_LAYOUT 0#endif#if GBUFFER_LAYOUT == 0void EncodeGBufferToMRT(inout FPixelShaderOut Out, FGBufferData GBuffer, float QuantizationBias){	float4 MrtFloat1 = 0.0f;	float4 MrtFloat2 = 0.0f;	uint4 MrtUint2 = 0;	float4 MrtFloat3 = 0.0f;	float4 MrtFloat4 = 0.0f;	float4 MrtFloat5 = 0.0f;	float4 MrtFloat6 = 0.0f;	float3 WorldNormal_Compressed = EncodeNormalHelper(GBuffer.WorldNormal, 0.0f);	MrtFloat1.x = WorldNormal_Compressed.x;	MrtFloat1.y = WorldNormal_Compressed.y;	MrtFloat1.z = WorldNormal_Compressed.z;	MrtFloat1.w = GBuffer.PerObjectGBufferData.x;	MrtFloat2.x = GBuffer.Metallic.x;	MrtFloat2.y = GBuffer.Specular.x;	MrtFloat2.z = GBuffer.Roughness.x;	MrtUint2.w |= ((((GBuffer.ShadingModelID.x) >> 0) & 0x0f) << 0);	MrtUint2.w |= ((((GBuffer.SelectiveOutputMask.x) >> 0) & 0x0f) << 4);	MrtFloat3.x = GBuffer.BaseColor.x;	MrtFloat3.y = GBuffer.BaseColor.y;	MrtFloat3.z = GBuffer.BaseColor.z;	MrtFloat3.w = GBuffer.GenericAO.x;	MrtFloat4.x = GBuffer.Velocity.x;	MrtFloat4.y = GBuffer.Velocity.y;	MrtFloat4.z = GBuffer.Velocity.z;	MrtFloat4.w = GBuffer.Velocity.w;	MrtFloat6.x = GBuffer.PrecomputedShadowFactors.x;	MrtFloat6.y = GBuffer.PrecomputedShadowFactors.y;	MrtFloat6.z = GBuffer.PrecomputedShadowFactors.z;	MrtFloat6.w = GBuffer.PrecomputedShadowFactors.w;	MrtFloat5.x = GBuffer.CustomData.x;	MrtFloat5.y = GBuffer.CustomData.y;	MrtFloat5.z = GBuffer.CustomData.z;	MrtFloat5.w = GBuffer.CustomData.w;	Out.MRT[1] = MrtFloat1;	Out.MRT[2] = float4(MrtFloat2.x, MrtFloat2.y, MrtFloat2.z, (float(MrtUint2.w) + .5f) / 255.0f);	Out.MRT[3] = MrtFloat3;	Out.MRT[4] = MrtFloat4;	Out.MRT[5] = MrtFloat5;	Out.MRT[6] = MrtFloat6;	Out.MRT[7] = float4(0.0f, 0.0f, 0.0f, 0.0f);}FGBufferData  DecodeGBufferDataDirect(float4 InMRT1,	float4 InMRT2,	float4 InMRT3,	float4 InMRT4,	float4 InMRT5,	float4 InMRT6,		 	float CustomNativeDepth,	float4 AnisotropicData,	uint CustomStencil,	float SceneDepth,	bool bGetNormalizedNormal,	bool bChecker){	FGBufferData Ret = (FGBufferData)0;	float3 WorldNormal_Compressed = 0.0f;	WorldNormal_Compressed.x = InMRT1.x;	WorldNormal_Compressed.y = InMRT1.y;	WorldNormal_Compressed.z = InMRT1.z;	Ret.PerObjectGBufferData.x = InMRT1.w;	Ret.Metallic.x = InMRT2.x;	Ret.Specular.x = InMRT2.y;	Ret.Roughness.x = InMRT2.z;	Ret.ShadingModelID.x = (((uint((float(InMRT2.w) * 255.0f) + .5f) >> 0) & 0x0f) << 0);	Ret.SelectiveOutputMask.x = (((uint((float(InMRT2.w) * 255.0f) + .5f) >> 4) & 0x0f) << 0);	Ret.BaseColor.x = InMRT3.x;	Ret.BaseColor.y = InMRT3.y;	Ret.BaseColor.z = InMRT3.z;	Ret.GenericAO.x = InMRT3.w;	Ret.Velocity.x = InMRT4.x;	Ret.Velocity.y = InMRT4.y;	Ret.Velocity.z = InMRT4.z;	Ret.Velocity.w = InMRT4.w;	Ret.PrecomputedShadowFactors.x = InMRT6.x;	Ret.PrecomputedShadowFactors.y = InMRT6.y;	Ret.PrecomputedShadowFactors.z = InMRT6.z;	Ret.PrecomputedShadowFactors.w = InMRT6.w;	Ret.CustomData.x = InMRT5.x;	Ret.CustomData.y = InMRT5.y;	Ret.CustomData.z = InMRT5.z;	Ret.CustomData.w = InMRT5.w;		Ret.WorldNormal = DecodeNormalHelper(WorldNormal_Compressed);	Ret.WorldTangent = AnisotropicData.xyz;	Ret.Anisotropy = AnisotropicData.w;	GBufferPostDecode(Ret,bChecker,bGetNormalizedNormal);	Ret.CustomDepth = ConvertFromDeviceZ(CustomNativeDepth);	Ret.CustomStencil = CustomStencil;	Ret.Depth = SceneDepth;		return Ret;}#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5// @param PixelPos relative to left top of the rendertarget (not viewport)FGBufferData DecodeGBufferDataUV(float2 UV, bool bGetNormalizedNormal = true){	float CustomNativeDepth = Texture2DSampleLevel(SceneTexturesStruct.CustomDepthTexture, SceneTexturesStruct_CustomDepthTextureSampler, UV, 0).r;	int2 IntUV = (int2)trunc(UV * View.BufferSizeAndInvSize.xy * View.BufferToSceneTextureScale.xy);	uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(IntUV, 0)) STENCIL_COMPONENT_SWIZZLE;	float SceneDepth = CalcSceneDepth(UV);	float4 AnisotropicData = Texture2DSampleLevel(SceneTexturesStruct.GBufferFTexture, SceneTexturesStruct_GBufferFTextureSampler, UV, 0).xyzw;	float4 InMRT1 = Texture2DSampleLevel(SceneTexturesStruct.GBufferATexture, SceneTexturesStruct_GBufferATextureSampler, UV, 0).xyzw;	float4 InMRT2 = Texture2DSampleLevel(SceneTexturesStruct.GBufferBTexture, SceneTexturesStruct_GBufferBTextureSampler, UV, 0).xyzw;	float4 InMRT3 = Texture2DSampleLevel(SceneTexturesStruct.GBufferCTexture, SceneTexturesStruct_GBufferCTextureSampler, UV, 0).xyzw;	float4 InMRT4 = Texture2DSampleLevel(SceneTexturesStruct.GBufferVelocityTexture, SceneTexturesStruct_GBufferVelocityTextureSampler, UV, 0).xyzw;	float4 InMRT5 = Texture2DSampleLevel(SceneTexturesStruct.GBufferDTexture, SceneTexturesStruct_GBufferDTextureSampler, UV, 0).xyzw;	float4 InMRT6 = Texture2DSampleLevel(SceneTexturesStruct.GBufferETexture, SceneTexturesStruct_GBufferETextureSampler, UV, 0).xyzw;	FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,		InMRT2,		InMRT3,		InMRT4,		InMRT5,		InMRT6,		 		CustomNativeDepth,		AnisotropicData,		CustomStencil,		SceneDepth,		bGetNormalizedNormal,		CheckerFromSceneColorUV(UV));	return Ret;}// @param PixelPos relative to left top of the rendertarget (not viewport)FGBufferData DecodeGBufferDataUint(uint2 PixelPos, bool bGetNormalizedNormal = true){	float CustomNativeDepth = SceneTexturesStruct.CustomDepthTexture.Load(int3(PixelPos, 0)).r;	uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(PixelPos, 0)) STENCIL_COMPONENT_SWIZZLE;	float SceneDepth = CalcSceneDepth(PixelPos);	float4 AnisotropicData = SceneTexturesStruct.GBufferFTexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT1 = SceneTexturesStruct.GBufferATexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT2 = SceneTexturesStruct.GBufferBTexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT3 = SceneTexturesStruct.GBufferCTexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT4 = SceneTexturesStruct.GBufferVelocityTexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT5 = SceneTexturesStruct.GBufferDTexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT6 = SceneTexturesStruct.GBufferETexture.Load(int3(PixelPos, 0)).xyzw;	FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,		InMRT2,		InMRT3,		InMRT4,		InMRT5,		InMRT6,		 		CustomNativeDepth,		AnisotropicData,		CustomStencil,		SceneDepth,		bGetNormalizedNormal,		CheckerFromPixelPos(PixelPos));	return Ret;}// @param PixelPos relative to left top of the rendertarget (not viewport)FGBufferData DecodeGBufferDataSceneTextures(float2 UV, bool bGetNormalizedNormal = true){	uint CustomStencil = 0;	float CustomNativeDepth = 0;	float DeviceZ = SampleDeviceZFromSceneTexturesTempCopy(UV);	float SceneDepth = ConvertFromDeviceZ(DeviceZ);	float4 AnisotropicData = GBufferFTexture.SampleLevel(GBufferFTextureSampler, UV, 0).xyzw;	float4 InMRT1 = GBufferATexture.SampleLevel(GBufferATextureSampler, UV, 0).xyzw;	float4 InMRT2 = GBufferBTexture.SampleLevel(GBufferBTextureSampler, UV, 0).xyzw;	float4 InMRT3 = GBufferCTexture.SampleLevel(GBufferCTextureSampler, UV, 0).xyzw;	float4 InMRT4 = GBufferVelocityTexture.SampleLevel(GBufferVelocityTextureSampler, UV, 0).xyzw;	float4 InMRT5 = GBufferDTexture.SampleLevel(GBufferDTextureSampler, UV, 0).xyzw;	float4 InMRT6 = GBufferETexture.SampleLevel(GBufferETextureSampler, UV, 0).xyzw;	FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,		InMRT2,		InMRT3,		InMRT4,		InMRT5,		InMRT6,		 		CustomNativeDepth,		AnisotropicData,		CustomStencil,		SceneDepth,		bGetNormalizedNormal,		CheckerFromSceneColorUV(UV));	return Ret;}// @param PixelPos relative to left top of the rendertarget (not viewport)FGBufferData DecodeGBufferDataSceneTexturesLoad(uint2 PixelCoord, bool bGetNormalizedNormal = true){	uint CustomStencil = 0;	float CustomNativeDepth = 0;	float DeviceZ = SceneDepthTexture.Load(int3(PixelCoord, 0)).r;	float SceneDepth = ConvertFromDeviceZ(DeviceZ);	float4 AnisotropicData = GBufferFTexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT1 = GBufferATexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT2 = GBufferBTexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT3 = GBufferCTexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT4 = GBufferVelocityTexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT5 = GBufferDTexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT6 = GBufferETexture.Load(int3(PixelCoord, 0)).xyzw;	FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,		InMRT2,		InMRT3,		InMRT4,		InMRT5,		InMRT6,		 		CustomNativeDepth,		AnisotropicData,		CustomStencil,		SceneDepth,		bGetNormalizedNormal,		CheckerFromPixelPos(PixelCoord));	return Ret;}#endif#endif#if GBUFFER_LAYOUT == 1void EncodeGBufferToMRT(inout FPixelShaderOut Out, FGBufferData GBuffer, float QuantizationBias){	float4 MrtFloat1 = 0.0f;	float4 MrtFloat2 = 0.0f;	uint4 MrtUint2 = 0;	float4 MrtFloat3 = 0.0f;	float4 MrtFloat4 = 0.0f;	float4 MrtFloat5 = 0.0f;	float4 MrtFloat6 = 0.0f;	float3 WorldNormal_Compressed = EncodeNormalHelper(GBuffer.WorldNormal, 0.0f);	MrtFloat1.x = WorldNormal_Compressed.x;	MrtFloat1.y = WorldNormal_Compressed.y;	MrtFloat1.z = WorldNormal_Compressed.z;	MrtFloat1.w = GBuffer.PerObjectGBufferData.x;	MrtFloat2.x = GBuffer.Metallic.x;	MrtFloat2.y = GBuffer.Specular.x;	MrtFloat2.z = GBuffer.Roughness.x;	MrtUint2.w |= ((((GBuffer.ShadingModelID.x) >> 0) & 0x0f) << 0);	MrtUint2.w |= ((((GBuffer.SelectiveOutputMask.x) >> 0) & 0x0f) << 4);	MrtFloat3.x = GBuffer.BaseColor.x;	MrtFloat3.y = GBuffer.BaseColor.y;	MrtFloat3.z = GBuffer.BaseColor.z;	MrtFloat3.w = GBuffer.GenericAO.x;	MrtFloat4.x = GBuffer.Velocity.x;	MrtFloat4.y = GBuffer.Velocity.y;	MrtFloat4.z = GBuffer.Velocity.z;	MrtFloat4.w = GBuffer.Velocity.w;	MrtFloat6.x = GBuffer.PrecomputedShadowFactors.x;	MrtFloat6.y = GBuffer.PrecomputedShadowFactors.y;	MrtFloat6.z = GBuffer.PrecomputedShadowFactors.z;	MrtFloat6.w = GBuffer.PrecomputedShadowFactors.w;	MrtFloat5.x = GBuffer.CustomData.x;	MrtFloat5.y = GBuffer.CustomData.y;	MrtFloat5.z = GBuffer.CustomData.z;	MrtFloat5.w = GBuffer.CustomData.w;	Out.MRT[1] = MrtFloat1;	Out.MRT[2] = float4(MrtFloat2.x, MrtFloat2.y, MrtFloat2.z, (float(MrtUint2.w) + .5f) / 255.0f);	Out.MRT[3] = MrtFloat3;	Out.MRT[4] = MrtFloat4;	Out.MRT[5] = MrtFloat5;	Out.MRT[6] = MrtFloat6;	Out.MRT[7] = float4(0.0f, 0.0f, 0.0f, 0.0f);}FGBufferData  DecodeGBufferDataDirect(float4 InMRT1,	float4 InMRT2,	float4 InMRT3,	float4 InMRT4,	float4 InMRT5,	float4 InMRT6,		 	float CustomNativeDepth,	float4 AnisotropicData,	uint CustomStencil,	float SceneDepth,	bool bGetNormalizedNormal,	bool bChecker){	FGBufferData Ret = (FGBufferData)0;	float3 WorldNormal_Compressed = 0.0f;	WorldNormal_Compressed.x = InMRT1.x;	WorldNormal_Compressed.y = InMRT1.y;	WorldNormal_Compressed.z = InMRT1.z;	Ret.PerObjectGBufferData.x = InMRT1.w;	Ret.Metallic.x = InMRT2.x;	Ret.Specular.x = InMRT2.y;	Ret.Roughness.x = InMRT2.z;	Ret.ShadingModelID.x = (((uint((float(InMRT2.w) * 255.0f) + .5f) >> 0) & 0x0f) << 0);	Ret.SelectiveOutputMask.x = (((uint((float(InMRT2.w) * 255.0f) + .5f) >> 4) & 0x0f) << 0);	Ret.BaseColor.x = InMRT3.x;	Ret.BaseColor.y = InMRT3.y;	Ret.BaseColor.z = InMRT3.z;	Ret.GenericAO.x = InMRT3.w;	Ret.Velocity.x = InMRT4.x;	Ret.Velocity.y = InMRT4.y;	Ret.Velocity.z = InMRT4.z;	Ret.Velocity.w = InMRT4.w;	Ret.PrecomputedShadowFactors.x = InMRT6.x;	Ret.PrecomputedShadowFactors.y = InMRT6.y;	Ret.PrecomputedShadowFactors.z = InMRT6.z;	Ret.PrecomputedShadowFactors.w = InMRT6.w;	Ret.CustomData.x = InMRT5.x;	Ret.CustomData.y = InMRT5.y;	Ret.CustomData.z = InMRT5.z;	Ret.CustomData.w = InMRT5.w;		Ret.WorldNormal = DecodeNormalHelper(WorldNormal_Compressed);	Ret.WorldTangent = AnisotropicData.xyz;	Ret.Anisotropy = AnisotropicData.w;	GBufferPostDecode(Ret,bChecker,bGetNormalizedNormal);	Ret.CustomDepth = ConvertFromDeviceZ(CustomNativeDepth);	Ret.CustomStencil = CustomStencil;	Ret.Depth = SceneDepth;		return Ret;}#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5// @param PixelPos relative to left top of the rendertarget (not viewport)FGBufferData DecodeGBufferDataUV(float2 UV, bool bGetNormalizedNormal = true){	float CustomNativeDepth = Texture2DSampleLevel(SceneTexturesStruct.CustomDepthTexture, SceneTexturesStruct_CustomDepthTextureSampler, UV, 0).r;	int2 IntUV = (int2)trunc(UV * View.BufferSizeAndInvSize.xy * View.BufferToSceneTextureScale.xy);	uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(IntUV, 0)) STENCIL_COMPONENT_SWIZZLE;	float SceneDepth = CalcSceneDepth(UV);	float4 AnisotropicData = Texture2DSampleLevel(SceneTexturesStruct.GBufferFTexture, SceneTexturesStruct_GBufferFTextureSampler, UV, 0).xyzw;	float4 InMRT1 = Texture2DSampleLevel(SceneTexturesStruct.GBufferATexture, SceneTexturesStruct_GBufferATextureSampler, UV, 0).xyzw;	float4 InMRT2 = Texture2DSampleLevel(SceneTexturesStruct.GBufferBTexture, SceneTexturesStruct_GBufferBTextureSampler, UV, 0).xyzw;	float4 InMRT3 = Texture2DSampleLevel(SceneTexturesStruct.GBufferCTexture, SceneTexturesStruct_GBufferCTextureSampler, UV, 0).xyzw;	float4 InMRT4 = Texture2DSampleLevel(SceneTexturesStruct.GBufferVelocityTexture, SceneTexturesStruct_GBufferVelocityTextureSampler, UV, 0).xyzw;	float4 InMRT5 = Texture2DSampleLevel(SceneTexturesStruct.GBufferDTexture, SceneTexturesStruct_GBufferDTextureSampler, UV, 0).xyzw;	float4 InMRT6 = Texture2DSampleLevel(SceneTexturesStruct.GBufferETexture, SceneTexturesStruct_GBufferETextureSampler, UV, 0).xyzw;	FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,		InMRT2,		InMRT3,		InMRT4,		InMRT5,		InMRT6,		 		CustomNativeDepth,		AnisotropicData,		CustomStencil,		SceneDepth,		bGetNormalizedNormal,		CheckerFromSceneColorUV(UV));	return Ret;}// @param PixelPos relative to left top of the rendertarget (not viewport)FGBufferData DecodeGBufferDataUint(uint2 PixelPos, bool bGetNormalizedNormal = true){	float CustomNativeDepth = SceneTexturesStruct.CustomDepthTexture.Load(int3(PixelPos, 0)).r;	uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(PixelPos, 0)) STENCIL_COMPONENT_SWIZZLE;	float SceneDepth = CalcSceneDepth(PixelPos);	float4 AnisotropicData = SceneTexturesStruct.GBufferFTexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT1 = SceneTexturesStruct.GBufferATexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT2 = SceneTexturesStruct.GBufferBTexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT3 = SceneTexturesStruct.GBufferCTexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT4 = SceneTexturesStruct.GBufferVelocityTexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT5 = SceneTexturesStruct.GBufferDTexture.Load(int3(PixelPos, 0)).xyzw;	float4 InMRT6 = SceneTexturesStruct.GBufferETexture.Load(int3(PixelPos, 0)).xyzw;	FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,		InMRT2,		InMRT3,		InMRT4,		InMRT5,		InMRT6,		 		CustomNativeDepth,		AnisotropicData,		CustomStencil,		SceneDepth,		bGetNormalizedNormal,		CheckerFromPixelPos(PixelPos));	return Ret;}// @param PixelPos relative to left top of the rendertarget (not viewport)FGBufferData DecodeGBufferDataSceneTextures(float2 UV, bool bGetNormalizedNormal = true){	uint CustomStencil = 0;	float CustomNativeDepth = 0;	float DeviceZ = SampleDeviceZFromSceneTexturesTempCopy(UV);	float SceneDepth = ConvertFromDeviceZ(DeviceZ);	float4 AnisotropicData = GBufferFTexture.SampleLevel(GBufferFTextureSampler, UV, 0).xyzw;	float4 InMRT1 = GBufferATexture.SampleLevel(GBufferATextureSampler, UV, 0).xyzw;	float4 InMRT2 = GBufferBTexture.SampleLevel(GBufferBTextureSampler, UV, 0).xyzw;	float4 InMRT3 = GBufferCTexture.SampleLevel(GBufferCTextureSampler, UV, 0).xyzw;	float4 InMRT4 = GBufferVelocityTexture.SampleLevel(GBufferVelocityTextureSampler, UV, 0).xyzw;	float4 InMRT5 = GBufferDTexture.SampleLevel(GBufferDTextureSampler, UV, 0).xyzw;	float4 InMRT6 = GBufferETexture.SampleLevel(GBufferETextureSampler, UV, 0).xyzw;	FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,		InMRT2,		InMRT3,		InMRT4,		InMRT5,		InMRT6,		 		CustomNativeDepth,		AnisotropicData,		CustomStencil,		SceneDepth,		bGetNormalizedNormal,		CheckerFromSceneColorUV(UV));	return Ret;}// @param PixelPos relative to left top of the rendertarget (not viewport)FGBufferData DecodeGBufferDataSceneTexturesLoad(uint2 PixelCoord, bool bGetNormalizedNormal = true){	uint CustomStencil = 0;	float CustomNativeDepth = 0;	float DeviceZ = SceneDepthTexture.Load(int3(PixelCoord, 0)).r;	float SceneDepth = ConvertFromDeviceZ(DeviceZ);	float4 AnisotropicData = GBufferFTexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT1 = GBufferATexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT2 = GBufferBTexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT3 = GBufferCTexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT4 = GBufferVelocityTexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT5 = GBufferDTexture.Load(int3(PixelCoord, 0)).xyzw;	float4 InMRT6 = GBufferETexture.Load(int3(PixelCoord, 0)).xyzw;	FGBufferData Ret = DecodeGBufferDataDirect(InMRT1,		InMRT2,		InMRT3,		InMRT4,		InMRT5,		InMRT6,		 		CustomNativeDepth,		AnisotropicData,		CustomStencil,		SceneDepth,		bGetNormalizedNormal,		CheckerFromPixelPos(PixelCoord));	return Ret;}#endif#endif
 |