// Reflections
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v1.2.57 on Sun Jun 04 18:25:53 2017
//
//
// 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[7], immediateIndexed
dcl_constantbuffer cb1[58], immediateIndexed
dcl_constantbuffer cb2[56], immediateIndexed
dcl_constantbuffer cb3[2387], dynamicIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_sampler s3, mode_default
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_texturecubearray (float,float,float,float) t7
dcl_resource_texturecubearray (float,float,float,float) t8
dcl_resource_texturecube (float,float,float,float) t9
dcl_resource_texture2d (float,float,float,float) t10
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 13

dcl_temps 14

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) r14.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
iadd r0.yz, cb0[2].zzwz, -cb0[2].xxyx
utof r0.yz, r0.yyzy
mov r1.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r0.w, r1.xyww, t4.yzwx
mad r0.w, r0.w, cb1[52].z, -cb1[52].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.xy, r0.xxxx, l(32, 8, 0, 0)
if_nz r2.x
  iadd r2.x, r0.x, l(32)
  mov r2.zw, r0.wwww
  mov r3.x, r2.x
  loop 
    ige r3.y, r3.x, l(256)
    breakc_nz r3.y
    ld_structured r3.y, r3.x, l(0), g5.xxxx
    min r2.z, r2.z, r3.y
    max r2.w, r2.w, r3.y
    iadd r3.x, r3.x, l(32)
  endloop 
  store_structured g5.x, r0.x, l(0), r2.z
  store_structured g5.x, r2.x, l(0), r2.w
endif 
sync_g_t
if_nz r2.y
  ld_structured r2.x, r0.x, l(0), g5.xxxx
  iadd r3.xyzw, r0.xxxx, l(32, 8, 40, 16)
  ld_structured r2.y, r3.x, l(0), g5.xxxx
  ld_structured r2.z, r3.y, l(0), g5.xxxx
  min r2.x, r2.z, r2.x
  ld_structured r2.z, r3.z, l(0), g5.xxxx
  max r2.y, r2.z, r2.y
  ld_structured r2.z, r3.w, l(0), g5.xxxx
  min r2.x, r2.z, r2.x
  iadd r3.xyzw, r0.xxxx, l(48, 24, 56, 64)
  ld_structured r2.z, r3.x, l(0), g5.xxxx
  max r2.y, r2.z, r2.y
  ld_structured r2.z, r3.y, l(0), g5.xxxx
  min r2.x, r2.z, r2.x
  ld_structured r2.z, r3.z, l(0), g5.xxxx
  max r2.y, r2.z, r2.y
  store_structured g5.x, r3.w, l(0), r2.x
  iadd r2.x, r0.x, l(96)
  store_structured g5.x, r2.x, l(0), r2.y
endif 
sync_g_t
if_z r0.x
  ld_structured r2.x, l(64), l(0), g5.xxxx
  ld_structured r2.y, l(96), l(0), g5.xxxx
  mov r3.xy, r2.xyxx
  mov r2.z, l(1)
  loop 
    ige r2.w, r2.z, l(8)
    breakc_nz r2.w
    iadd r3.zw, r2.zzzz, l(0, 0, 64, 96)
    ld_structured r2.w, r3.z, l(0), g5.xxxx
    min r3.x, r2.w, r3.x
    ld_structured r2.w, r3.w, l(0), g5.xxxx
    max r3.y, r2.w, r3.y
    iadd r2.z, r2.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.x, l(0), g0.xxxx
ld_raw r2.y, l(0), g1.xxxx
utof r2.zw, vThreadGroupID.xxxy
mad r2.zw, r2.zzzw, l(0.000000, 0.000000, 16.000000, 16.000000), l(0.000000, 0.000000, 0.500000, 0.500000)
div r2.zw, r2.zzzw, r0.yyyz
mad r2.zw, r2.zzzw, l(0.000000, 0.000000, 2.000000, -2.000000), l(0.000000, 0.000000, -1.000000, 1.000000)
add r2.xy, r2.xyxx, cb1[52].wwww
mul r2.xy, r2.xyxx, cb1[52].zzzz
div r2.x, l(1.000000, 1.000000, 1.000000, 1.000000), r2.x
iadd r3.xy, vThreadGroupID.xyxx, l(1, 1, 0, 0)
utof r3.xy, r3.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, r0.yzyy
mad r3.xy, r3.xyxx, l(2.000000, -2.000000, 0.000000, 0.000000), l(-1.000000, 1.000000, 0.000000, 0.000000)
div r2.y, l(1.000000, 1.000000, 1.000000, 1.000000), r2.y
mul r4.xyzw, r2.wwww, cb1[30].xyzw
mad r4.xyzw, r2.zzzz, cb1[29].xyzw, r4.xyzw
mad r5.xyzw, r2.yyyy, cb1[31].xyzw, r4.xyzw
add r5.xyzw, r5.xyzw, cb1[32].xyzw
div r5.xyz, r5.xyzx, r5.wwww
mul r6.xyzw, r3.yyyy, cb1[30].xyzw
mad r3.xyzw, r3.xxxx, cb1[29].xyzw, r6.xyzw
mad r3.xyzw, r2.yyyy, cb1[31].xyzw, r3.xyzw
add r3.xyzw, r3.xyzw, cb1[32].xyzw
div r2.yzw, r3.xxyz, r3.wwww
mad r3.xyzw, r2.xxxx, cb1[31].xyzw, r4.xyzw
add r3.xyzw, r3.xyzw, cb1[32].xyzw
div r3.xyz, r3.xyzx, r3.wwww
min r4.xyz, r2.yzwy, r5.xyzx
min r4.xyz, r3.xyzx, r4.xyzx
max r2.xyz, r2.yzwy, r5.xyzx
max r2.xyz, r2.xyzx, r3.xyzx
add r3.xyz, r4.xyzx, r2.xyzx
add r2.xyz, -r4.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].w
  ult r4.x, r2.w, l(341)
  and r3.w, r3.w, r4.x
  breakc_z r3.w
  add r4.xyz, cb1[57].xyzx, cb3[r2.w + 0].xyzx
  mul r5.xyz, r4.yyyy, cb1[10].xyzx
  mad r4.xyw, r4.xxxx, cb1[9].xyxz, r5.xyxz
  mad r4.xyz, r4.zzzz, cb1[11].xyzx, r4.xywx
  add r4.xyz, r4.xyzx, cb1[12].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, cb3[r2.w + 0].w, cb3[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) r3.xyzw, r1.xyww, t1.xyzw
mul r0.x, r3.w, l(255.000000)
round_ne r0.x, r0.x
ftou r0.x, r0.x
and r2.y, r0.x, l(15)
ine r2.zw, r2.yyyy, l(0, 0, 0, 7)
and r2.z, r2.w, r2.z
if_nz r2.z
  utof r2.zw, vThreadID.xxxy
  add r2.zw, r2.zzzw, l(0.000000, 0.000000, 0.500000, 0.500000)
  div r0.yz, r2.zzwz, r0.yyzy
  mad r0.yz, r0.yyzy, l(0.000000, 2.000000, -2.000000, 0.000000), l(0.000000, -1.000000, 1.000000, 0.000000)
  ld_indexable(texture2d)(float,float,float,float) r4.xyz, r1.xyww, t0.xyzw
  ld_indexable(texture2d)(float,float,float,float) r5.xyz, r1.xyww, t2.xyzw
  ld_indexable(texture2d)(float,float,float,float) r2.zw, r1.xyww, t3.zwxy
  ftou r3.w, cb2[32].x
  iadd r4.w, r1.x, r1.y
  iadd r3.w, r4.w, r3.w
  and r3.w, r3.w, l(1)
  mad r4.xyz, r4.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
  dp3 r4.w, r4.xyzx, r4.xyzx
  rsq r4.w, r4.w
  mul r6.xyz, r4.wwww, r4.xyzx
  and r0.x, r0.x, l(16)
  movc r2.zw, r0.xxxx, l(0,0,0,0), r2.zzzw
  ieq r7.xy, r2.yyyy, l(5, 4, 0, 0)
  movc r8.xy, r3.wwww, l(1.000000,0,0,0), l(0,1.000000,0,0)
  mul r8.z, r3.y, r8.y
  mov r5.w, r3.y
  movc r5.xyzw, r7.xxxx, r8.xxxz, r5.xyzw
  mul r0.x, r5.w, l(0.080000)
  mad r5.xyz, -r5.wwww, l(0.080000, 0.080000, 0.080000, 0.000000), r5.xyzx
  mad r5.xyz, r3.xxxx, r5.xyzx, r0.xxxx
  mad r5.xyz, r5.xyzx, cb2[6].wwww, cb2[6].xyzx
  utof r7.xz, r1.xxyx
  add r7.xz, r7.xxzx, l(0.500000, 0.000000, 0.500000, 0.000000)
  mul r7.xz, r7.xxzx, cb2[3].zzwz
  sample_l_indexable(texture2d)(float,float,float,float) r0.x, r7.xzxx, t5.xyzw, s0, l(0.000000)
  mul r0.yz, r0.wwww, r0.yyzy
  
  // Move environment reflections to infinity:
  mad r0.y, -r14.x, r0.w, r0.y
  
  mul r8.xyzw, r0.zzzz, cb1[42].xyzw
  mad r8.xyzw, r0.yyyy, cb1[41].xyzw, r8.xyzw
  mad r8.xyzw, r0.wwww, cb1[43].xyzw, r8.xyzw
  add r8.xyzw, r8.xyzw, cb1[44].xyzw
  div r0.yzw, r8.xxyz, r8.wwww
  add r7.xzw, r0.yyzw, -cb1[54].xxyz
  dp3 r2.y, r7.xzwx, r7.xzwx
  rsq r2.y, r2.y
  mul r7.xzw, r2.yyyy, r7.xxzw
  dp3 r3.x, -r7.xzwx, r6.xyzx
  add r2.y, r3.x, r3.x
  mad r7.xzw, r2.yyyy, r6.xxyz, r7.xxzw
  mov_sat r3.x, r3.x
  mul r2.y, r3.z, r3.z
  mad r3.w, -r3.z, r3.z, l(1.000000)
  sqrt r5.w, r3.w
  mad r5.w, r3.z, r3.z, r5.w
  mul r3.w, r3.w, r5.w
  mad r4.xyz, -r4.xyzx, r4.wwww, r7.xzwx
  mul r3.w, r3.w, r3.w
  ld_indexable(texture2d)(float,float,float,float) r8.xyzw, r1.xyww, t10.xyzw
  add r4.w, -r8.w, l(1.000000)
  mad r9.xyzw, r8.xyzw, l(1.000000, 1.000000, 1.000000, -1.000000), l(0.000000, 0.000000, 0.000000, 1.000000)
  add r10.xyzw, -r9.xyzw, l(0.000000, 0.000000, 0.000000, 1.000000)
  mad r10.xyzw, r2.zzzz, r10.xyzw, r9.xyzw
  movc r9.xyzw, r7.yyyy, r10.xyzw, r9.xyzw
  add r5.w, r0.x, r3.x
  log r5.w, r5.w
  mul r2.y, r2.y, r5.w
  exp r2.y, r2.y
  add r0.x, r0.x, r2.y
  add_sat r0.x, r0.x, l(-1.000000)
  mul r2.y, r0.x, r9.w
  mad r4.xyz, r4.xyzx, r3.wwww, r6.xyzx
  log r3.w, r3.z
  mad r5.w, -r3.w, l(1.200000), l(1.000000)
  add r6.x, cb2[55].z, l(-1.000000)
  add r5.w, -r5.w, r6.x
  mad r6.y, r3.w, l(2.000000), cb0[3].x
  mov r10.xyz, r9.xyzx
  mov r6.z, r2.y
  mov r6.w, l(0)
  loop 
    uge r8.w, r6.w, r2.x
    breakc_nz r8.w
    lt r8.w, r6.z, l(0.001000)
    if_nz r8.w
      break 
    endif 
    ld_structured r8.w, r6.w, l(0), g4.xxxx
    add r11.xyz, r0.yzwy, -cb3[r8.w + 0].xyzx
    dp3 r9.w, r11.xyzx, r11.xyzx
    sqrt r10.w, r9.w
    lt r11.w, r10.w, cb3[r8.w + 0].w
    if_nz r11.w
      div_sat r10.w, r10.w, cb3[r8.w + 0].w
      dp3 r11.w, r4.xyzx, r11.xyzx
      mad r9.w, -cb3[r8.w + 0].w, cb3[r8.w + 0].w, r9.w
      mad r9.w, r11.w, r11.w, -r9.w
      sqrt r9.w, r9.w
      add r9.w, -r11.w, r9.w
      mad r11.xyz, r9.wwww, r4.xyzx, r11.xyzx
      add r11.xyz, r11.xyzx, -cb3[r8.w + 2046].xyzx
      mad r9.w, r10.w, l(2.500000), l(-1.500000)
      max r9.w, r9.w, l(0.000000)
      mul r10.w, r9.w, r9.w
      mad r9.w, -r9.w, l(2.000000), l(3.000000)
      mad r9.w, -r10.w, r9.w, l(1.000000)
      ge r10.w, cb3[r8.w + 341].y, l(0.000000)
      if_nz r10.w
        mov r11.w, cb3[r8.w + 341].y
        sample_l_indexable(texturecubearray)(float,float,float,float) r12.xyzw, r11.xyzw, t7.xyzw, s2, r5.w
      else 
        add r10.w, l(-1.000000), -cb3[r8.w + 341].y
        ftou r10.w, r10.w
        utof r11.w, r10.w
        sample_l_indexable(texturecubearray)(float,float,float,float) r12.xyzw, r11.xyzw, t8.xyzw, s2, r6.y
      endif 
      mul r11.xyz, r12.xyzx, cb3[r8.w + 341].xxxx
      mul r11.xyz, r9.wwww, r11.xyzx
      mad r10.xyz, r11.xyzx, r6.zzzz, r10.xyzx
      mad r8.w, -r12.w, r9.w, l(1.000000)
      mul r6.z, r6.z, r8.w
    endif 
    iadd r6.w, r6.w, l(1)
  endloop 
  ine r2.y, cb0[6].x, l(0)
  ge r5.w, r6.z, l(0.001000)
  and r5.w, r2.y, r5.w
  if_nz r5.w
    mad r3.w, -r3.w, l(1.150000), l(3.000000)
    add r5.w, cb0[5].w, l(-1.000000)
    add r3.w, -r3.w, r5.w
    sample_l_indexable(texturecube)(float,float,float,float) r4.xyz, r4.xyzx, t9.xyzw, s3, r3.w
    mad r4.xyz, r4.xyzx, cb0[4].xyzx, -r10.xyzx
    mad r10.xyz, r6.zzzz, r4.xyzx, r10.xyzx
  endif 
  if_nz r7.y
    mov r3.y, r3.z
    sample_l_indexable(texture2d)(float,float,float,float) r3.yw, r3.xyxx, t6.zxwy, s1, l(0.000000)
    mul_sat r4.x, r5.y, l(50.000000)
    mul r3.w, r3.w, r4.x
    add r4.x, -r2.z, l(1.000000)
    mul r3.w, r3.w, r4.x
    mad r4.xyz, r5.xyzx, r3.yyyy, r3.wwww
    mul r4.xyz, r4.xyzx, r10.xyzx
    add r3.y, -r3.x, l(1.000000)
    mul r3.w, r3.y, r3.y
    mul r3.w, r3.w, r3.w
    mul r5.w, r3.y, r3.w
    mad r3.y, -r3.w, r3.y, l(1.000000)
    mad r3.y, r3.y, l(0.040000), r5.w
    mul r3.w, r2.z, r3.y
    mad r2.z, -r3.y, r2.z, l(1.000000)
    mul r6.yzw, r3.wwww, r8.xxyz
    mad r4.xyz, r4.xyzx, r2.zzzz, r6.yzwy
    mul r2.z, r4.w, r3.w
    mul r0.x, r0.x, r2.z
    log r2.z, r2.w
    mad r2.w, -r2.z, l(1.200000), l(1.000000)
    add r2.w, -r2.w, r6.x
    mad r3.y, r2.z, l(2.000000), cb0[3].x
    mov r6.xyz, r4.xyzx
    mov r3.w, r0.x
    mov r4.w, l(0)
    loop 
      uge r5.w, r4.w, r2.x
      breakc_nz r5.w
      lt r5.w, r3.w, l(0.001000)
      if_nz r5.w
        break 
      endif 
      ld_structured r5.w, r4.w, l(0), g4.xxxx
      add r8.xyz, r0.yzwy, -cb3[r5.w + 0].xyzx
      dp3 r6.w, r8.xyzx, r8.xyzx
      sqrt r7.y, r6.w
      lt r8.w, r7.y, cb3[r5.w + 0].w
      if_nz r8.w
        div_sat r7.y, r7.y, cb3[r5.w + 0].w
        dp3 r8.w, r7.xzwx, r8.xyzx
        mad r6.w, -cb3[r5.w + 0].w, cb3[r5.w + 0].w, r6.w
        mad r6.w, r8.w, r8.w, -r6.w
        sqrt r6.w, r6.w
        add r6.w, -r8.w, r6.w
        mad r8.xyz, r6.wwww, r7.xzwx, r8.xyzx
        add r8.xyz, r8.xyzx, -cb3[r5.w + 2046].xyzx
        mad r6.w, r7.y, l(2.500000), l(-1.500000)
        max r6.w, r6.w, l(0.000000)
        mul r7.y, r6.w, r6.w
        mad r6.w, -r6.w, l(2.000000), l(3.000000)
        mad r6.w, -r7.y, r6.w, l(1.000000)
        ge r7.y, cb3[r5.w + 341].y, l(0.000000)
        if_nz r7.y
          mov r8.w, cb3[r5.w + 341].y
          sample_l_indexable(texturecubearray)(float,float,float,float) r9.xyzw, r8.xyzw, t7.xyzw, s2, r2.w
        else 
          add r7.y, l(-1.000000), -cb3[r5.w + 341].y
          ftou r7.y, r7.y
          utof r8.w, r7.y
          sample_l_indexable(texturecubearray)(float,float,float,float) r9.xyzw, r8.xyzw, t8.xyzw, s2, r3.y
        endif 
        mul r8.xyz, r9.xyzx, cb3[r5.w + 341].xxxx
        mul r8.xyz, r6.wwww, r8.xyzx
        mad r6.xyz, r8.xyzx, r3.wwww, r6.xyzx
        mad r5.w, -r9.w, r6.w, l(1.000000)
        mul r3.w, r3.w, r5.w
      endif 
      iadd r4.w, r4.w, l(1)
    endloop 
    ge r0.x, r3.w, l(0.001000)
    and r0.x, r0.x, r2.y
    if_nz r0.x
      mad r0.x, -r2.z, l(1.150000), l(3.000000)
      add r0.y, cb0[5].w, l(-1.000000)
      add r0.x, -r0.x, r0.y
      sample_l_indexable(texturecube)(float,float,float,float) r0.xyz, r7.xzwx, t9.xyzw, s3, r0.x
      mad r0.xyz, r0.xyzx, cb0[4].xyzx, -r6.xyzx
      mad r6.xyz, r3.wwww, r0.xyzx, r6.xyzx
    endif 
  else 
    sample_l_indexable(texture2d)(float,float,float,float) r0.xy, r3.xzxx, t6.xyzw, s1, l(0.000000)
    mul_sat r0.z, r5.y, l(50.000000)
    mul r0.y, r0.y, r0.z
    mad r0.xyz, r5.xyzx, r0.xxxx, r0.yyyy
    mul r6.xyz, r0.xyzx, r10.xyzx
  endif 
else 
  mov r6.xyz, l(0,0,0,0)
endif 
ult r0.xy, vThreadID.xyxx, cb0[2].zwzz
and r0.x, r0.y, r0.x
if_nz r0.x
  min r0.xyz, -r6.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
