// Environment reflections - ReflectionEnvironmentComputeShaders.ucf

// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v1.2.34 on Tue Mar 22 18:41:35 2016
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// no Input
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// no Output
cs_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer cb0[3], immediateIndexed

dcl_constantbuffer cb1[122], immediateIndexed
// From UE4 source code Engine/Source/Runtime/Engine/Public/SceneView.h
// (offsets may not be accurate depending on engine version and any local
// modifications the developer may have made, but should be a good starting
// point) /** The uniform shader parameters associated with a view. */
// BEGIN_UNIFORM_BUFFER_STRUCT_WITH_CONSTRUCTOR(FViewUniformShaderParameters,ENGINE_API)
//  0	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,TranslatedWorldToClip)
//  4	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,WorldToClip)
//  8	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,TranslatedWorldToView)
// 12	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,ViewToTranslatedWorld)
// 16	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,ViewToClip)
// 20	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,ClipToView)
// 24	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,ClipToTranslatedWorld)
// 28	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,ScreenToWorld)
// 32	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,ScreenToTranslatedWorld)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector,ViewForward, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector,ViewUp, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector,ViewRight, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector2D,FieldOfViewWideAngles)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector2D,PrevFieldOfViewWideAngles)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4,InvDeviceZToWorldZTransform)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4,ScreenPositionScaleBias, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4,ViewRectMin, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4,ViewSizeAndInvSize)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4,BufferSizeAndInvSize)
// 44	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4,ViewOrigin)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4,TranslatedViewOrigin)
// 	// The exposure scale is just a scalar but needs to be a float4 to workaround a driver bug on IOS.
// 	// After 4.2 we can put the workaround in the cross compiler.
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4,ExposureScale, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4,DiffuseOverrideParameter, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4,SpecularOverrideParameter, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4,NormalOverrideParameter, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector2D,RoughnessOverrideParameter, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float, PrevFrameGameTime)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float, PrevFrameRealTime)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector,PreViewTranslation)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,OutOfBoundsMask, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector,ViewOriginDelta)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,CullingSign)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,NearPlane, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,AdaptiveTessellationFactor)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,GameTime)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,RealTime)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(uint32,Random)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(uint32,FrameNumber)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,CameraCut, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,UseLightmaps, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,UnlitViewmodeMask, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FLinearColor,DirectionalLightColor, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector,DirectionalLightDirection, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float, DirectionalLightShadowTransition, EShaderPrecisionModifier::Half)			
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4, DirectionalLightShadowSize, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY(FMatrix, DirectionalLightScreenToShadow, [MAX_FORWARD_SHADOWCASCADES])
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4, DirectionalLightShadowDistances, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FLinearColor,UpperSkyColor, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FLinearColor,LowerSkyColor, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY(FVector4,TranslucencyLightingVolumeMin,[TVC_MAX])
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY(FVector4,TranslucencyLightingVolumeInvSize,[TVC_MAX])
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4,TemporalAAParams)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,DepthOfFieldFocalDistance)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,DepthOfFieldScale)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,DepthOfFieldFocalLength)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,DepthOfFieldFocalRegion)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,DepthOfFieldNearTransitionRegion)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,DepthOfFieldFarTransitionRegion)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,MotionBlurNormalizedToPixel)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,GeneralPurposeTweak)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,DemosaicVposOffset, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,PrevProjection)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,PrevViewProj)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,PrevViewRotationProj)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,PrevViewToClip)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,PrevClipToView)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,PrevTranslatedWorldToClip)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,PrevTranslatedWorldToView)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,PrevViewToTranslatedWorld)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector,PrevViewOrigin)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector,PrevPreViewTranslation)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,PrevInvViewProj)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,PrevScreenToTranslatedWorld)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FMatrix,ClipToPrevClip)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector,IndirectLightingColorScale)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,HDR32bppEncodingMode, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector,AtmosphericFogSunDirection)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogSunPower, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogPower, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogDensityScale, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogDensityOffset, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogGroundOffset, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogDistanceScale, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogAltitudeScale, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogHeightScaleRayleigh, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogStartDistance, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogDistanceOffset, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float,AtmosphericFogSunDiscScale, EShaderPrecisionModifier::Half)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(uint32,AtmosphericFogRenderMask)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(uint32,AtmosphericFogInscatterAltitudeSampleNum)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FLinearColor,AtmosphericFogSunColor)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FLinearColor,AmbientCubemapTint)//Used via a custom material node. DO NOT REMOVE.
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,AmbientCubemapIntensity)//Used via a custom material node. DO NOT REMOVE.
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector2D,RenderTargetSize)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float,SkyLightParameters)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4,SceneTextureMinMax)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FLinearColor,SkyLightColor)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY(FVector4,SkyIrradianceEnvironmentMap,[7])
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float, MobilePreviewMode)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_TEXTURE(Texture2D, DirectionalLightShadowTexture)	
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_SAMPLER(SamplerState, DirectionalLightShadowSampler)
// END_UNIFORM_BUFFER_STRUCT(FViewUniformShaderParameters)

dcl_constantbuffer cb2[682], dynamicIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_sampler s3, mode_default
dcl_sampler s4, mode_default

// Normal map:
dcl_resource_texture2d (float,float,float,float) t0
// Specularity:
dcl_resource_texture2d (float,float,float,float) t1
// Colour:
dcl_resource_texture2d (float,float,float,float) t2
// Depth:
dcl_resource_texture2d (float,float,float,float) t3
// AO:
dcl_resource_texture2d (float,float,float,float) t4
// AO:
dcl_resource_texture2d (float,float,float,float) t5
// ?:
dcl_resource_texture2d (float,float,float,float) t6

// SkyLightCubemap:
dcl_resource_texturecube (float,float,float,float) t7

// Gradient?:
dcl_resource_texture2d (float,float,float,float) t8

// ReflectionEnvironmentColorTexture:
dcl_resource_texturecubearray (float,float,float,float) t9

// Screen Space reflections:
dcl_resource_texture2d (float,float,float,float) t10
// Lighting already applied:
dcl_resource_texture2d (float,float,float,float) t11
dcl_uav_typed_texture2d (float,float,float,float) u0
dcl_input vThreadGroupID.xy
dcl_input vThreadIDInGroup.xy
dcl_input vThreadID.xy
//dcl_temps 10
dcl_temps 13
dcl_tgsm_raw g0, 4
dcl_tgsm_raw g1, 4
dcl_tgsm_raw g2, 4
dcl_tgsm_structured g3, 4, 341
dcl_tgsm_structured g4, 4, 341
dcl_tgsm_structured g5, 4, 256
dcl_thread_group 16, 16, 1

// 3DMigoto StereoParams:
dcl_resource_texture2d (float,float,float,float) t125
ld_indexable(texture2d)(float,float,float,float) r10.xyzw, l(0, 0, 0, 0), t125.xyzw

imad r0.x, vThreadIDInGroup.y, l(16), vThreadIDInGroup.x
iadd r1.xy, vThreadID.xyxx, cb0[2].xyxx
utof r0.yz, vThreadID.xxyx

add r0.yz, r0.yyzy, l(0.000000, 0.500000, 0.500000, 0.000000)
iadd r2.xy, cb0[2].zwzz, -cb0[2].xyxx
utof r2.xy, r2.xyxx
div r0.yz, r0.yyzy, r2.xxyx
mad r0.yz, r0.yyzy, l(0.000000, 2.000000, -2.000000, 0.000000), l(0.000000, -1.000000, 1.000000, 0.000000)
mov r1.zw, l(0,0,0,0)

ld_indexable(texture2d)(float,float,float,float) r0.w, r1.xyww, t3.yzwx

mad r0.w, r0.w, cb1[40].z, -cb1[40].w
div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w

store_structured g5.x, r0.x, l(0), r0.w
sync_g_t
ult r2.zw, r0.xxxx, l(0, 0, 32, 8)
if_nz r2.z
  iadd r2.z, r0.x, l(32)
  mov r3.xy, r0.wwww
  mov r3.z, r2.z
  loop 
    ige r3.w, r3.z, l(256)
    breakc_nz r3.w
    ld_structured r3.w, r3.z, l(0), g5.xxxx
    min r3.x, r3.w, r3.x
    max r3.y, r3.w, r3.y
    iadd r3.z, r3.z, l(32)
  endloop 
  store_structured g5.x, r0.x, l(0), r3.x
  store_structured g5.x, r2.z, l(0), r3.y
endif 
sync_g_t
if_nz r2.w
  ld_structured r2.z, r0.x, l(0), g5.xxxx
  iadd r3.xyzw, r0.xxxx, l(32, 8, 40, 16)
  ld_structured r2.w, r3.x, l(0), g5.xxxx
  ld_structured r3.x, r3.y, l(0), g5.xxxx
  min r2.z, r2.z, r3.x
  ld_structured r3.x, r3.z, l(0), g5.xxxx
  max r2.w, r2.w, r3.x
  ld_structured r3.x, r3.w, l(0), g5.xxxx
  min r2.z, r2.z, r3.x
  iadd r3.xyzw, r0.xxxx, l(48, 24, 56, 64)
  ld_structured r3.x, r3.x, l(0), g5.xxxx
  max r2.w, r2.w, r3.x
  ld_structured r3.x, r3.y, l(0), g5.xxxx
  min r2.z, r2.z, r3.x
  ld_structured r3.x, r3.z, l(0), g5.xxxx
  max r2.w, r2.w, r3.x
  store_structured g5.x, r3.w, l(0), r2.z
  iadd r2.z, r0.x, l(96)
  store_structured g5.x, r2.z, l(0), r2.w
endif 
sync_g_t
if_z r0.x
  ld_structured r2.z, l(64), l(0), g5.xxxx
  ld_structured r2.w, l(96), l(0), g5.xxxx
  mov r3.xy, r2.zwzz
  mov r3.z, l(1)
  loop 
    ige r3.w, r3.z, l(8)
    breakc_nz r3.w
    iadd r4.xy, r3.zzzz, l(64, 96, 0, 0)
    ld_structured r3.w, r4.x, l(0), g5.xxxx
    min r3.x, r3.w, r3.x
    ld_structured r3.w, r4.y, l(0), g5.xxxx
    max r3.y, r3.w, r3.y
    iadd r3.z, r3.z, l(1)
  endloop 
  store_raw g0.x, l(0), r3.x
  store_raw g1.x, l(0), r3.y
endif 
sync_g_t
ld_raw r2.z, l(0), g0.xxxx
ld_raw r2.w, l(0), g1.xxxx
utof r3.xy, vThreadGroupID.xyxx
mad r3.xy, r3.xyxx, l(16.000000, 16.000000, 0.000000, 0.000000), l(0.500000, 0.500000, 0.000000, 0.000000)
div r3.xy, r3.xyxx, r2.xyxx
mad r3.xy, r3.xyxx, l(2.000000, -2.000000, 0.000000, 0.000000), l(-1.000000, 1.000000, 0.000000, 0.000000)
add r2.zw, r2.zzzw, cb1[40].wwww
mul r2.zw, r2.zzzw, cb1[40].zzzz
div r2.z, l(1.000000, 1.000000, 1.000000, 1.000000), r2.z
iadd r3.zw, vThreadGroupID.xxxy, l(0, 0, 1, 1)
utof r3.zw, r3.zzzw
mad r3.zw, r3.zzzw, l(0.000000, 0.000000, 16.000000, 16.000000), l(0.000000, 0.000000, -0.500000, -0.500000)
div r2.xy, r3.zwzz, r2.xyxx
mad r2.xy, r2.xyxx, l(2.000000, -2.000000, 0.000000, 0.000000), l(-1.000000, 1.000000, 0.000000, 0.000000)
div r2.w, l(1.000000, 1.000000, 1.000000, 1.000000), r2.w
mul r4.xyzw, r3.yyyy, cb1[21].xyzw
mad r3.xyzw, r3.xxxx, cb1[20].xyzw, r4.xyzw
mad r4.xyzw, r2.wwww, cb1[22].xyzw, r3.xyzw
add r4.xyzw, r4.xyzw, cb1[23].xyzw
div r4.xyz, r4.xyzx, r4.wwww
mul r5.xyzw, r2.yyyy, cb1[21].xyzw
mad r5.xyzw, r2.xxxx, cb1[20].xyzw, r5.xyzw
mad r5.xyzw, r2.wwww, cb1[22].xyzw, r5.xyzw
add r5.xyzw, r5.xyzw, cb1[23].xyzw
div r2.xyw, r5.xyxz, r5.wwww
mad r3.xyzw, r2.zzzz, cb1[22].xyzw, r3.xyzw
add r3.xyzw, r3.xyzw, cb1[23].xyzw
div r3.xyz, r3.xyzx, r3.wwww
min r5.xyz, r2.xywx, r4.xyzx
min r5.xyz, r3.xyzx, r5.xyzx
max r2.xyz, r2.xywx, r4.xyzx
max r2.xyz, r2.xyzx, r3.xyzx
add r3.xyz, r5.xyzx, r2.xyzx

add r2.xyz, -r5.xyzx, r2.xyzx

if_z r0.x
  store_raw g2.x, l(0), l(0)
endif 
sync_g_t
mov r2.w, r0.x
loop 
  ult r3.w, r2.w, cb0[1].z
  ult r4.x, r2.w, l(341)
  and r3.w, r3.w, r4.x
  breakc_z r3.w
  add r4.xyz, cb1[51].xyzx, cb2[r2.w + 0].xyzx

  mul r5.xyz, r4.yyyy, cb1[9].xyzx
  mad r4.xyw, r4.xxxx, cb1[8].xyxz, r5.xyxz
  mad r4.xyz, r4.zzzz, cb1[10].xyzx, r4.xywx
  add r4.xyz, r4.xyzx, cb1[11].xyzx

  mad r4.xyz, r3.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), -r4.xyzx
  mad r4.xyz, -r2.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000), |r4.xyzx|
  max r4.xyz, r4.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
  dp3 r3.w, r4.xyzx, r4.xyzx
  mul r4.x, cb2[r2.w + 0].w, cb2[r2.w + 0].w
  lt r3.w, r3.w, r4.x
  if_nz r3.w
    imm_atomic_iadd r4.x, g2, l(0), l(1)
    store_structured g3.x, r4.x, l(0), r2.w
  endif 
  iadd r2.w, r2.w, l(256)
endloop 
sync_g_t
ld_raw r2.x, l(0), g2.xxxx
mov r2.y, r0.x
loop 
  uge r2.z, r2.y, r2.x
  breakc_nz r2.z
  ld_structured r2.z, r2.y, l(0), g3.xxxx
  mov r2.w, l(0)
  mov r3.x, l(0)
  loop 
    uge r3.y, r3.x, r2.x
    breakc_nz r3.y
    ld_structured r3.y, r3.x, l(0), g3.xxxx
    ilt r3.y, r3.y, r2.z
    iadd r2.w, r2.w, -r3.y
    iadd r3.x, r3.x, l(1)
  endloop 
  store_structured g4.x, r2.w, l(0), r2.z
  iadd r2.y, r2.y, l(256)
endloop 
sync_g_t
ld_indexable(texture2d)(float,float,float,float) r2.yzw, r1.xyww, t0.wxyz
ld_indexable(texture2d)(float,float,float,float) r3.xyzw, r1.xyww, t1.xzyw
ld_indexable(texture2d)(float,float,float,float) r4.xyzw, r1.xyww, t2.xyzw
mad r2.yzw, r2.yyzw, l(0.000000, 2.000000, 2.000000, 2.000000), l(0.000000, -1.000000, -1.000000, -1.000000)
dp3 r0.x, r2.yzwy, r2.yzwy
rsq r0.x, r0.x
mul r5.xyz, r0.xxxx, r2.yzwy

lt r6.x, l(0.500000), r3.w
movc r6.x, r6.x, l(-0.500000), l(-0.000000)
add r3.w, r3.w, r6.x
mul r3.w, r3.w, l(14.000000)
ftou r3.w, r3.w
mad r4.w, r4.w, l(16.000000), l(-8.000000)
exp r4.w, r4.w
add r4.w, r4.w, l(-0.00390625000)
lt r6.xy, l(0.000000, 0.000000, 0.000000, 0.000000), cb0[0].yzyy
and r6.y, r6.y, r6.x
if_nz r6.y
  mad r6.yz, r0.yyzy, cb1[41].xxyx, cb1[41].wwzw
  sample_l_indexable(texture2d)(float,float,float,float) r6.yzw, r6.yzyy, t8.wxyz, s3, l(0.000000)
  dp3 r6.y, r6.yzwy, r6.yzwy
  sqrt r6.y, r6.y
  mov r5.w, l(1.000000)
  dp4 r7.x, cb1[115].xyzw, r5.xyzw
  dp4 r7.y, cb1[116].xyzw, r5.xyzw
  dp4 r7.z, cb1[117].xyzw, r5.xyzw
  mul r8.xyzw, r5.yzzx, r5.xyzz
  dp4 r9.x, cb1[118].xyzw, r8.xyzw
  dp4 r9.y, cb1[119].xyzw, r8.xyzw
  dp4 r9.z, cb1[120].xyzw, r8.xyzw
  mul r5.w, r5.y, r5.y
  mad r5.w, r5.x, r5.x, -r5.w
  add r7.xyz, r7.xyzx, r9.xyzx
  mad r7.xyz, cb1[121].xyzx, r5.wwww, r7.xyzx
  max r7.xyz, r7.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
  mul r7.xyz, r7.xyzx, cb1[114].xyzx
  dp3 r5.w, r7.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
  mad r4.w, r5.w, r6.y, r4.w
endif 
if_nz r3.w
  mul r5.w, r3.z, l(0.080000)
  mad r4.xyz, -r3.zzzz, l(0.080000, 0.080000, 0.080000, 0.000000), r4.xyzx
  mad r4.xyz, r3.xxxx, r4.xyzx, r5.wwww
  mad r4.xyz, r4.xyzx, cb1[48].wwww, cb1[48].xyzx
  resinfo_indexable(texture2d)(float,float,float,float)_uint r6.yz, l(0), t5.zxyw
  utof r7.xy, r1.xyxx
  add r7.xy, r7.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
  utof r6.yz, r6.yyzy
  div r6.yz, r7.xxyx, r6.yyzy
  sample_l_indexable(texture2d)(float,float,float,float) r3.z, r6.yzyy, t4.yzxw, s0, l(0.000000)

// float4 HomogeneousWorldPosition = mul(float4(ScreenPosition * SceneDepth, SceneDepth, 1), View.ScreenToWorld);
  mul r6.yz, r0.wwww, r0.yyzy

// Move environment reflections to infinity:
mad r6.y, -r10.x, r0.w, r6.y

// View.ScreenToWorld:
  mul r7.xyzw, r6.zzzz, cb1[29].xyzw
  mad r7.xyzw, r6.yyyy, cb1[28].xyzw, r7.xyzw
  mad r7.xyzw, r0.wwww, cb1[30].xyzw, r7.xyzw
  add r7.xyzw, r7.xyzw, cb1[31].xyzw

// float3 WorldPosition = HomogeneousWorldPosition.xyz / HomogeneousWorldPosition.w;
  div r6.yzw, r7.xxyz, r7.wwww

// float3 CameraToPixel = normalize(WorldPosition - View.ViewOrigin.xyz);
  add r7.xyz, r6.yzwy, -cb1[44].xyzx
  dp3 r0.w, r7.xyzx, r7.xyzx
  rsq r0.w, r0.w

  mul r7.xyz, r0.wwww, r7.xyzx
  dp3 r3.x, -r7.xyzx, r5.xyzx
  add r0.w, r3.x, r3.x
  mad r7.xyz, r0.wwww, r5.xyzx, r7.xyzx
  mov_sat r3.x, r3.x
  mul r0.w, r3.y, r3.y
  mad r5.w, -r3.y, r3.y, l(1.000000)
  sqrt r7.w, r5.w
  mad r7.w, r3.y, r3.y, r7.w
  mul r5.w, r5.w, r7.w
  mad r2.yzw, -r2.yyzw, r0.xxxx, r7.xxyz
  mad r2.yzw, r5.wwww, r2.yyzw, r5.xxyz

// Screen Space reflections:
  ld_indexable(texture2d)(float,float,float,float) r5.xyzw, r1.xyww, t10.xyzw

  add r0.x, -r5.w, l(1.000000)
  add r5.w, r3.z, r3.x
  log r5.w, r5.w
  mul r0.w, r0.w, r5.w
  exp r0.w, r0.w
  add r0.w, r3.z, r0.w
  add_sat r0.w, r0.w, l(-1.000000)
  mul r0.x, r0.w, r0.x
  log r0.w, r3.y
  mad r0.w, -r0.w, l(1.200000), l(1.000000)
  add r0.w, -r0.w, l(6.000000)
  mov r7.xyz, r5.xyzx
  mov r3.z, r0.x
  mov r5.w, l(0)
  loop 
    uge r7.w, r5.w, r2.x
    breakc_nz r7.w
    lt r7.w, r3.z, l(0.001000)
    if_nz r7.w
      break 
    endif 
    ld_structured r7.w, r5.w, l(0), g4.xxxx
    add r8.xyz, r6.yzwy, -cb2[r7.w + 0].xyzx
    dp3 r8.w, r8.xyzx, r8.xyzx
    sqrt r9.x, r8.w
    lt r9.y, r9.x, cb2[r7.w + 0].w
    if_nz r9.y
      div_sat r9.x, r9.x, cb2[r7.w + 0].w
      dp3 r9.y, r2.yzwy, r8.xyzx
      mad r8.w, -cb2[r7.w + 0].w, cb2[r7.w + 0].w, r8.w
      mad r8.w, r9.y, r9.y, -r8.w
      sqrt r8.w, r8.w
      add r8.w, -r9.y, r8.w
      mad r8.xyz, r8.wwww, r2.yzwy, r8.xyzx
      mad r9.x, r9.x, l(2.500000), l(-1.500000)
      max r9.x, r9.x, l(0.000000)
      mul r9.y, r9.x, r9.x
      mad r9.x, -r9.x, l(2.000000), l(3.000000)
      mad r9.x, -r9.y, r9.x, l(1.000000)
      mov r8.w, cb2[r7.w + 341].y

// Clouds:
      sample_l_indexable(texturecubearray)(float,float,float,float) r8.xyzw, r8.xyzw, t9.xyzw, s4, r0.w

      mul r8.xyz, r4.wwww, r8.xyzx
      mul r8.xyz, r8.xyzx, cb2[r7.w + 341].xxxx
      mul r8.xyz, r9.xxxx, r8.xyzx
      mad r7.xyz, r8.xyzx, r3.zzzz, r7.xyzx
      mad r7.w, -r8.w, r9.x, l(1.000000)
      mul r3.z, r3.z, r7.w
    endif 
    iadd r5.w, r5.w, l(1)
  endloop 
  ge r0.x, r3.z, l(0.001000)
  and r0.x, r0.x, r6.x
  if_nz r0.x
    lt r0.x, cb0[0].z, l(1.000000)

// Blue sky:
    sample_l_indexable(texturecube)(float,float,float,float) r5.xyz, r2.yzwy, t7.xyzw, s2, r0.w
    if_nz r0.x
// Blue sky tint on every surface:
      sample_l_indexable(texturecube)(float,float,float,float) r6.xyz, r2.yzwy, t7.xyzw, s2, cb0[0].x
      dp3 r0.w, r6.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
      max r0.w, r0.w, l(0.000010)
      div r5.xyz, r5.xyzx, r0.wwww
    endif 
    mul r5.xyz, r5.xyzx, cb1[114].xyzx
    mul r6.xyz, r4.wwww, r5.xyzx
    movc r5.xyz, r0.xxxx, r6.xyzx, r5.xyzx
    mad r0.xy, r0.yzyy, cb1[41].xyxx, cb1[41].wzww
    ieq r0.z, r3.w, l(6)
    lt r0.w, l(0.000000), cb0[0].w
    if_nz r0.w
      sample_l_indexable(texture2d)(float,float,float,float) r0.xyw, r0.xyxx, t8.xywz, s3, l(0.000000)
      dp3 r2.x, r0.xywx, r0.xywx
      sqrt r2.x, r2.x
      if_z r0.z
        mul r0.z, r2.x, cb0[1].x
        mul r3.w, r0.z, l(3.14159274)
        dp3 r0.x, r0.xywx, r2.yzwy
        max r0.y, r2.x, l(0.001000)
        div r0.x, r0.x, r0.y
        add r0.y, -|r0.x|, l(1.000000)
        sqrt r0.y, r0.y
        mad r0.w, |r0.x|, l(-0.0187292993), l(0.074261)
        mad r0.w, r0.w, |r0.x|, l(-0.212114394)
        mad r0.w, r0.w, |r0.x|, l(1.57072878)
        mul r2.y, r0.y, r0.w
        mad r2.y, r2.y, l(-2.000000), l(3.14159274)
        lt r0.x, r0.x, -r0.x
        and r0.x, r0.x, r2.y
        mad r0.x, r0.w, r0.y, r0.x
        mad r0.y, r3.y, l(3.14159274), -r3.w
        add r0.x, -|r0.y|, r0.x
        mad r0.w, r3.y, l(3.14159274), r3.w
        add r0.y, -|r0.y|, r0.w
        div_sat r0.x, r0.x, r0.y
        add r0.x, -r0.x, l(1.000000)
        mad r0.y, r0.x, l(-2.000000), l(3.000000)
        mul r0.x, r0.x, r0.x
        mul r0.x, r0.x, r0.y
        mad r0.y, r0.z, l(3.14159274), l(-0.100000)
        mul_sat r0.y, r0.y, l(5.000000)
        mul r0.z, r0.x, r0.y
        mad r0.x, -r0.y, r0.x, l(1.000000)
        mad r2.x, cb0[1].y, r0.x, r0.z
      endif 
    else 
      mov r2.x, l(1.000000)
    endif 
    mul r0.x, r2.x, r3.z
    mad r7.xyz, r0.xxxx, r5.xyzx, r7.xyzx
  endif 
  sample_l_indexable(texture2d)(float,float,float,float) r0.xy, r3.xyxx, t6.xyzw, s1, l(0.000000)
  mul_sat r0.z, r4.y, l(50.000000)
  mul r0.y, r0.y, r0.z
  mad r0.xyz, r4.xyzx, r0.xxxx, r0.yyyy
  mul r0.xyz, r0.xyzx, r7.xyzx
else 
  mov r0.xyz, l(0,0,0,0)
endif 
ult r2.xy, vThreadID.xyxx, cb0[2].zwzz
and r0.w, r2.y, r2.x
if_nz r0.w
  min r0.xyz, -r0.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
  mov r0.xyz, -r0.xyzx
  ld_indexable(texture2d)(float,float,float,float) r2.xyzw, r1.xyzw, t11.xyzw
  mov r0.w, l(0)
  add r0.xyzw, r0.xyzw, r2.xyzw
  store_uav_typed u0.xyzw, r1.xyyy, r0.xyzw
endif 
ret 
// Approximately 0 instruction slots used