// SSR Clipping
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v1.3.16 on Wed Dec 18 17:27:16 2019
//
//
// 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[72], immediateIndexed
dcl_constantbuffer cb1[341], dynamicIndexed
dcl_constantbuffer cb2[4], immediateIndexed
dcl_resource_buffer (float,float,float,float) t0
dcl_uav_typed_buffer (uint,uint,uint,uint) u0
dcl_uav_typed_buffer (uint,uint,uint,uint) u1
dcl_uav_typed_buffer (uint,uint,uint,uint) u2
dcl_input vThreadID.xyz
dcl_temps 19
dcl_thread_group 4, 4, 4
dcl_resource_texture2d (float,float,float,float) t125
dcl_resource_texture1d (float,float,float,float) t120
ld_indexable(texture2d)(float,float,float,float) r16.xyzw, l(0, 0, 0, 0), t125.xyzw
ld_indexable(texture1d)(float,float,float,float) r17.xyzw, l(0, 0, 0, 0), t120.xyzw
ld_indexable(texture1d)(float,float,float,float) r18.xyzw, l(4, 0, 0, 0), t120.xyzw

ult r0.xyz, vThreadID.xyzx, cb2[1].xyzx
and r0.x, r0.y, r0.x
and r0.x, r0.z, r0.x
if_nz r0.x
  imad r0.x, vThreadID.z, cb2[1].y, vThreadID.y
  imad r0.x, r0.x, cb2[1].x, vThreadID.x
  itof r0.yz, cb2[1].xxyx
  div r0.yz, l(0.000000, 2.000000, 2.000000, 0.000000), r0.yyzy
  utof r1.xyz, vThreadID.xyzx
  mad r1.xy, r1.xyxx, r0.yzyy, l(-1.000000, -1.000000, 0.000000, 0.000000)
  mul r1.xy, r1.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000)
  iadd r2.xyz, vThreadID.xyzx, l(1, 1, 1, 0)
  utof r2.xyw, r2.xyxz
  mad r0.yz, r2.xxyx, r0.yyzy, l(0.000000, -1.000000, -1.000000, 0.000000)
  mul r0.yz, r0.yyzy, l(0.000000, 1.000000, -1.000000, 0.000000)
  div r0.w, r1.z, cb2[3].z
  exp r0.w, r0.w
  add r0.w, r0.w, -cb2[3].y
  div r0.w, r0.w, cb2[3].x
  ieq r1.z, vThreadID.z, cb2[1].z
  movc r3.z, r1.z, l(2000000.000000), r0.w
  div r0.w, r2.w, cb2[3].z
  exp r0.w, r0.w
  add r0.w, r0.w, -cb2[3].y
  div r0.w, r0.w, cb2[3].x
  ieq r1.z, r2.z, cb2[1].z
  movc r2.z, r1.z, l(2000000.000000), r0.w
  lt r0.w, cb0[31].w, l(1.000000)
  add r1.z, r3.z, cb0[65].w
  mul r1.z, r1.z, cb0[65].z
  div r1.z, l(1.000000, 1.000000, 1.000000, 1.000000), r1.z
  mad r1.w, r3.z, cb0[30].z, cb0[31].z
  movc r1.z, r0.w, r1.z, r1.w
  

// eliminates clipping in other area
if_nz r18.w
	add r1.x, r1.x, -r16.x
endif

// add r16.w, r1.z, -r16.y
// mul r16.w, r16.w, r17.w
// mad r1.x, r16.w, -r16.x, r0.x

  mul r4.xyz, r1.yyyy, cb0[37].xywx
  mad r5.xyz, r1.xxxx, cb0[36].xywx, r4.xyzx
  mad r6.xyz, r1.zzzz, cb0[38].xywx, r5.xyzx
  add r6.xyz, r6.xyzx, cb0[39].xywx
  
// add r16.w, r6.z, -r16.y
// mul r16.w, r16.w, r17.w
// mad r6.x, r16.w, -r16.x, r6.x
// no effect
  
// mad r0.y, r16.x, r17.w, r0.y
// affects clipped area
// add r16.w, r1.z, -r16.y
// mul r16.w, r16.w, r17.w
// mad r0.y, r16.w, -r16.x, r0.y

  mul r7.xyz, r0.zzzz, cb0[37].xywx
  mad r8.xyz, r0.yyyy, cb0[36].xywx, r7.xyzx


// eliminates clipping

if_nz r18.w
	add r8.z, r16.x, r8.z
endif


  mad r9.xyz, r1.zzzz, cb0[38].xywx, r8.xyzx
  add r9.xyz, r9.xyzx, cb0[39].xywx
// eliminates clipping
// mad r9.z, r16.x, r17.w, r9.z

// mad r1.x, r16.x, r17.w, r1.x

  mad r1.xyw, r1.xxxx, cb0[36].xyxw, r7.xyxz
  mad r7.xyz, r1.zzzz, cb0[38].xywx, r1.xywx
  add r7.xyz, r7.xyzx, cb0[39].xywx
  mad r4.xyz, r0.yyyy, cb0[36].xywx, r4.xyzx
  mad r10.xyz, r1.zzzz, cb0[38].xywx, r4.xyzx
  add r10.xyz, r10.xyzx, cb0[39].xywx
  
// mad r10.x, r16.x, r17.w, r10.x

  add r0.y, r2.z, cb0[65].w
  mul r0.y, r0.y, cb0[65].z
  div r0.y, l(1.000000, 1.000000, 1.000000, 1.000000), r0.y
  mad r0.z, r2.z, cb0[30].z, cb0[31].z
  movc r0.y, r0.w, r0.y, r0.z
  mad r5.xyz, r0.yyyy, cb0[38].xywx, r5.xyzx
  add r5.xyz, r5.xyzx, cb0[39].xywx
  mad r8.xyz, r0.yyyy, cb0[38].xywx, r8.xyzx
  add r8.xyz, r8.xyzx, cb0[39].xywx
  
  
// mul r17.w, r17.w, l(10000.0)
// mad r8.x, r16.x, r17.w, r8.x

  mad r1.xyz, r0.yyyy, cb0[38].xywx, r1.xywx
  add r1.xyz, r1.xyzx, cb0[39].xywx
  mad r0.yzw, r0.yyyy, cb0[38].xxyw, r4.xxyz
  add r0.yzw, r0.yyzw, cb0[39].xxyw
  
// mul r17.w, r17.w, l(10000.0)
// mad r6.x, r16.x, r17.w, r6.x
// mad r9.x, r16.x, r17.w, r9.x

// mad r6.x, r16.x, r17.w, r6.x
// mad r9.x, r16.x, r17.w, r9.x
// mad r7.x, r16.x, r17.w, r7.x
// mad r10.x, r16.x, r17.w, r10.x
// mad r5.x, r16.x, r17.w, r5.x
// mad r8.x, r16.x, r17.w, r8.x
// mad r1.x, r16.x, r17.w, r1.x
// mad r0.y, r16.x, r17.w, r0.y
// individually nothing, all together affects clipping area

  div r4.xy, r6.xyxx, r6.zzzz
  div r4.zw, r9.xxxy, r9.zzzz
  div r6.xy, r7.xyxx, r7.zzzz
  div r6.zw, r10.xxxy, r10.zzzz
  div r5.xy, r5.xyxx, r5.zzzz
  div r5.zw, r8.xxxy, r8.zzzz
  div r1.xy, r1.xyxx, r1.zzzz
  div r0.yz, r0.yyzy, r0.wwww
  min r1.zw, r4.zzzw, r4.xxxy
  min r1.zw, r6.xxxy, r1.zzzw
  min r1.zw, r6.zzzw, r1.zzzw
  min r1.zw, r5.xxxy, r1.zzzw
  min r1.zw, r5.zzzw, r1.zzzw
  min r1.zw, r1.xxxy, r1.zzzw
  min r3.xy, r0.yzyy, r1.zwzz
  
  // mad r3.x, r16.x, r17.w, r3.x
  
  max r1.zw, r4.zzzw, r4.xxxy
  max r1.zw, r6.xxxy, r1.zzzw
  max r1.zw, r6.zzzw, r1.zzzw
  max r1.zw, r5.xxxy, r1.zzzw
  max r1.zw, r5.zzzw, r1.zzzw
  max r1.xy, r1.xyxx, r1.zwzz
  max r2.xy, r0.yzyy, r1.xyxx
  
  // mad r2.x, r16.x, r17.w, r2.x
  
  add r0.yzw, r2.xxyz, r3.xxyz
  mul r1.xyz, r0.yzwy, l(0.500000, 0.500000, 0.500000, 0.000000)
  mad r2.xyz, -r0.yzwy, l(0.500000, 0.500000, 0.500000, 0.000000), r2.xyzx
  
  // mad r1.x, r16.x, r17.w, r1.x
  
  mul r3.xyz, r1.yyyy, cb0[17].xyzx
  mad r1.xyw, r1.xxxx, cb0[16].xyxz, r3.xyxz
  mad r1.xyz, r1.zzzz, cb0[18].xyzx, r1.xywx
  add r1.xyz, r1.xyzx, cb0[19].xyzx
  
  // mul r17.w, r17.w, l(10000.0)
  // mad r1.x, r16.x, r17.w, r1.x
  // no effect
  
  add r1.xyz, r1.xyzx, -cb0[71].xyzx
  
  dp3 r1.w, r2.xyzx, r2.xyzx
  sqrt r1.w, r1.w
  imul null, r2.w, cb2[0].w, cb2[1].w
  ishl r2.w, r2.w, l(1)
  mov r3.x, l(0)
  loop
    uge r3.y, r3.x, cb2[0].x
    breakc_nz r3.y
    imul null, r3.y, r3.x, l(9)
	
	// itof r3.y, r3.y
	// mad r3.y, r16.x, r17.w, r3.y
	// ftoi r3.y, r3.y
	
    ld_indexable(buffer)(float,float,float,float) r4.xyzw, r3.yyyy, t0.xyzw
    div r4.w, l(1.000000, 1.000000, 1.000000, 1.000000), |r4.w|
    imad r3.y, r3.x, l(9), l(3)
	
	// itof r3.y, r3.y
	// mad r3.y, r16.x, r17.w, r3.y
	// ftoi r3.y, r3.y


    ld_indexable(buffer)(float,float,float,float) r3.y, r3.yyyy, t0.yxzw
    lt r3.z, l(-2.000000), r3.y
    if_nz r3.z
      mad r3.z, -r3.y, r3.y, l(1.000000)
      imad r3.w, r3.x, l(9), l(2)
	  
	// itof r3.w, r3.w
	// mad r3.w, r16.x, r17.w, r3.w
	// ftoi r3.w, r3.w


      ld_indexable(buffer)(float,float,float,float) r5.xyz, r3.wwww, t0.xyzw
      add r6.xyz, r1.xyzx, -r4.xyzx
      dp3 r3.w, r6.xyzx, r6.xyzx
      dp3 r5.w, r6.xyzx, -r5.xyzx
      mad r3.w, -r5.w, r5.w, r3.w
      sqrt r3.zw, r3.zzzw
      mul r6.x, r3.z, r5.w
      mad r3.w, r3.y, r3.w, -r6.x
      lt r3.w, r1.w, r3.w
      add r6.x, r1.w, r4.w
      lt r6.x, r6.x, r5.w
      lt r5.w, r5.w, -r1.w
      or r3.w, r3.w, r6.x
      or r3.w, r5.w, r3.w
      not r3.w, r3.w
      lt r5.w, r3.y, l(0.707107)
      mul r6.xyz, r4.wwww, r5.xyzx
      mad r6.xyz, -r6.xyzx, r3.yyyy, r4.xyzx
      mul r6.w, r3.z, r4.w
      add r3.y, r3.y, r3.y
      div r7.w, r4.w, r3.y
      mad r7.xyz, -r5.xyzx, r7.wwww, r4.xyzx
      movc r4.xyzw, r5.wwww, r6.xyzw, r7.xyzw
    else
      mov r3.w, l(-1)
    endif
    add r4.xyz, r4.xyzx, cb0[71].xyzx
	
	// mul r17.w, r17.w, l(10000.0)
	// mad r4.x, r16.x, r17.w, r4.x
	
    mul r5.xyz, r4.yyyy, cb0[13].xyzx
    mad r5.xyz, r4.xxxx, cb0[12].xyzx, r5.xyzx
    mad r4.xyz, r4.zzzz, cb0[14].xyzx, r5.xyzx
    add r4.xyz, r4.xyzx, cb0[15].xyzx
	
	// mad r4.x, r16.x, r17.w, r4.x
	
    mad r4.xyz, -r0.yzwy, l(0.500000, 0.500000, 0.500000, 0.000000), r4.xyzx
    add r4.xyz, -r2.xyzx, |r4.xyzx|
    max r4.xyz, r4.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
    dp3 r3.y, r4.xyzx, r4.xyzx
    mul r3.z, r4.w, r4.w
    lt r3.y, r3.y, r3.z
    and r3.y, r3.w, r3.y
    if_nz r3.y
      imm_atomic_iadd r4.x, u0, l(0), l(1)
      ult r3.y, r4.x, r2.w
      if_nz r3.y
        imm_atomic_exch r5.x, u1, r0.x, r4.x
        ishl r3.y, r4.x, l(1)
        store_uav_typed u2.xyzw, r3.yyyy, r3.xxxx
        bfi r3.z, l(31), l(1), r4.x, l(1)
        store_uav_typed u2.xyzw, r3.zzzz, r5.xxxx
      endif
    endif
    iadd r3.x, r3.x, l(1)
  endloop
  iadd r0.x, r0.x, cb2[0].w
  mov r1.x, l(0)
  loop
    uge r1.y, r1.x, cb2[0].y
    breakc_nz r1.y
    add r1.yzw, cb0[71].xxyz, cb1[r1.x + 0].xxyz
	
	// mad r1.y, r16.x, r17.w, r1.y
	
    mul r3.xyz, r1.zzzz, cb0[13].xyzx
    mad r3.xyz, r1.yyyy, cb0[12].xyzx, r3.xyzx
    mad r1.yzw, r1.wwww, cb0[14].xxyz, r3.xxyz
    add r1.yzw, r1.yyzw, cb0[15].xxyz
	
	// mad r1.y, r16.x, r17.w, r1.y
	
    mad r1.yzw, -r0.yyzw, l(0.000000, 0.500000, 0.500000, 0.500000), r1.yyzw
    add r1.yzw, -r2.xxyz, |r1.yyzw|
    max r1.yzw, r1.yyzw, l(0.000000, 0.000000, 0.000000, 0.000000)
    dp3 r1.y, r1.yzwy, r1.yzwy
    mul r1.z, cb1[r1.x + 0].w, cb1[r1.x + 0].w
    lt r1.y, r1.y, r1.z
    if_nz r1.y
      imm_atomic_iadd r3.x, u0, l(0), l(1)
      ult r1.y, r3.x, r2.w
      if_nz r1.y
        imm_atomic_exch r4.x, u1, r0.x, r3.x
        ishl r1.y, r3.x, l(1)
        store_uav_typed u2.xyzw, r1.yyyy, r1.xxxx
        bfi r1.z, l(31), l(1), r3.x, l(1)
        store_uav_typed u2.xyzw, r1.zzzz, r4.xxxx
      endif
    endif
    iadd r1.x, r1.x, l(1)
  endloop
endif
ret
// Approximately 0 instruction slots used
