// Tile lighting (TiledDeferredLightShaders.ucf)

//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v1.2.39 on Sun May 22 23:41:14 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[2], immediateIndexed
dcl_constantbuffer cb1[52], immediateIndexed

// There are two constant buffers describing the lights. Each array mentioned
// below is packed one after the other in the buffer, i.e. first 1024 entries
// are for first array, 1024-2047 are 2nd array, 2048-3071 are final array. 

// /** Second constant buffer of light data for tiled deferred. */
// BEGIN_UNIFORM_BUFFER_STRUCT(FTiledDeferredLightData2,)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY(FVector4,LightDirectionAndSpotlightMaskAndMinRoughness,[GMaxNumTiledDeferredLights])
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY(FVector4,SpotAnglesAndSourceRadiusAndSimpleLighting,[GMaxNumTiledDeferredLights])
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY(FVector4,ShadowMapChannelMask,[GMaxNumTiledDeferredLights])
// END_UNIFORM_BUFFER_STRUCT(FTiledDeferredLightData2)
// 
// IMPLEMENT_UNIFORM_BUFFER_STRUCT(FTiledDeferredLightData2,TEXT("TiledDeferred2"));
dcl_constantbuffer cb2[3072], dynamicIndexed

// /** 
//  * First constant buffer of light data for tiled deferred. 
//  * Light data is split into two constant buffers to allow more lights per pass before hitting the d3d11 max constant buffer size of 4096 float4's
//  */
// BEGIN_UNIFORM_BUFFER_STRUCT(FTiledDeferredLightData,)
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY(FVector4,LightPositionAndInvRadius,[GMaxNumTiledDeferredLights])
// 	DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_ARRAY(FVector4,LightColorAndFalloffExponent,[GMaxNumTiledDeferredLights])
// END_UNIFORM_BUFFER_STRUCT(FTiledDeferredLightData)
// 
// IMPLEMENT_UNIFORM_BUFFER_STRUCT(FTiledDeferredLightData,TEXT("TiledDeferred"));
dcl_constantbuffer cb3[2048], dynamicIndexed

dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
// Normal map:
dcl_resource_texture2d (float,float,float,float) t0
// Colour coded surfaces:
dcl_resource_texture2d (float,float,float,float) t1
// Colour:
dcl_resource_texture2d (float,float,float,float) t2
// Mask:
dcl_resource_texture2d (float,float,float,float) t3
// Colour coded surfaces:
dcl_resource_texture2d (float,float,float,float) t4
// Depth:
dcl_resource_texture2d (float,float,float,float) t5
// AO:
dcl_resource_texture2d (float,float,float,float) t6
// AO:
dcl_resource_texture2d (float,float,float,float) t7
// Gradient:
dcl_resource_texture2d (float,float,float,float) t8
// Scene:
dcl_resource_texture2d (float,float,float,float) t9
dcl_uav_typed_texture2d (float,float,float,float) u0
dcl_input vThreadGroupID.xy
dcl_input vThreadIDInGroup.xy
dcl_input vThreadID.xy
dcl_temps 21
dcl_tgsm_raw g0, 4
dcl_tgsm_raw g1, 4
dcl_tgsm_raw g2, 4
dcl_tgsm_structured g3, 4, 1024
dcl_tgsm_raw g4, 4
dcl_tgsm_structured g5, 4, 1024
dcl_thread_group 16, 16, 1

dcl_resource_texture2d (float,float,float,float) t125

ld_indexable(texture2d)(float,float,float,float) r20.xyzw, l(0, 0, 0, 0), t125.xyzw

imad r0.x, vThreadIDInGroup.y, l(16), vThreadIDInGroup.x
iadd r1.xy, vThreadID.xyxx, cb0[0].xyxx
iadd r0.yz, cb0[0].zzwz, -cb0[0].xxyx
utof r0.yz, r0.yyzy
mov r1.zw, l(0,0,0,0)
// Depth:
ld_indexable(texture2d)(float,float,float,float) r0.w, r1.xyww, t5.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
if_z r0.x
  store_raw g0.x, l(0), l(340282346638528860000000000000000000000.000000)
  store_raw g1.x, l(0), l(0)
  store_raw g2.x, l(0), l(0)
  store_raw g4.x, l(0), l(0)
endif 
sync_g_t
atomic_umin g0, l(0), r0.w
atomic_umax g1, l(0), r0.w
sync_g_t
ld_raw r2.x, l(0), g0.xxxx
ld_raw r3.y, l(0), g1.xxxx
mul r2.yz, r0.yyzy, l(0.000000, 0.031250, 0.031250, 0.000000)
utof r3.zw, vThreadGroupID.xxxy
mad r3.zw, r0.yyyz, l(0.000000, 0.000000, 0.031250, 0.031250), -r3.zzzw
mul r4.y, r2.y, cb1[16].x
mul r4.x, r2.z, -cb1[17].y
mad r4.zw, cb1[18].xxxy, r2.yyyz, r3.zzzw
add r5.xyzw, -r4.yzxw, l(0.000000, 1.000000, 0.000000, 1.000000)
add r4.xyzw, r4.yzxw, l(0.000000, 1.000000, 0.000000, 1.000000)
mov r2.w, -r2.x
dp2 r3.z, r5.xyxx, r5.xyxx
sqrt r3.z, r3.z
rcp r3.z, r3.z
mul r3.zw, r3.zzzz, r5.xxxy
dp2 r5.x, r4.xyxx, r4.xyxx
sqrt r5.x, r5.x
rcp r5.x, r5.x
mul r4.xy, r4.xyxx, r5.xxxx
dp2 r5.x, r5.zwzz, r5.zwzz
sqrt r5.x, r5.x
rcp r5.x, r5.x
mul r5.xy, r5.xxxx, r5.zwzz
dp2 r5.z, r4.zwzz, r4.zwzz
sqrt r5.z, r5.z
rcp r5.z, r5.z
mul r4.zw, r4.zzzw, r5.zzzz
mov r5.z, r0.x
loop 
  ult r5.w, r5.z, cb0[1].x
  ult r6.x, r5.z, l(1024)
  and r5.w, r5.w, r6.x
  breakc_z r5.w

// float4 LightPositionAndInvRadius = TiledDeferred.LightPositionAndInvRadius[LightIndex];
// float LightRadius = 1.0f / LightPositionAndInvRadius.w;
  div r5.w, l(1.000000, 1.000000, 1.000000, 1.000000), cb3[r5.z + 0].w

// float3 BoundsViewPosition = mul(float4(LightPositionAndInvRadius.xyz + View.PreViewTranslation.xyz, 1), View.TranslatedWorldToView).xyz;
  add r6.xyz, cb1[51].xyzx, cb3[r5.z + 0].xyzx
  mul r7.xyz, r6.yyyy, cb1[9].xyzx
  mad r6.xyw, r6.xxxx, cb1[8].xyxz, r7.xyxz
  mad r6.xyz, r6.zzzz, cb1[10].xyzx, r6.xywx
  add r2.xyz, r6.xyzx, cb1[11].xyzx

// Fix tile clipping:
// FIXME: Should be using the view-space formula here, need to find the right
// value for FOV or copy it in... but at least for the range of FOVs used in
// the Park I can't see any clipping (yet), so this will do for now.
add r20.w, r2.z, -r20.y
mad r2.x, r20.w, r20.x, r2.x

  dp2 r6.x, r3.zwzz, r2.xzxx
  ge r6.x, r6.x, -r5.w
  dp2 r2.x, r4.xyxx, r2.xzxx
  ge r2.x, r2.x, -r5.w
  and r2.x, r2.x, r6.x
  dp2 r6.x, r5.xyxx, r2.yzyy
  ge r6.x, r6.x, -r5.w
  and r2.x, r2.x, r6.x
  dp2 r2.y, r4.zwzz, r2.yzyy
  ge r2.y, r2.y, -r5.w
  and r2.x, r2.y, r2.x
  if_nz r2.x
    dp2 r2.x, l(1.000000, 1.000000, 0.000000, 0.000000), r2.zwzz
    mov r3.x, r2.z
    dp2 r2.y, l(-1.000000, 1.000000, 0.000000, 0.000000), r3.xyxx
    ge r2.xy, r2.xyxx, -r5.wwww
    and r2.x, r2.y, r2.x
    if_nz r2.x
      lt r2.x, l(0.500000), cb2[r5.z + 1024].w
      if_nz r2.x
        imm_atomic_iadd r6.x, g4, l(0), l(1)
        store_structured g5.x, r6.x, l(0), r5.z
      else 
        imm_atomic_iadd r6.x, g2, l(0), l(1)
        store_structured g3.x, r6.x, l(0), r5.z
      endif 
    endif 
  endif 
  iadd r5.z, r5.z, l(256)
endloop 
sync_g_t
ld_indexable(texture2d)(float,float,float,float) r2.xyzw, r1.xyww, t1.xyzw
lt r0.x, l(0.500000), r2.w
movc r0.x, r0.x, l(-0.500000), l(-0.000000)
add r0.x, r0.x, r2.w
mul r0.x, r0.x, l(14.000000)
ftou r0.x, r0.x
if_nz r0.x
  utof r3.xy, vThreadID.xyxx
  add r3.xy, r3.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
  div r0.yz, r3.xxyx, 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)
  mul r0.yz, r0.wwww, r0.yyzy

// Correct light placement:
add r20.w, r0.w, -r20.y
mad r0.y, -r20.w, r20.x, r0.y

  mul r3.xyzw, r0.zzzz, cb1[29].xyzw
  mad r3.xyzw, r0.yyyy, cb1[28].xyzw, r3.xyzw
  mad r3.xyzw, r0.wwww, cb1[30].xyzw, r3.xyzw
  add r3.xyzw, r3.xyzw, cb1[31].xyzw
  div r0.yzw, r3.xxyz, r3.wwww
  ld_raw r2.w, l(0), g2.xxxx
  ld_raw r3.x, l(0), g4.xxxx
  ld_indexable(texture2d)(float,float,float,float) r3.yzw, r1.xyww, t0.wxyz
  ld_indexable(texture2d)(float,float,float,float) r4.xyz, r1.xyww, t2.xyzw
  ld_indexable(texture2d)(float,float,float,float) r5.xyzw, r1.xyww, t3.xyzw
  ld_indexable(texture2d)(float,float,float,float) r6.xyzw, r1.xyww, t4.xyzw
  mad r3.yzw, r3.yyzw, l(0.000000, 2.000000, 2.000000, 2.000000), l(0.000000, -1.000000, -1.000000, -1.000000)
  dp3 r4.w, r3.yzwy, r3.yzwy
  rsq r4.w, r4.w
  mul r3.yzw, r3.yyzw, r4.wwww
  mad r7.xyz, -r4.xyzx, r2.xxxx, r4.xyzx
  mul r4.w, r2.y, l(0.080000)
  mad r4.xyz, -r2.yyyy, l(0.080000, 0.080000, 0.080000, 0.000000), r4.xyzx
  mad r4.xyz, r2.xxxx, r4.xyzx, r4.wwww
  mad r7.xyz, r7.xyzx, cb1[47].wwww, cb1[47].xyzx
  mad r4.xyz, r4.xyzx, cb1[48].wwww, cb1[48].xyzx
  resinfo_indexable(texture2d)(float,float,float,float)_uint r2.xy, l(0), t7.xyzw
  utof r8.xy, r1.xyxx
  add r8.xy, r8.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
  utof r2.xy, r2.xyxx
  div r2.xy, r8.xyxx, r2.xyxx
  sample_l_indexable(texture2d)(float,float,float,float) r8.x, r2.xyxx, t6.xyzw, s0, l(0.000000)
  add r9.xyz, r0.yzwy, -cb1[44].xyzx
  dp3 r2.x, r9.xyzx, r9.xyzx
  rsq r2.x, r2.x
  mul r9.xyz, r2.xxxx, r9.xyzx
  dp3 r2.x, r9.xyzx, r3.yzwy
  add r2.x, r2.x, r2.x
  mad r10.xyz, r3.yzwy, -r2.xxxx, r9.xyzx
  mul r5.yzw, r5.yyzw, r5.yyzw
  dp3 r2.x, r3.yzwy, -r9.xyzx
  add r2.x, |r2.x|, l(0.000010)
  add r2.y, -r2.x, l(1.000000)
  mul r4.w, r2.y, r2.y
  mul r4.w, r4.w, r4.w
  mul r2.y, r2.y, r4.w
  mul_sat r4.w, r4.y, l(50.000000)
  mad r7.w, r5.x, l(-2.900000), l(3.000000)
  add r11.y, -r5.x, l(1.000000)
  mov r12.y, l(1.000000)
  mov r8.z, r2.z
  mov r8.yw, l(0,1.000000,0,1.000000)
  mov r13.xyz, l(0,0,0,0)
  mov r14.w, l(0)
  mov r9.w, l(0)
  loop 
    uge r10.w, r9.w, r2.w
    breakc_nz r10.w
    ld_structured r10.w, r9.w, l(0), g3.xxxx
    lt r11.z, l(0.000000), cb2[r10.w + 0].w
    eq r11.w, cb3[r10.w + 1024].w, l(0.000000)
    add r15.xyz, -r0.yzwy, cb3[r10.w + 0].xyzx
    dp3 r12.w, r15.xyzx, r15.xyzx
    rsq r13.w, r12.w
    mul r16.xyz, r13.wwww, r15.xyzx
    add r15.w, r12.w, l(1.000000)
    div r17.y, l(1.000000, 1.000000, 1.000000, 1.000000), r15.w
    dp3 r15.w, r3.yzwy, r16.xyzx
    mov_sat r17.x, r15.w
    mul r16.w, cb3[r10.w + 0].w, cb3[r10.w + 0].w
    mul r12.w, r12.w, r16.w
    mad r12.w, -r12.w, r12.w, l(1.000000)
    max r12.w, r12.w, l(0.000000)
    mul r17.z, r12.w, r12.w
    mul r18.xyz, r15.xyzx, cb3[r10.w + 0].wwww
    dp3 r12.w, r18.xyzx, r18.xyzx
    min r12.w, r12.w, l(1.000000)
    add r12.w, -r12.w, l(1.000000)
    log r12.w, r12.w
    mul r12.w, r12.w, cb3[r10.w + 1024].w
    exp r12.z, r12.w
    mov r12.x, r17.x
    movc r12.xzw, r11.wwww, r17.xxyz, r12.xxyz
    dp3 r11.w, r16.xyzx, cb2[r10.w + 0].xyzx
    add r11.w, r11.w, -cb2[r10.w + 1024].x
    mul_sat r11.w, r11.w, cb2[r10.w + 1024].y
    mul r11.w, r11.w, r11.w
    movc r11.z, r11.z, r11.w, l(1.000000)
    lt r11.w, l(0.000000), r12.w
    lt r16.x, l(0.000000), r11.z
    and r11.w, r11.w, r16.x
    if_nz r11.w
      dp4 r11.w, cb2[r10.w + 2048].xyzw, l(1.000000, 1.000000, 1.000000, 1.000000)
      ne r16.x, l(0.000000, 0.000000, 0.000000, 0.000000), r11.w
      if_nz r16.x
        dp4 r16.x, r6.xyzw, cb2[r10.w + 2048].xyzw
        add r16.x, r16.x, l(-1.000000)
        mad r16.y, r11.w, r16.x, l(1.000000)
        mad_sat r11.w, r15.w, l(6.000000), l(-0.200000)
        mul r16.x, r11.w, r16.y
      else 
        mov r16.xy, r8.xyxx
      endif 
      mul r11.w, r12.w, r12.z
      mul r11.z, r11.z, r11.w
      mul r11.zw, r16.xxxy, r11.zzzz
      max r12.zw, r8.zzzw, |cb2[r10.w + 0].wwww|
      mul r16.xy, r12.zwzz, r12.zwzz
      lt r12.w, l(0.000000), cb2[r10.w + 1024].z
      if_nz r12.w
        mul r12.w, r13.w, cb2[r10.w + 1024].z
        min r12.w, r12.w, l(1.000000)
        mad r16.zw, r12.wwww, l(0.000000, 0.000000, 0.500000, 0.500000), r16.xxxy
        min r16.zw, r16.zzzw, l(0.000000, 0.000000, 1.000000, 1.000000)
        div r16.xy, r16.xyxx, r16.zwzz
        mul r16.xy, r16.xyxx, r16.xyxx
        dp3 r12.w, r15.xyzx, r10.xyzx
        mad r17.xyz, r12.wwww, r10.xyzx, -r15.xyzx
        dp3 r12.w, r17.xyzx, r17.xyzx
        rsq r12.w, r12.w
        mul r12.w, r12.w, cb2[r10.w + 1024].z
        min r12.w, r12.w, l(1.000000)
        mad r15.xyz, r17.xyzx, r12.wwww, r15.xyzx
      else 
        mov r16.xy, l(1.000000,1.000000,0,0)
      endif 
      dp3 r12.w, r15.xyzx, r15.xyzx
      rsq r12.w, r12.w
      mul r17.xyz, r12.wwww, r15.xyzx
      switch r0.x
        case l(0)
        case l(1)
        case l(2)
        case l(3)
        case l(5)
        case l(6)
        mad r19.xyz, r15.xyzx, r12.wwww, -r9.xyzx
        dp3 r13.w, r19.xyzx, r19.xyzx
        rsq r13.w, r13.w
        mul r19.xyz, r13.wwww, r19.xyzx
        dp3_sat r13.w, r3.yzwy, r17.xyzx
        dp3_sat r15.w, -r9.xyzx, r19.xyzx
        dp2 r15.w, r15.wwww, r15.wwww
        add r15.w, r15.w, l(0.500000)
        add r13.w, -r13.w, l(1.000000)
        mul r16.z, r13.w, r13.w
        mul r16.z, r16.z, r16.z
        mul r13.w, r13.w, r16.z
        mad r15.w, r15.w, r12.z, l(-1.000000)
        mad r16.z, r15.w, r2.y, l(1.000000)
        mad r13.w, r15.w, r13.w, l(1.000000)
        mul r13.w, r16.z, r13.w
        mul r13.w, r13.w, l(0.318309873)
        mul r19.xyz, r7.xyzx, r13.wwww
        mad r13.w, -r12.z, l(0.333300), l(1.000000)
        mul r19.xyz, r13.wwww, r19.xyzx
        mul r18.xyz, r16.yyyy, r19.xyzx
        break 
        case l(4)
        mov r18.xyz, l(0,0,0,0)
        break 
        default 
        mov r18.xyz, l(0,0,0,0)
        break 
      endswitch 
      switch r0.x
        case l(0)
        case l(1)
        case l(2)
        case l(3)
        case l(5)
        case l(6)
        mad r19.xyz, r15.xyzx, r12.wwww, -r9.xyzx
        dp3 r13.w, r19.xyzx, r19.xyzx
        rsq r13.w, r13.w
        mul r19.xyz, r13.wwww, r19.xyzx
        dp3_sat r13.w, r3.yzwy, r17.xyzx
        dp3_sat r15.w, r3.yzwy, r19.xyzx
        dp3_sat r17.w, -r9.xyzx, r19.xyzx
        mul r18.w, r12.z, r12.z
        mul r19.x, r18.w, r18.w
        mad r19.y, r15.w, r19.x, -r15.w
        mad r15.w, r19.y, r15.w, l(1.000000)
        mul r15.w, r15.w, r15.w
        mul r15.w, r15.w, l(3.14159274)
        div r15.w, r19.x, r15.w
        mul r15.w, r16.x, r15.w
        mad r12.z, -r12.z, r12.z, l(1.000000)
        mad r16.x, r2.x, r12.z, r18.w
        mad r12.z, r13.w, r12.z, r18.w
        mul r12.z, r2.x, r12.z
        mad r12.z, r13.w, r16.x, r12.z
        rcp r12.z, r12.z
        mul r12.z, r12.z, r15.w
        add r13.w, -r17.w, l(1.000000)
        mul r15.w, r13.w, r13.w
        mul r15.w, r15.w, r15.w
        mul r16.x, r13.w, r15.w
        mad r13.w, -r13.w, r15.w, l(1.000000)
        mul r19.xyz, r4.xyzx, r13.wwww
        mad r19.xyz, r4.wwww, r16.xxxx, r19.xyzx
        mul r12.z, r12.z, l(0.500000)
        mul r16.yzw, r19.xxyz, r12.zzzz
        break 
        case l(4)
        mov r16.yzw, l(0,0,0,0)
        break 
        default 
        mov r16.yzw, l(0,0,0,0)
        break 
      endswitch 
      mul r11.z, r11.z, r12.x
      mul r19.xyz, r11.zzzz, cb3[r10.w + 1024].xyzx
      add r16.xyz, r16.yzwy, r18.xyzx
      mul r18.xyz, r18.xyzx, r19.xyzx
      dp3 r11.z, r18.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
      switch r0.x
        case l(2)
        mad r12.xzw, r15.xxyz, r12.wwww, -r9.xxyz
        dp3 r13.w, r12.xzwx, r12.xzwx
        rsq r13.w, r13.w
        mul r12.xzw, r12.xxzw, r13.wwww
        dp3_sat r13.w, r17.xyzx, r9.xyzx
        log r13.w, r13.w
        mul r13.w, r13.w, l(12.000000)
        exp r13.w, r13.w
        mul r13.w, r7.w, r13.w
        dp3 r12.x, r3.yzwy, r12.xzwx
        mad r12.x, r12.x, r5.x, -r5.x
        add_sat r12.x, r12.x, l(1.000000)
        mul r12.z, r12.x, l(0.159154937)
        mad r12.x, -r12.x, l(0.159154937), l(1.000000)
        mad r12.x, r13.w, r12.x, r12.z
        mul r18.xyz, r5.yzwy, r12.xxxx
        break 
        case l(3)
        dp3 r12.x, r3.yzwy, r17.xyzx
        mad_sat r11.x, r12.x, l(0.500000), l(0.500000)
        sample_l_indexable(texture2d)(float,float,float,float) r12.xzw, r11.xyxx, t8.xwyz, s1, l(0.000000)
        mul r18.xyz, r5.yzwy, r12.xzwx
        break 
        case l(6)
        dp3 r11.x, -r3.yzwy, r17.xyzx
        add r11.x, r11.x, l(0.500000)
        mul_sat r11.x, r11.x, l(0.444444448)
        dp3_sat r12.x, -r9.xyzx, -r17.xyzx
        mul r12.x, r12.x, r12.x
        mad r12.x, r12.x, l(-0.640000), l(1.000000)
        mul r12.x, r12.x, r12.x
        div r12.x, l(0.114591561), r12.x
        mul r11.x, r11.x, r12.x
        mul r18.xyz, r5.yzwy, r11.xxxx
        break 
        default 
        mov r18.xyz, l(0,0,0,0)
        break 
      endswitch 
      mul r12.xzw, r11.wwww, cb3[r10.w + 1024].xxyz
      mul r12.xzw, r12.xxzw, r18.xxyz
      mad r15.xyz, r16.xyzx, r19.xyzx, r12.xzwx
      dp3 r10.w, r12.xzwx, l(0.300000, 0.590000, 0.110000, 0.000000)
      add r15.w, r10.w, r11.z
    else 
      mov r15.xyzw, l(0,0,0,0)
    endif 
    mov r14.xyz, r13.xyzx
    add r14.xyzw, r15.xyzw, r14.xyzw
    iadd r9.w, r9.w, l(1)
    mov r13.xyz, r14.xyzx
  endloop 
  mul r0.x, r2.z, r2.z
  mul r0.x, r0.x, r0.x
  mov r14.xyz, r13.xyzx
  mov r2.x, l(0)
  loop 
    uge r2.y, r2.x, r3.x
    breakc_nz r2.y
    ld_structured r2.y, r2.x, l(0), g5.xxxx
    eq r2.z, cb3[r2.y + 1024].w, l(0.000000)
    add r5.xyz, -r0.yzwy, cb3[r2.y + 0].xyzx
    dp3 r2.w, r5.xyzx, r5.xyzx
    add r4.w, r2.w, l(1.000000)
    div r4.w, l(1.000000, 1.000000, 1.000000, 1.000000), r4.w
    mul r5.w, cb3[r2.y + 0].w, cb3[r2.y + 0].w
    mul r5.w, r2.w, r5.w
    mad r5.w, -r5.w, r5.w, l(1.000000)
    max r5.w, r5.w, l(0.000000)
    mul r5.w, r5.w, r5.w
    mul r4.w, r4.w, r5.w
    mul r6.xyz, r5.xyzx, cb3[r2.y + 0].wwww
    dp3 r5.w, r6.xyzx, r6.xyzx
    min r5.w, r5.w, l(1.000000)
    add r5.w, -r5.w, l(1.000000)
    log r5.w, r5.w
    mul r5.w, r5.w, cb3[r2.y + 1024].w
    exp r5.w, r5.w
    movc r2.z, r2.z, r4.w, r5.w
    lt r4.w, l(0.000000), r2.z
    if_nz r4.w
      rsq r2.w, r2.w
      mul r6.xyz, r2.wwww, r5.xyzx
      dp3_sat r4.w, r3.yzwy, r6.xyzx
      mul r2.z, r8.x, r2.z
      mul r2.z, r2.z, r4.w
      mul r6.xyz, r2.zzzz, cb3[r2.y + 1024].xyzx
      mad r2.yzw, r5.xxyz, r2.wwww, -r9.xxyz
      dp3 r4.w, r2.yzwy, r2.yzwy
      rsq r4.w, r4.w
      mul r2.yzw, r2.yyzw, r4.wwww
      dp3_sat r2.y, r3.yzwy, r2.yzwy
      mad r2.z, r2.y, r0.x, -r2.y
      mad r2.y, r2.z, r2.y, l(1.000000)
      mul r2.y, r2.y, r2.y
      mul r2.y, r2.y, l(3.14159274)
      div r2.y, r0.x, r2.y
      mul r2.y, r2.y, l(0.250000)
      mul r2.yzw, r4.xxyz, r2.yyyy
      mad r2.yzw, r7.xxyz, l(0.000000, 0.318309873, 0.318309873, 0.318309873), r2.yyzw
      mul r2.yzw, r2.yyzw, r6.xxyz
    else 
      mov r2.yzw, l(0,0,0,0)
    endif 
    add r14.xyz, r2.yzwy, r14.xyzx
    iadd r2.x, r2.x, l(1)
  endloop 
else 
  mov r14.xyzw, l(0,0,0,0)
endif 
ult r0.xy, vThreadID.xyxx, cb0[0].zwzz
and r0.x, r0.y, r0.x
if_nz r0.x
  ld_indexable(texture2d)(float,float,float,float) r0.xyzw, r1.xyzw, t9.xyzw
  add r0.xyzw, r14.xyzw, r0.xyzw
  store_uav_typed u0.xyzw, r1.xyyy, r0.xyzw
endif 
ret 
// Approximately 0 instruction slots used