// Water reflection w/ ripples- Game bug: heavily distorted based on camera angle/position, even in 2D
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.30.960.8229
//
//   using 3Dmigoto v1.3.2 on Wed Mar 21 10:55:39 2018
//
//
// Buffer Definitions:
//
// cbuffer PER_BATCH
// {
//
//   row_major float4x4 TexGen2;        // Offset:    0 Size:    64
//   float4 ClipVolumeParams;           // Offset:   64 Size:    16
//   float4 GiSettings;                 // Offset:   80 Size:    16 [unused]
//   row_major float4x4 mViewProjPrev;  // Offset:   96 Size:    64
//   float4 vAdaption;                  // Offset:  160 Size:    16 [unused]
//   float4 fOneDivFarDist;             // Offset:  176 Size:    16
//   float4 PS_WorldViewPos;            // Offset:  192 Size:    16
//   row_major float4x4 TexGen1;        // Offset:  208 Size:    64
//   row_major float4x4 TexGen0;        // Offset:  272 Size:    64
//   float4 irreg_kernel_2d[8];         // Offset:  336 Size:   128
//   float4 CloudShadowParams;          // Offset:  464 Size:    16 [unused]
//   float4 PS_ScreenSize;              // Offset:  480 Size:    16
//   float4 PS_NearFarClipDist;         // Offset:  496 Size:    16
//   float4 ForwGiIntegrationMode;      // Offset:  512 Size:    16
//   float4 fDepthTestBias;             // Offset:  528 Size:    16
//   float4 PS_HPosScale;               // Offset:  544 Size:    16
//   row_major float4x4 TexGen3;        // Offset:  560 Size:    64
//   float4 vInvShadowMapSize;          // Offset:  624 Size:    16 [unused]
//   float4 CloudShadowAnimParams;      // Offset:  640 Size:    16 [unused]
//   float4 fKernelRadius;              // Offset:  656 Size:    16
//
// }
//
// cbuffer PER_INSTANCE
// {
//
//   float4 Ambient;                    // Offset:    0 Size:    16 [unused]
//   row_major float4x4 mViewProj;      // Offset:   16 Size:    64
//   float4 AvgFogVolumeContrib;        // Offset:   80 Size:    16 [unused]
//   row_major float4x4 CompMatrix;     // Offset:   96 Size:    64 [unused]
//   float4 AlphaTest;                  // Offset:  160 Size:    16 [unused]
//
// }
//
// cbuffer PER_FRAME
// {
//
//   float4 g_PS_SunColor;              // Offset:   16 Size:    16
//   float4 g_PS_SunLightDir;           // Offset:   32 Size:    16
//   float4 g_PS_ProjRatio;             // Offset: 3568 Size:    16
//
// }
//
// cbuffer PER_MATERIAL
// {
//
//   float4 MatSpecColor;               // Offset:   16 Size:    16
//   float2 __0RealtimeReflMul__1EnvCubeReflMul__2__3;// Offset:   80 Size:     8
//   float2 __0DetailNormalsScale__1NormalsScale__2__3;// Offset:   96 Size:     8 [unused]
//   float4 __0__1__2__3EnvCubeScale;   // Offset:  112 Size:    16 [unused]
//   float4 __0SoftIntersectionFactor__1RainTilling__2DetailTilling__3Tilling;// Offset:  128 Size:    16 [unused]
//
// }
//
// Resource bind info for TiledLightsShadeInfo
// {
//
//   struct STiledLightShadeInfo
//   {
//
//       uint lightType;                // Offset:    0
//       uint resIndex;                 // Offset:    4
//       uint shadowMaskIndex;          // Offset:    8
//       uint stencilID;                // Offset:   12
//       float4 posRad;                 // Offset:   16
//       float2 attenuationParams;      // Offset:   32
//       float2 shadowParams;           // Offset:   40
//       float4 color;                  // Offset:   48
//       float4 shadowChannelIndex;     // Offset:   64
//       row_major float4x4 projectorMatrix;// Offset:   80
//       row_major float4x4 shadowMatrix;// Offset:  144
//
//   } $Element;                        // Offset:    0 Size:   208
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// SAMPLER_STATE_depthMapSampler   sampler_c      NA          NA    1        1
// TrilinearClampSamplerState        sampler      NA          NA    2        1
// RefractionHalfResSampler          sampler      NA          NA    3        1
// ReflSamplerPrev                   sampler      NA          NA    4        1
// sceneDepthSamplerScaled           sampler      NA          NA    5        1
// SampStateComp                   sampler_c      NA          NA   14        1
// sceneDepthSamplerScaled           texture  float4          2d    0        1
// RefractionHalfResSampler          texture  float4          2d    1        1
// ReflSamplerPrev                   texture  float4          2d    2        1
// depthMapSampler3                  texture  float4          2d    3        1
// depthMapSampler2                  texture  float4          2d    4        1
// depthMapSampler0                  texture  float4          2d    5        1
// depthMapSampler1                  texture  float4          2d    6        1
// TiledLightsShadeInfo              texture  struct         r/o   16        1
// SpotTexArray                      texture  float4     2darray   19        1
// ShadowPool                        texture  float4          2d   20        1
// RandomRotations                   texture  float4          2d   21        1
// TileLightIndices                  texture    uint         buf   22        1
// ForwGiDiffuseRT                   texture  float4          2d   26        1
// ForwGiSpecularRT                  texture  float4          2d   27        1
// PER_BATCH                         cbuffer      NA          NA    0        1
// PER_INSTANCE                      cbuffer      NA          NA    1        1
// PER_FRAME                         cbuffer      NA          NA    2        1
// PER_MATERIAL                      cbuffer      NA          NA    3        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float
// TEXCOORD                 0   xyzw        1     NONE   float
// TEXCOORD                 1   xyzw        2     NONE   float   xy w
// TEXCOORD                 2   xyzw        3     NONE   float   xyz
// TEXCOORD                 3   xyzw        4     NONE   float
// TEXCOORD                 4   xyzw        5     NONE   float   xyz
// TEXCOORD                 5   xyzw        6     NONE   float
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
//
ps_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer cb0[42], dynamicIndexed
dcl_constantbuffer cb1[5], immediateIndexed
dcl_constantbuffer cb2[224], immediateIndexed
dcl_constantbuffer cb3[6], immediateIndexed

// ResourceIVP:
dcl_constantbuffer cb12[4], immediateIndexed

dcl_sampler s1, mode_comparison
dcl_sampler s2, mode_default
dcl_sampler s3, mode_default
dcl_sampler s4, mode_default
dcl_sampler s5, mode_default
dcl_sampler s14, mode_comparison
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texture2d (float,float,float,float) t2
dcl_resource_texture2d (float,float,float,float) t3
dcl_resource_texture2d (float,float,float,float) t4
dcl_resource_texture2d (float,float,float,float) t5
dcl_resource_texture2d (float,float,float,float) t6
dcl_resource_structured t16, 208
dcl_resource_texture2darray (float,float,float,float) t19
dcl_resource_texture2d (float,float,float,float) t20
dcl_resource_texture2d (float,float,float,float) t21
dcl_resource_buffer (uint,uint,uint,uint) t22
dcl_resource_texture2d (float,float,float,float) t26
dcl_resource_texture2d (float,float,float,float) t27
dcl_input_ps linear v2.xyw
dcl_input_ps linear v3.xyz
dcl_input_ps linear v5.xyz
dcl_output o0.xyzw
dcl_temps 27

dcl_resource_texture2d (float,float,float,float) t125
ld_indexable(texture2d)(float,float,float,float) r24.xyzw, l(0, 0, 0, 0), t125.xyzw

// Calculate world view correction for accurate reflections:
mul r26.x, r24.x, -r24.y
mov r26.yzw, l(0, 0, 0, 0)
dp4 r25.x, r26.xyzw, cb12[0].xyzw
dp4 r25.y, r26.xyzw, cb12[1].xyzw
dp4 r25.z, r26.xyzw, cb12[2].xyzw
dp4 r25.w, r26.xyzw, cb12[3].xyzw

mul r0.z, v2.w, cb0[31].w
div r1.xy, v2.xyxx, v2.wwww
sample_indexable(texture2d)(float,float,float,float) r1.z, r1.xyxx, t0.yzxw, s5

// Debugging: Show sampled depth (revealed that DS needed a stereo correction):
//mul o0.xyzw, r1.zzzz, l(100.0, 100.0, 100.0, 100.0)
//ret

mad r1.z, -v2.w, cb0[31].w, r1.z
lt r1.z, r1.z, l(0.000000)
discard_nz r1.z
dp3 r1.z, v3.xyzx, v3.xyzx
rsq r1.z, r1.z
mul r2.xyz, r1.zzzz, v3.zxyz
mul r3.xy, cb0[30].xyxx, l(0.125000, 0.125000, 0.000000, 0.000000)
round_pi r3.xy, r3.xyxx
ftou r3.xy, r3.xyxx
utof r3.yz, r3.xxyx
mul r3.yz, r1.xxyx, r3.yyzy
ftou r3.yz, r3.yyzy
imad r1.w, r3.z, r3.x, r3.y
mov r2.w, l(0)
loop
  uge r3.x, r2.w, l(255)
  breakc_nz r3.x
  imad r3.x, r1.w, l(255), r2.w
  ld_indexable(buffer)(uint,uint,uint,uint) r3.x, r3.xxxx, t22.xyzw
  uge r3.y, r3.x, l(255)
  ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r3.x, r3.x, l(0), t16.xxxx
  ult r3.x, l(4), r3.x
  or r3.x, r3.x, r3.y
  if_nz r3.x
    break
  endif
  iadd r2.w, r2.w, l(1)
endloop
ftoi r3.x, cb0[32].y
if_z r3.x
  mov r3.yzw, l(0,0,0,0)
  mov r4.xyz, l(0,0,0,0)
else
  div r5.xy, l(0.500000, 0.500000, 0.000000, 0.000000), cb0[30].xyxx
  add r1.xy, r1.xyxx, r5.xyxx
  ieq r4.w, r3.x, l(1)
  if_nz r4.w
    sample_l_indexable(texture2d)(float,float,float,float) r4.xyz, r1.xyxx, t26.xyzw, s2, l(0.000000)
    mov r3.yzw, l(0,0,0,0)
  else
    ieq r3.x, r3.x, l(2)
    if_nz r3.x
      sample_l_indexable(texture2d)(float,float,float,float) r4.xyz, r1.xyxx, t26.xyzw, s2, l(0.000000)
      sample_l_indexable(texture2d)(float,float,float,float) r3.yzw, r1.xyxx, t27.wxyz, s2, l(0.000000)
    else
      mov r3.yzw, l(0,0,0,0)
      mov r4.xyz, l(0,0,0,0)
    endif
  endif
endif
ftou r1.x, cb0[4].x
mov r5.w, l(1.000000)
mov r6.w, l(1.000000)
mov r7.w, l(1.000000)
mov r8.zw, l(0,0,0,0)
mov r7.xyz, -v3.xyzx
mov r9.xyz, r2.yzxy
mov r10.xyz, cb3[1].xyzx
mov r11.xyz, r3.yzwy
mov r1.y, cb3[1].w
mov r3.x, r2.w
loop
  uge r4.w, r3.x, l(255)
  breakc_nz r4.w
  imad r4.w, r1.w, l(255), r3.x
  ld_indexable(buffer)(uint,uint,uint,uint) r4.w, r4.wwww, t22.yzwx
  uge r9.w, r4.w, l(255)
  if_nz r9.w
    break
  endif
  ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r12.xyzw, r4.w, l(16), t16.xyzw
  add r12.xyz, -r7.xyzx, r12.xyzx
  ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r9.w, r4.w, l(0), t16.xxxx
  ult r9.w, l(4), r9.w
  dp3 r10.w, r12.xyzx, r12.xyzx
  sqrt r11.w, r10.w
  lt r12.w, r11.w, r12.w
  and r9.w, r9.w, r12.w
  if_nz r9.w
    ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r13.xy, r4.w, l(0), t16.xyxx
    ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r9.w, r4.w, l(12), t16.xxxx
    ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r13.zw, r4.w, l(28), t16.xxxy
    ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r14.xyzw, r4.w, l(40), t16.xyzw
    ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r15.xyzw, r4.w, l(80), t16.xyzw
    ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r16.xyzw, r4.w, l(144), t16.xyzw
    ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r17.xyzw, r4.w, l(160), t16.xyzw
    ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r18.xyzw, r4.w, l(192), t16.xyzw
    lt r19.y, l(0.000000), r14.x
    div r12.w, l(1.000000, 1.000000, 1.000000, 1.000000), r13.z
    add r13.z, -r11.w, r13.z
    mul r12.w, r12.w, r13.z
    mul_sat r12.w, r12.w, l(5.000000)
    add r11.w, r11.w, -r13.w
    max r11.w, r11.w, l(0.000000)
    div r11.w, r11.w, r13.w
    add r11.w, r11.w, l(1.000000)
    mul r12.w, r12.w, r12.w
    mul r11.w, r11.w, r11.w
    div r11.w, r12.w, r11.w
    and r12.w, r9.w, l(255)
    ushr r9.w, r9.w, l(16)
    ieq r13.z, r12.w, l(255)
    ieq r12.w, r1.x, r12.w
    or r12.w, r12.w, r13.z
    ieq r9.w, r1.x, r9.w
    or r9.w, r9.w, r12.w
    ieq r20.x, r9.w, l(0)
    ieq r9.w, r13.x, l(6)
    if_nz r9.w
      lt r9.w, l(0.000000), r11.w
      if_nz r9.w
        ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r21.xyzw, r4.w, l(96), t16.xyzw
        ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r22.xyzw, r4.w, l(128), t16.xyzw
        mov r5.xyz, r7.xyzx
        dp4 r23.x, r15.xyzw, r5.xyzw
        dp4 r23.y, r21.xyzw, r5.xyzw
        dp4 r5.x, r22.xyzw, r5.xyzw
        div r21.xy, r23.xyxx, r5.xxxx
        min r5.y, r21.y, r21.x
        lt r5.xy, r5.xyxx, l(0.000000, 0.000000, 0.000000, 0.000000)
        or r5.x, r5.y, r5.x
        max r5.y, r21.y, r21.x
        lt r5.y, l(1.000000), r5.y
        or r5.x, r5.y, r5.x
        if_nz r5.x
          mov r5.xyz, l(1.000000,1.000000,1.000000,0)
          mov r19.x, l(-1)
        else
          utof r21.z, r13.y
          sample_l_indexable(texture2darray)(float,float,float,float) r9.w, r21.xyzx, t19.yzwx, s2, l(0.000000)
          mov r5.xyz, r9.wwww
          mov r19.x, r20.x
        endif
      else
        mov r5.xyz, l(1.000000,1.000000,1.000000,0)
        mov r19.x, r20.x
      endif
    else
      ieq r9.w, r13.x, l(7)
      if_nz r9.w
        lt r21.xyz, |r12.yzzy|, |r12.xxyx|
        lt r22.xyz, r12.xzyx, l(0.000000, 0.000000, 0.000000, 0.000000)
        movc r22.xyz, r22.xyzx, l(0,4,2,0), l(1,5,3,0)
        movc r13.zw, r21.yyyz, r22.xxxz, r22.yyyy
        movc r9.w, r21.x, r13.z, r13.w
        ine r9.w, r9.w, r13.y
        or r19.x, r20.x, r9.w
      else
        mov r6.xyz, r7.xyzx
        dp4 r21.x, r16.xyzw, r6.xyzw
        dp4 r21.y, r17.xyzw, r6.xyzw
        dp4 r6.x, r18.xyzw, r6.xyzw
        div r6.yz, r21.xxyx, r6.xxxx
        lt r6.x, r6.x, l(0.000000)
        lt r13.yz, r6.yyzy, r15.xxyx
        or r6.x, r6.x, r13.y
        or r6.x, r13.z, r6.x
        lt r6.yz, r15.zzwz, r6.yyzy
        or r6.x, r6.y, r6.x
        or r6.x, r6.z, r6.x
        movc r20.y, r6.x, l(0), r19.y
        ieq r6.xy, r13.xxxx, l(8, 9, 0, 0)
        or r19.x, r20.x, r6.y
        movc r19.xy, r6.xxxx, r20.xyxx, r19.xyxx
      endif
      mov r5.xyz, l(1.000000,1.000000,1.000000,0)
    endif
    if_z r19.x
      ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r13.xy, r4.w, l(56), t16.xyxx
      rsq r6.x, r10.w
      mul r15.xyz, r6.xxxx, r12.xyzx
      mov r13.zw, r14.zzzw
      mul r13.xyz, r13.yyyy, r13.zwxz
      mov_sat r6.y, r15.z
      if_nz r19.y
        ld_structured_indexable(structured_buffer, stride=208)(mixed,mixed,mixed,mixed) r19.xyzw, r4.w, l(176), t16.xyzw
        dp4 r16.x, r16.xyzw, r7.xyzw
        dp4 r16.y, r17.xyzw, r7.xyzw
        dp4 r4.w, r19.xyzw, r7.xyzw
        dp4 r6.z, r18.xyzw, r7.xyzw
        div r16.xyzw, r16.xyxy, r6.zzzz
        add r4.w, -r14.y, r4.w
        mul r14.xy, r14.xxxx, l(1000.000000, 0.00195312500, 0.000000, 0.000000)
        mul r14.xz, r14.xxxx, r16.zzwz
        mul r14.xz, r14.xxzx, l(64.000000, 0.000000, 64.000000, 0.000000)
        ftoi r14.xz, r14.xxzx
        and r17.xy, r14.xzxx, l(0x80000000, 0x80000000, 0, 0)
        imax r14.xz, r14.xxzx, -r14.xxzx
        and r14.xz, r14.xxzx, l(63, 0, 63, 0)
        ineg r17.zw, r14.xxxz
        movc r8.xy, r17.xyxx, r17.zwzz, r14.xzxx
        ld_indexable(texture2d)(float,float,float,float) r8.xy, r8.xyzw, t21.xyzw
        mul r14.xyz, r14.yyyy, r8.yxxy
        mov r14.w, -r14.x
        mov r6.z, l(0)
        mov r8.x, l(0)
        loop
          ige r8.y, r8.x, l(8)
          breakc_nz r8.y
          mul r17.xyzw, r14.xzzw, cb0[r8.x + 21].yyzz
          mad r17.xyzw, r14.zwxz, cb0[r8.x + 21].xxww, r17.xyzw
          iadd r8.y, r8.x, l(1)
          mul r18.xyzw, r14.xyzw, cb0[r8.y + 21].yyzz
          mad r18.xyzw, r14.zwxz, cb0[r8.y + 21].xxww, r18.xyzw
          add r17.xyzw, r16.zwzw, r17.xyzw
          sample_c_lz_indexable(texture2d)(float,float,float,float) r19.x, r17.xyxx, t20.xxxx, s14, r4.w
          sample_c_lz_indexable(texture2d)(float,float,float,float) r19.y, r17.zwzz, t20.xxxx, s14, r4.w
          add r17.xyzw, r16.xyzw, r18.xyzw
          sample_c_lz_indexable(texture2d)(float,float,float,float) r19.z, r17.xyxx, t20.xxxx, s14, r4.w
          sample_c_lz_indexable(texture2d)(float,float,float,float) r19.w, r17.zwzz, t20.xxxx, s14, r4.w
          dp4 r8.y, r19.xyzw, l(0.062500, 0.062500, 0.062500, 0.062500)
          add r6.z, r6.z, r8.y
          iadd r8.x, r8.x, l(2)
        endloop
      else
        mov r6.z, l(1.000000)
      endif
      add r4.w, -r1.y, l(1.000000)
      mul r4.w, r4.w, r4.w
      max r4.w, r4.w, l(0.001000)
      mul r8.x, r4.w, r4.w
      mad r12.xyz, r12.xyzx, r6.xxxx, r9.xyzx
      dp3 r6.x, r12.xyzx, r12.xyzx
      rsq r6.x, r6.x
      mul r12.xyz, r6.xxxx, r12.xyzx
      mov_sat r6.x, r12.z
      mul r6.x, r6.x, r6.x
      mad r8.y, r4.w, r4.w, l(-1.000000)
      mad r6.x, r6.x, r8.y, l(1.000000)
      mul r6.x, r6.x, r6.x
      div r6.x, r8.x, r6.x
      mad r4.w, r4.w, l(0.500000), l(0.800000)
      mul r4.w, r4.w, r4.w
      mul r8.x, r4.w, l(0.500000)
      mov_sat r8.y, r9.z
      mad r4.w, -r4.w, l(0.500000), l(1.000000)
      mad r8.y, r8.y, r4.w, r8.x
      mad r4.w, r6.y, r4.w, r8.x
      mul r4.w, r4.w, r8.y
      max r4.w, r4.w, l(0.000001)
      div r4.w, r6.x, r4.w
      dp3 r6.x, r10.xyzx, l(0.333330, 0.333330, 0.333330, 0.000000)
      mul_sat r6.x, r6.x, l(50.000000)
      dp3 r8.x, r15.xyzx, r12.xyzx
      add r8.x, -r8.x, l(1.000000)
      mul r8.y, r8.x, r8.x
      mul r8.y, r8.y, r8.y
      mul r8.x, r8.y, r8.x
      add r12.xyz, -r10.xyzx, r6.xxxx
      mad r12.xyz, r8.xxxx, r12.xyzx, r10.xyzx
      mul r12.xyz, r4.wwww, r12.xyzx
      mul r12.xyz, r13.xyzx, r12.xyzx
      mul r12.xyz, r6.yyyy, r12.xyzx
      mul r12.xyz, r12.xyzx, l(0.250000, 0.250000, 0.250000, 0.000000)
      mul r4.w, r11.w, r6.z
      mul r5.xyz, r5.xyzx, r4.wwww
      mad r11.xyz, r12.xyzx, r5.xyzx, r11.xyzx
    endif
  endif
  iadd r3.x, r3.x, l(1)
endloop
mul r1.xyw, cb2[1].wwww, cb2[1].xyxz
if_nz cb0[41].z

// PS_WorldViewPos:
  add r3.xyz, -v3.xyzx, cb0[12].xyzx
add r3.xyz, r3.xyz, r25.xyz

  mov r3.w, l(1.000000)
  dp4 r5.x, cb0[17].xyzw, r3.xyzw
  dp4 r5.y, cb0[18].xyzw, r3.xyzw
  dp4 r2.y, cb0[19].xyzw, r3.xyzw
  dp4 r2.z, cb0[20].xyzw, r3.xyzw
  div r2.zw, r5.xxxy, r2.zzzz
  mad r2.y, r2.y, cb0[11].x, -cb0[33].x
  ge r5.xy, r2.zwzz, l(0.000000, 0.000000, 0.000000, 0.000000)
  ge r5.zw, l(0.000000, 0.000000, 1.000000, 1.000000), r2.zzzw
  and r4.w, r5.z, r5.x
  and r4.w, r5.y, r4.w
  and r4.w, r5.w, r4.w
  ge r5.x, l(1.000000), r2.y
  and r4.w, r4.w, r5.x
  if_nz r4.w
    sample_c_lz_indexable(texture2d)(float,float,float,float) r2.y, r2.zwzz, t5.xxxx, s1, r2.y
    mov r2.z, l(-1)
  else
    mov r2.y, l(1.000000)
  endif
  and r2.z, r2.z, r4.w
  not r2.z, r2.z
  and r2.w, cb0[41].z, l(2)
  ine r2.w, r2.w, l(0)
  and r2.z, r2.w, r2.z
  if_nz r2.z
    dp4 r5.x, cb0[13].xyzw, r3.xyzw
    dp4 r5.y, cb0[14].xyzw, r3.xyzw
    dp4 r2.z, cb0[15].xyzw, r3.xyzw
    dp4 r2.w, cb0[16].xyzw, r3.xyzw
    div r5.xy, r5.xyxx, r2.wwww
    mad r2.z, r2.z, cb0[11].y, -cb0[33].y
    ge r5.zw, r5.xxxy, l(0.000000, 0.000000, 0.000000, 0.000000)
    ge r6.xy, l(1.000000, 1.000000, 0.000000, 0.000000), r5.xyxx
    and r2.w, r5.z, r6.x
    and r2.w, r5.w, r2.w
    and r2.w, r6.y, r2.w
    ge r4.w, l(1.000000), r2.z
    and r2.w, r2.w, r4.w
    if_nz r2.w
      sample_c_lz_indexable(texture2d)(float,float,float,float) r2.y, r5.xyxx, t6.xxxx, s1, r2.z
      mov r2.z, l(-1)
    else
      mov r2.y, l(1.000000)
    endif
    and r2.z, r2.z, r2.w
    not r2.z, r2.z
    and r2.w, cb0[41].z, l(4)
    ine r2.w, r2.w, l(0)
    and r2.z, r2.w, r2.z
    if_nz r2.z
      dp4 r5.x, cb0[0].xyzw, r3.xyzw
      dp4 r5.y, cb0[1].xyzw, r3.xyzw
      dp4 r2.z, cb0[2].xyzw, r3.xyzw
      dp4 r2.w, cb0[3].xyzw, r3.xyzw
      div r5.xy, r5.xyxx, r2.wwww
      mad r2.z, r2.z, cb0[11].z, -cb0[33].z
      ge r5.zw, r5.xxxy, l(0.000000, 0.000000, 0.000000, 0.000000)
      ge r6.xy, l(1.000000, 1.000000, 0.000000, 0.000000), r5.xyxx
      and r2.w, r5.z, r6.x
      and r2.w, r5.w, r2.w
      and r2.w, r6.y, r2.w
      ge r4.w, l(1.000000), r2.z
      and r2.w, r2.w, r4.w
      if_nz r2.w
        sample_c_lz_indexable(texture2d)(float,float,float,float) r2.y, r5.xyxx, t4.xxxx, s1, r2.z
        mov r2.z, l(-1)
      else
        mov r2.y, l(1.000000)
      endif
      and r2.z, r2.z, r2.w
      not r2.z, r2.z
      and r2.w, cb0[41].z, l(8)
      ine r2.w, r2.w, l(0)
      and r2.z, r2.w, r2.z
      if_nz r2.z
        dp4 r5.x, cb0[35].xyzw, r3.xyzw
        dp4 r5.y, cb0[36].xyzw, r3.xyzw
        dp4 r2.z, cb0[37].xyzw, r3.xyzw
        dp4 r2.w, cb0[38].xyzw, r3.xyzw
        div r3.xy, r5.xyxx, r2.wwww
        mad r2.z, r2.z, cb0[11].w, -cb0[33].w
        ge r3.zw, r3.xxxy, l(0.000000, 0.000000, 0.000000, 0.000000)
        ge r5.xy, l(1.000000, 1.000000, 0.000000, 0.000000), r3.xyxx
        and r2.w, r3.z, r5.x
        and r2.w, r3.w, r2.w
        and r2.w, r5.y, r2.w
        ge r3.z, l(1.000000), r2.z
        and r2.w, r2.w, r3.z
        if_nz r2.w
          sample_c_lz_indexable(texture2d)(float,float,float,float) r2.y, r3.xyxx, t3.xxxx, s1, r2.z
        else
          mov r2.y, l(1.000000)
        endif
      endif
    endif
  endif
else
  mov r2.y, l(0)
endif
mov_sat r2.z, cb2[2].z
add r2.w, l(1.000000), -cb3[1].w
mul r2.w, r2.w, r2.w
max r2.w, r2.w, l(0.001000)
mul r3.x, r2.w, r2.w
mad r3.yzw, v3.xxyz, r1.zzzz, cb2[2].xxyz
dp3 r1.z, r3.yzwy, r3.yzwy
rsq r1.z, r1.z
mul r3.yzw, r1.zzzz, r3.yyzw
mov_sat r1.z, r3.w
mul r1.z, r1.z, r1.z
mad r4.w, r2.w, r2.w, l(-1.000000)
mad r1.z, r1.z, r4.w, l(1.000000)
mul r1.z, r1.z, r1.z
div r1.z, r3.x, r1.z
mad r2.w, r2.w, l(0.500000), l(0.800000)
mul r2.w, r2.w, r2.w
mul r3.x, r2.w, l(0.500000)
mov_sat r2.x, r2.x
mad r2.w, -r2.w, l(0.500000), l(1.000000)
mad r2.x, r2.x, r2.w, r3.x
mad r2.w, r2.z, r2.w, r3.x
mul r2.x, r2.w, r2.x
max r2.x, r2.x, l(0.000001)
div r1.z, r1.z, r2.x
dp3 r2.x, cb3[1].xyzx, l(0.333330, 0.333330, 0.333330, 0.000000)
mul_sat r2.x, r2.x, l(50.000000)
dp3 r2.w, cb2[2].xyzx, r3.yzwy
add r2.w, -r2.w, l(1.000000)
mul r3.x, r2.w, r2.w
mul r3.x, r3.x, r3.x
mul r2.w, r2.w, r3.x
add r3.xyz, r2.xxxx, -cb3[1].xyzx
mad r3.xyz, r2.wwww, r3.xyzx, cb3[1].xyzx
mul r3.xyz, r1.zzzz, r3.xyzx
mul r1.xyz, r1.xywx, r3.xyzx
mul r1.xyz, r1.xyzx, r2.zzzz
mul r1.xyz, r2.yyyy, r1.xyzx
mad r1.xyz, r1.xyzx, l(0.250000, 0.250000, 0.250000, 0.000000), r11.xyzx
add r1.xyz, r1.xyzx, r4.xyzx
mul r1.xyz, r1.xyzx, cb3[1].xyzx
mul r1.w, cb0[34].y, l(0.150000)

// PS_WorldViewPos:
add r2.xyz, v5.xyzx, -cb0[12].xyzx
add r2.xyz, r2.xyz, r25.xyz

dp3 r2.w, r2.xyzx, r2.xyzx
rsq r2.w, r2.w
mul r2.xyz, r2.wwww, r2.xyzx
mad r3.xyz, r2.zzzz, l(-0.000000, -0.000000, -2.000000, 0.000000), r2.xyzx
dp3 r2.w, r3.xyzx, r3.xyzx
rsq r2.w, r2.w
mul r3.xyz, r2.wwww, r3.xyzx
mov r4.xyz, v5.xyzx
mov r4.w, l(1.000000)

// mViewProj:
dp4 r5.x, cb1[1].xyzw, r4.xyzw
dp4 r5.y, cb1[2].xyzw, r4.xyzw
dp4 r0.w, cb1[4].xyzw, r4.xyzw

add r24.w, r0.w, -r24.y
mad r5.x, r24.w, r24.x, r5.x

mul r2.w, r0.w, l(0.500000)
mad r5.xy, r5.xyxx, l(0.500000, -0.500000, 0.000000, 0.000000), r2.wwww
mul r0.xy, r5.xyxx, cb0[34].xyxx
mad r5.xyz, r3.xyzx, l(129.000000, 129.000000, 129.000000, 0.000000), v5.xyzx
mov r5.w, l(1.000000)

// mViewProj:
dp4 r6.x, cb1[1].xyzw, r5.xyzw
dp4 r6.y, cb1[2].xyzw, r5.xyzw
dp4 r2.w, cb1[4].xyzw, r5.xyzw

add r24.w, r2.w, -r24.y
mad r6.x, r24.w, r24.x, r6.x

mul r3.w, r2.w, l(0.500000)
mad r5.xy, r6.xyxx, l(0.500000, -0.500000, 0.000000, 0.000000), r3.wwww
mul r5.xy, r5.xyxx, cb0[34].xyxx
div r5.xy, r5.xyxx, r2.wwww
add r2.w, -r5.y, l(1.000000)
min r2.w, r5.y, r2.w
lt r3.w, r1.w, r2.w
div_sat r2.w, r2.w, r1.w
movc r6.w, r3.w, l(1.000000), r2.w
div r2.w, l(3.187500), cb0[31].y
mad r7.xyz, r3.xyzx, l(17.000000, 17.000000, 17.000000, 0.000000), v5.xyzx
mov r7.w, l(1.000000)

// mViewProj:
dp4 r8.x, cb1[1].xyzw, r7.xyzw
dp4 r8.y, cb1[2].xyzw, r7.xyzw
dp4 r3.w, cb1[3].xyzw, r7.xyzw
dp4 r7.w, cb1[4].xyzw, r7.xyzw

add r24.w, r7.w, -r24.y
mad r8.x, r24.w, r24.x, r8.x

div r3.w, r3.w, r7.w
add r3.w, r3.w, -cb2[223].x
div r7.z, cb2[223].y, r3.w
mul r3.w, r7.w, l(0.500000)
mad r5.zw, r8.xxxy, l(0.000000, 0.000000, 0.500000, -0.500000), r3.wwww
mul r7.xy, r5.zwzz, cb0[34].xyxx
add r8.xyzw, -r0.xyzw, r7.xyzw
mad r9.xyzw, r8.xyzw, l(0.125000, 0.125000, 0.125000, 0.125000), r0.xyzw
div r5.zw, r9.xxxy, r9.wwww
sample_indexable(texture2d)(float,float,float,float) r3.w, r5.zwzz, t0.yzwx, s5
add r3.w, -r9.z, r3.w
ge r3.w, |r3.w|, r2.w
mad r9.xyzw, r8.xyzw, l(0.250000, 0.250000, 0.250000, 0.250000), r0.xyzw
div r5.zw, r9.xxxy, r9.wwww
sample_indexable(texture2d)(float,float,float,float) r5.z, r5.zwzz, t0.yzxw, s5
mad r10.xyzw, r8.xyzw, l(0.375000, 0.375000, 0.375000, 0.375000), r0.xyzw
div r9.xy, r10.xyxx, r10.wwww
sample_indexable(texture2d)(float,float,float,float) r5.w, r9.xyxx, t0.yzwx, s5
mad r11.xyzw, r8.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000), r0.xyzw
div r9.xy, r11.xyxx, r11.wwww
sample_indexable(texture2d)(float,float,float,float) r9.x, r9.xyxx, t0.xyzw, s5
mad r12.xyzw, r8.xyzw, l(0.625000, 0.625000, 0.625000, 0.625000), r0.xyzw
div r9.yw, r12.xxxy, r12.wwww
sample_indexable(texture2d)(float,float,float,float) r9.y, r9.ywyy, t0.yxzw, s5
mad r13.xyzw, r8.xyzw, l(0.750000, 0.750000, 0.750000, 0.750000), r0.xyzw
div r10.xy, r13.xyxx, r13.wwww
sample_indexable(texture2d)(float,float,float,float) r9.w, r10.xyxx, t0.yzwx, s5
mad r14.xyzw, r8.xyzw, l(0.875000, 0.875000, 0.875000, 0.875000), r0.xyzw
div r10.xy, r14.xyxx, r14.wwww
sample_indexable(texture2d)(float,float,float,float) r0.z, r10.xyxx, t0.yzxw, s5
div r7.xy, r7.xyxx, r7.wwww
sample_indexable(texture2d)(float,float,float,float) r7.x, r7.xyxx, t0.xyzw, s5
if_nz r3.w
  add r3.w, -r9.z, r5.z
  ge r3.w, |r3.w|, r2.w
  if_nz r3.w
    add r3.w, -r10.z, r5.w
    ge r3.w, |r3.w|, r2.w
    if_nz r3.w
      add r3.w, -r11.z, r9.x
      ge r3.w, |r3.w|, r2.w
      if_nz r3.w
        add r3.w, -r12.z, r9.y
        ge r3.w, |r3.w|, r2.w
        if_nz r3.w
          add r3.w, -r13.z, r9.w
          ge r3.w, |r3.w|, r2.w
          if_nz r3.w
            add r0.z, -r14.z, r0.z
            ge r0.z, |r0.z|, r2.w
            if_nz r0.z
              add r0.z, -r7.z, r7.x
              ge r0.z, |r0.z|, r2.w
              movc r0.z, r0.z, l(0), l(1.000000)
            else
              mov r0.z, l(0.875000)
            endif
          else
            mov r0.z, l(0.750000)
          endif
        else
          mov r0.z, l(0.625000)
        endif
      else
        mov r0.z, l(0.500000)
      endif
    else
      mov r0.z, l(0.375000)
    endif
  else
    mov r0.z, l(0.250000)
  endif
else
  mov r0.z, l(0.125000)
endif
lt r2.w, l(0.000000), r0.z

// Optionally disable the weird distortion the game applies here:
//mov r2.w, l(0.0)

if_nz r2.w
  mad r0.xyw, r8.xyxw, r0.zzzz, r0.xyxw
  div r0.xy, r0.xyxx, r0.wwww
  sample_l_indexable(texture2d)(float,float,float,float) r6.xyz, r0.xyxx, t1.xyzw, s3, l(0.000000)
  add r0.x, -r0.y, l(1.000000)
  min r0.x, r0.y, r0.x
  lt r0.y, r1.w, r0.x
  div_sat r0.x, r0.x, r1.w
  movc r0.x, r0.y, l(1.000000), r0.x
  add r0.y, -r0.z, l(1.000000)
  mad r6.w, r0.x, r0.y, r6.w
else
  sample_l_indexable(texture2d)(float,float,float,float) r6.xyz, r5.xyxx, t1.xyzw, s3, l(0.000000)
endif

dp3 r0.x, r2.xyzx, r3.xyzx
add_sat r0.x, r0.x, l(0.500000)
mul r0.xyzw, r0.xxxx, r6.xyzw
mul r0.xyz, r0.wwww, r0.xyzx
div r0.xyz, r0.xyzx, cb2[2].wwww
mul r1.xyz, r1.xyzx, cb3[5].yyyy
min r0.w, r0.w, l(1.000000)
mad r0.xyz, r0.xyzx, cb3[5].xxxx, -r1.xyzx
mad r0.xyz, r0.wwww, r0.xyzx, r1.xyzx

// mViewProjPrev:
dp4 r1.x, cb0[6].xyzw, r4.xyzw
dp4 r1.y, cb0[7].xyzw, r4.xyzw
dp4 r0.w, cb0[9].xyzw, r4.xyzw

add r24.w, r0.w, -r24.y
mad r1.x, r24.w, r24.x, r1.x

mad r1.xy, r1.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000), r0.wwww
mul r1.xy, r1.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
div r1.xy, r1.xyxx, r0.wwww
mul r2.x, r1.x, cb0[34].z
add r0.w, -r1.y, l(1.000000)
mad r2.y, -r0.w, cb0[34].w, l(1.000000)
sample_indexable(texture2d)(float,float,float,float) r1.xyz, r2.xyxx, t2.xyzw, s4
div r1.xyz, r1.xyzx, cb2[2].wwww
and r2.xyz, r1.xyzx, l(0x7f800000, 0x7f800000, 0x7f800000, 0)
ine r2.xyz, r2.xyzx, l(0x7f800000, 0x7f800000, 0x7f800000, 0)
and r1.xyz, r1.xyzx, r2.xyzx
mul r1.xyz, r1.xyzx, l(0.250000, 0.250000, 0.250000, 0.000000)
mad r0.xyz, r0.xyzx, l(0.750000, 0.750000, 0.750000, 0.000000), r1.xyzx
mul o0.xyz, r0.xyzx, cb2[2].wwww
mov o0.w, l(1.000000)
ret
// Approximately 564 instruction slots used
