///lights DED -- fix adaption losti
// ---- Created with 3Dmigoto v1.3.6 on Mon Sep 03 17:16:30 2018

cbuffer _Globals : register(b0)
{
  float2 Params : packoffset(c0);
  float4 VPtoRTScaleBias : packoffset(c1);
  float4 shaderProperties : packoffset(c2);
  row_major float3x3 invViewMatrix : packoffset(c3);
}

cbuffer PerFrame : register(b13)
{
  float4x4 global_LightPropertyMatrix : packoffset(c0);
  float4x3 global_FogPropertyMatrix : packoffset(c4);
  float4 global_Data : packoffset(c7);
  float4 global_Data2 : packoffset(c8);
}

cbuffer PerView : register(b12)
{
  row_major float4x4 global_View : packoffset(c0);
  row_major float4x4 global_Projection : packoffset(c4);
  row_major float4x4 global_ViewProjection : packoffset(c8);
  float4 global_ViewPos : packoffset(c12);
  float4 global_ViewInfo : packoffset(c13);
  float4 global_ScaleAndBias : packoffset(c14);
}

SamplerState LinearSampler_s : register(s0);
Texture2D<float4> Exposure : register(t0);
Texture2D<float4> GBuffer0 : register(t1);
Texture2D<float4> GBuffer1 : register(t2);
Texture2D<float4> GBuffer2 : register(t3);
Texture2D<float4> GBuffer3 : register(t4);
Texture2D<float4> GBuffer4 : register(t5);
Texture2D<float4> LinearDepth : register(t6);
Texture2D<float4> IBL_Specular : register(t7);
Texture2D<float4> Base : register(t8);
Texture2D<float4> Shadow : register(t9);
//StructuredBuffer<ClusterInfoBuffer> ClusterInfoBuffer : register(t17);
//StructuredBuffer<LightIndexListsBuffer> LightIndexListsBuffer : register(t18);
//StructuredBuffer<LightDataBuffer> LightDataBuffer : register(t19);

// Resource bind info for ClusterInfoBuffer 17
struct ClusterInfoBuffer
{

  int2 Element;                     // Offset:    0 Size:     8

};
//
// Resource bind info for LightIndexListsBuffer 18
struct LightIndexListsBuffer
{

  int Element;                      // Offset:    0 Size:     4

};
//
// Resource bind info for LightDataBuffer 19
struct LightDataBuffer
{
//
//   struct PackedLight
//   {
//       
      float4 PositionRadius;         // Offset:    0
      float4 ColorOuterAngle;        // Offset:   16
      float4 DirectionInnerAngle;    // Offset:   32
//
//   } $Element;                        // Offset:    0 Size:    48

};



StructuredBuffer<ClusterInfoBuffer> ClusterInfoBufferSRV : register(t17);
StructuredBuffer<LightIndexListsBuffer> LightIndexListsBufferSRV : register(t18);
StructuredBuffer<LightDataBuffer> LightDataBufferSRV : register(t19);

// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);
#include <ShaderFixes/matrix.hlsl>

void main(
  float4 v0 : SV_Position0,
  float2 v1 : TexCoord0,
  float3 v2 : TexCoord1,
  out float4 o0 : SV_Target0)
{
// Needs manual fix for instruction:
// unknown dcl_: dcl_resource_structured t17, 8
// Needs manual fix for instruction:
// unknown dcl_: dcl_resource_structured t18, 4
// Needs manual fix for instruction:
// unknown dcl_: dcl_resource_structured t19, 48
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.xy = (int2)v0.xy;
  r0.zw = float2(0,0);
  r1.xyz = GBuffer0.Load(r0.xyw).xyz;
  r2.xyzw = GBuffer3.Load(r0.xyw).xyzw;
  r1.w = LinearDepth.Load(r0.xyw).x;
  r2.w = 255 * r2.w;
  r2.w = round(r2.w);
  r2.w = (uint)r2.w;
  r3.x = (int)r2.w & 1;
  r3.y = cmp(0 < (uint)r3.x);
  if (2 == 0) r2.w = 0; else if (2+1 < 32) {   r2.w = (uint)r2.w << (32-(2 + 1)); r2.w = (uint)r2.w >> (32-2);  } else r2.w = (uint)r2.w >> 1;
  r3.y = r3.y ? 0 : 1;
  r4.xyz = r3.yyy * r1.xyz;
  r3.z = cmp(0 != global_Data.y);
  r3.x = (int)r3.x;
  r5.xyz = r3.xxx * r1.xyz;
  r3.x = r3.z ? 0 : 1;
  r3.xzw = r5.xyz * r3.xxx;
  r4.w = cmp((int)r2.w == 1);
  r5.x = cmp(r1.w == 1.000000);
  r4.w = (int)r4.w | (int)r5.x;
  if (r4.w != 0) {
    r4.xyz = max(float3(0,0,0), r4.xyz);
    r4.w = Exposure.Load(float4(0,0,0,0)).x;
    r5.x = cmp(r4.w == 0.000000);
    r4.w = r5.x ? 0.00999999978 : r4.w;
    o0.xyz = r4.xyz * r4.www + r3.xzw;
    o0.w = 0;
    return;
  }
  r4.xy = GBuffer1.Load(r0.xyw).xy;
  r5.xyz = GBuffer2.Load(r0.xyw).xyz;
  r4.xy = r4.xy * float2(3.55539989,3.55539989) + float2(-1.77769995,-1.77769995);
  r4.z = 1;
  r4.z = dot(r4.xyz, r4.xyz);
  r4.z = 2 / r4.z;
  r6.xy = r4.zz * r4.xy;
  r6.z = -1 + r4.z;
  r2.x = max(0.0900000036, r2.x);
  r2.y = r2.y * r2.y;
  r2.y = 0.159999996 * r2.y;
  r4.x = dot(invViewMatrix._m00_m01_m02, r6.xyz);
  r4.y = dot(invViewMatrix._m10_m11_m12, r6.xyz);
  r4.z = dot(invViewMatrix._m20_m21_m22, r6.xyz);
  r6.xyz = r1.www * v2.xyz + global_ViewPos.xyz;


//r6 is a world coord.  Needs correcting in Proj space
//CORRECT WORLD COORD
r6.w = 1.0;
float4 s = StereoParams.Load(0);
float4 r25;
r25 = mul(global_ViewProjection, r6);  
r25.x -= s.x * (r25.w - s.y); 
r6 = mul(inverse(global_ViewProjection), r25); 

  r7.xyz = global_ViewPos.xyz + -r6.xyz;
  r4.w = dot(r7.xyz, r7.xyz);
  r4.w = rsqrt(r4.w);
  r8.xyz = r7.xyz * r4.www;
  r9.xy = cmp(float2(0,0) < shaderProperties.xw);
  if (r9.x != 0) {
    r9.x = Base.Sample(LinearSampler_s, v1.xy).x;
    r5.w = dot(r4.xyz, r8.xyz);
    r5.w = r5.w + r9.x;
    r6.w = r2.x * -16 + -1;
    r6.w = exp2(r6.w);
    r5.w = max(9.99999975e-005, abs(r5.w));
    r5.w = log2(r5.w);
    r5.w = r6.w * r5.w;
    r5.w = exp2(r5.w);
    r5.w = r5.w + r9.x;
    r9.z = saturate(-1 + r5.w);
  } else {
    r9.xz = float2(1,1);
  }
  if (r9.y != 0) {
    r5.w = Shadow.Load(r0.xyw).x;
  } else {
    r5.w = 1;
  }
  r10.xyz = IBL_Specular.Load(r0.xyw).xyz;
  r1.w = global_ViewInfo.x * r1.w;
  r9.yw = (uint2)r0.yx >> int2(7,7);
  r1.w = log2(r1.w);
  r1.w = r1.w * global_ScaleAndBias.x + global_ScaleAndBias.y;
  r1.w = max(0, r1.w);
  r1.w = min(31, r1.w);
  r1.w = trunc(r1.w);
  r9.yw = (int2)r9.yw;
  r1.w = r1.w * global_ScaleAndBias.w + r9.y;
  r1.w = r1.w * global_ScaleAndBias.z + r9.w;
  r1.w = (int)r1.w;
  if (r2.w == 0) {
    r2.w = dot(r8.xyz, r4.xyz);
    r6.w = r2.w + r2.w;
    r11.xyz = r4.xyz * -r6.www + r8.xyz;
    r2.w = max(9.99999975e-006, r2.w);
    r12.x = global_LightPropertyMatrix._m00;
    r12.y = global_LightPropertyMatrix._m01;
    r12.z = global_LightPropertyMatrix._m02;
    r13.xyz = r7.xyz * r4.www + r12.xyz;
    r6.w = dot(r13.xyz, r13.xyz);
    r6.w = rsqrt(r6.w);
    r13.xyz = r13.xyz * r6.www;
    r6.w = saturate(dot(r12.xyz, r13.xyz));
    r7.w = saturate(dot(r4.xyz, r12.xyz));
    r8.w = 1 + -r2.z;
    r13.xyz = r8.www * r5.xyz;
    r9.y = r2.x * -0.337748349 + 1;
    r6.w = r6.w * r6.w;
    r6.w = dot(r6.ww, r2.xx);
    r6.w = r2.x * 0.5 + r6.w;
    r6.w = -1 + r6.w;
    r9.w = 1 + -r7.w;
    r9.w = max(9.99999975e-005, r9.w);
    r10.w = r9.w * r9.w;
    r10.w = r10.w * r10.w;
    r9.w = r10.w * r9.w;
    r9.w = r6.w * r9.w + 1;
    r10.w = 1 + -r2.w;
    r10.w = max(9.99999975e-005, abs(r10.w));
    r11.w = r10.w * r10.w;
    r11.w = r11.w * r11.w;
    r10.w = r11.w * r10.w;
    r6.w = r6.w * r10.w + 1;
    r6.w = r9.w * r6.w;
    r6.w = r6.w * r9.y;
    r6.w = 0.318309873 * r6.w;
    r14.xyz = r13.xyz * r6.www;
    r6.w = dot(r12.xyz, r11.xyz);
    r15.xyz = -r6.www * r12.xyz + r11.xyz;
    r6.w = cmp(r6.w < 0.99998945);
    r9.w = dot(r15.xyz, r15.xyz);
    r9.w = rsqrt(r9.w);
    r15.xyz = r15.xyz * r9.www;
    r15.xyz = float3(0.00459006429,0.00459006429,0.00459006429) * r15.xyz;
    r12.xyz = r12.xyz * float3(0.99998945,0.99998945,0.99998945) + r15.xyz;
    r9.w = dot(r12.xyz, r12.xyz);
    r9.w = rsqrt(r9.w);
    r12.xyz = r12.xyz * r9.www;
    r11.xyz = r6.www ? r12.xyz : r11.xyz;
    r12.xyz = r7.xyz * r4.www + r11.xyz;
    r6.w = dot(r12.xyz, r12.xyz);
    r6.w = rsqrt(r6.w);
    r12.xyz = r12.xyz * r6.www;
    r6.w = saturate(dot(r11.xyz, r12.xyz));
    r9.w = saturate(dot(r4.xyz, r12.xyz));
    r11.x = saturate(dot(r4.xyz, r11.xyz));
    r11.yzw = r5.xyz * r2.zzz;
    r11.yzw = r8.www * r2.yyy + r11.yzw;
    r8.w = 1 + r2.x;
    r8.w = 0.5 * r8.w;
    r12.x = r2.x * r2.x;
    r12.yzw = float3(1,1,1) + -r11.yzw;
    r6.w = 1 + -r6.w;
    r6.w = max(9.99999975e-005, r6.w);
    r13.w = r6.w * r6.w;
    r13.w = r13.w * r13.w;
    r6.w = r13.w * r6.w;
    r15.xyz = r12.yzw * r6.www + r11.yzw;
    r6.w = r8.w * r8.w;
    r8.w = -r2.w * r6.w + r2.w;
    r8.w = r8.w * r2.w + r6.w;
    r8.w = sqrt(r8.w);
    r13.w = -r11.x * r6.w + r11.x;
    r13.w = r13.w * r11.x + r6.w;
    r13.w = sqrt(r13.w);
    r13.w = r13.w * r2.w;
    r11.x = r11.x * r8.w + r13.w;
    r11.x = rcp(r11.x);
    r11.x = 0.5 * r11.x;
    r12.x = r12.x * r12.x;
    r13.w = r9.w * r12.x + -r9.w;
    r9.w = r13.w * r9.w + 1;
    r9.w = r9.w * r9.w;
    r9.w = 3.14159274 * r9.w;
    r9.w = rcp(r9.w);
    r9.w = r12.x * r9.w;
    r15.xyz = r15.xyz * r11.xxx;
    r15.xyz = r15.xyz * r9.www;
    r16.x = global_LightPropertyMatrix._m20;
    r16.y = global_LightPropertyMatrix._m21;
    r16.z = global_LightPropertyMatrix._m22;
    r14.xyz = r16.xyz * r14.xyz;
    r14.xyz = r14.xyz * r7.www;
    r15.xyz = r16.xyz * r15.xyz;
    r15.xyz = r15.xyz * r7.www;
    r14.xyz = r14.xyz * r5.www;
    r15.xyz = r15.xyz * r5.www;
  // Known bad code for instruction (needs manual fix):
    //ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r16.xy, r1.w, l(0), t17.xyxx
  
//manual correction - Losti
  //r16.x = LinearSampler[]..swiz;
  //r16.y = LinearSampler[]..swiz;

  r16.x = ClusterInfoBufferSRV[r1.w].Element.x;
  r16.y = ClusterInfoBufferSRV[r1.w].Element.y;

    r7.w = (int)r16.y & 0x0000ffff;
    r9.w = (uint)r16.y >> 16;
    r16.yzw = r14.xyz;
    r17.xyz = r15.xyz;
    r11.x = r16.x;
    r13.w = 0;
    while (true) {
      r14.w = cmp((uint)r13.w >= (uint)r7.w);
      if (r14.w != 0) break;
    // Known bad code for instruction (needs manual fix):
        //ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r14.w, r11.x, l(0), t18.xxxx
    //r14.w = LinearSampler[]..swiz;
    
    //manual correction - Losti
    r14.w = LightIndexListsBufferSRV[r11.x].Element;



    // Known bad code for instruction (needs manual fix):
        //ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r18.xyzw, r14.w, l(0), t19.xyzw
        //r18.x = LinearSampler[]..swiz;
    //r18.y = LinearSampler[]..swiz;
    //r18.z = LinearSampler[]..swiz;
    //r18.w = LinearSampler[]..swiz;
      
    //manual correction - Losti
    r18.x = LightDataBufferSRV[r14.w].PositionRadius.x;
    r18.y = LightDataBufferSRV[r14.w].PositionRadius.y;
    r18.z = LightDataBufferSRV[r14.w].PositionRadius.z;
    r18.w = LightDataBufferSRV[r14.w].PositionRadius.w;


      r18.xyz = r18.xyz + -r6.xyz;
      r15.w = dot(r18.xyz, r18.xyz);
      r17.w = r18.w * r18.w;
      r18.w = rcp(r17.w);
      r18.w = cmp(r15.w < r18.w);
      if (r18.w != 0) {
        r18.w = max(1.00000001e-010, r15.w);
        r18.w = rsqrt(r18.w);
        r18.xyz = r18.xyz * r18.www;
        r18.w = saturate(dot(r4.xyz, r18.xyz));
        r19.x = cmp(0 < r18.w);
        if (r19.x != 0) {
        // Known bad code for instruction (needs manual fix):
//                ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r19.xyz, r14.w, l(16), t19.xyzx
//        r19.x = LinearSampler[]..swiz;
        //r19.y = LinearSampler[]..swiz;
        //r19.z = LinearSampler[]..swiz;


//manual correction - Losti
        r19.x = LightDataBufferSRV[r14.w].ColorOuterAngle.x;
        r19.y = LightDataBufferSRV[r14.w].ColorOuterAngle.y;
        r19.z = LightDataBufferSRV[r14.w].ColorOuterAngle.z;


          r20.xyz = r7.xyz * r4.www + r18.xyz;
          r14.w = dot(r20.xyz, r20.xyz);
          r14.w = max(1.00000001e-010, r14.w);
          r14.w = rsqrt(r14.w);
          r20.xyz = r20.xyz * r14.www;
          r14.w = saturate(dot(r18.xyz, r20.xyz));
          r18.x = saturate(dot(r4.xyz, r20.xyz));
          r17.w = r17.w * r15.w;
          r17.w = -r17.w * r17.w + 1;
          r17.w = max(0, r17.w);
          r17.w = r17.w * r17.w;
          r15.w = max(9.99999975e-005, r15.w);
          r15.w = rcp(r15.w);
          r15.w = r17.w * r15.w;
          r15.w = r18.w * r15.w;
          r15.w = 0.0795774683 * r15.w;
          r19.xyz = r19.xyz * r15.www;
          r15.w = r14.w * r14.w;
          r15.w = dot(r15.ww, r2.xx);
          r15.w = r2.x * 0.5 + r15.w;
          r15.w = -1 + r15.w;
          r17.w = 1 + -r18.w;
          r17.w = max(9.99999975e-005, r17.w);
          r18.y = r17.w * r17.w;
          r18.y = r18.y * r18.y;
          r17.w = r18.y * r17.w;
          r17.w = r15.w * r17.w + 1;
          r15.w = r15.w * r10.w + 1;
          r15.w = r17.w * r15.w;
          r15.w = r15.w * r9.y;
          r15.w = 0.318309873 * r15.w;
          r20.xyz = r15.www * r13.xyz;
          r16.yzw = r19.xyz * r20.xyz + r16.yzw;
          r14.w = 1 + -r14.w;
          r14.w = max(9.99999975e-005, r14.w);
          r15.w = r14.w * r14.w;
          r15.w = r15.w * r15.w;
          r14.w = r15.w * r14.w;
          r20.xyz = r12.yzw * r14.www + r11.yzw;
          r14.w = -r18.w * r6.w + r18.w;
          r14.w = r14.w * r18.w + r6.w;
          r14.w = sqrt(r14.w);
          r14.w = r14.w * r2.w;
          r14.w = r18.w * r8.w + r14.w;
          r14.w = rcp(r14.w);
          r14.w = 0.5 * r14.w;
          r15.w = r18.x * r12.x + -r18.x;
          r15.w = r15.w * r18.x + 1;
          r15.w = r15.w * r15.w;
          r15.w = 3.14159274 * r15.w;
          r15.w = rcp(r15.w);
          r15.w = r15.w * r12.x;
          r18.xyz = r20.xyz * r14.www;
          r18.xyz = r18.xyz * r15.www;
          r17.xyz = r19.xyz * r18.xyz + r17.xyz;
        }
      }
      r11.x = (int)r11.x + 1;
      r13.w = (int)r13.w + 1;
    }
    r14.xyz = r16.yzw;
    r15.xyz = r17.xyz;
    r7.w = r11.x;
    r13.w = 0;
    while (true) {
      r14.w = cmp((uint)r13.w >= (uint)r9.w);
      if (r14.w != 0) break;
    // Known bad code for instruction (needs manual fix):
    //    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r14.w, r7.w, l(0), t18.xxxx
    //r14.w = LinearSampler[]..swiz;

//manual correction - Losti
    r14.w = LightIndexListsBufferSRV[r7.w].Element;


    // Known bad code for instruction (needs manual fix):
        //ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r18.xyzw, r14.w, l(0), t19.xyzw
    //r18.x = LinearSampler[]..swiz;
    //r18.y = LinearSampler[]..swiz;
    //r18.z = LinearSampler[]..swiz;
    //r18.w = LinearSampler[]..swiz;

    //manual correction - Losti
    r18.x = LightDataBufferSRV[r14.w].PositionRadius.x;
    r18.y = LightDataBufferSRV[r14.w].PositionRadius.y;
    r18.z = LightDataBufferSRV[r14.w].PositionRadius.z;
    r18.w = LightDataBufferSRV[r14.w].PositionRadius.w;

      r18.xyz = r18.xyz + -r6.xyz;
      r15.w = dot(r18.xyz, r18.xyz);
      r16.x = r18.w * r18.w;
      r17.w = rcp(r16.x);
      r17.w = cmp(r15.w < r17.w);
      if (r17.w != 0) {
        r17.w = max(1.00000001e-010, r15.w);
        r17.w = rsqrt(r17.w);
        r18.xyz = r18.xyz * r17.www;
        r17.w = saturate(dot(r4.xyz, r18.xyz));
        r18.w = cmp(0 < r17.w);
        if (r18.w != 0) {
        // Known bad code for instruction (needs manual fix):
          //      ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r19.xyzw, r14.w, l(16), t19.xyzw
        //r19.x = LinearSampler[]..swiz;
        //r19.y = LinearSampler[]..swiz;
        //r19.z = LinearSampler[]..swiz;
        //r19.w = LinearSampler[]..swiz;
        
//manual correction - Losti
        r19.x = LightDataBufferSRV[r14.w].ColorOuterAngle.x;
        r19.y = LightDataBufferSRV[r14.w].ColorOuterAngle.y;
        r19.z = LightDataBufferSRV[r14.w].ColorOuterAngle.z;
        r19.w = LightDataBufferSRV[r14.w].ColorOuterAngle.w;

        // Known bad code for instruction (needs manual fix):
                //ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r14.w, l(32), t19.xyzw
        //r20.x = LinearSampler[]..swiz;
        //r20.y = LinearSampler[]..swiz;
        //r20.z = LinearSampler[]..swiz;
        //r20.w = LinearSampler[]..swiz;
          

//manual correction - Losti
        r20.x = LightDataBufferSRV[r14.w].DirectionInnerAngle.x;
        r20.y = LightDataBufferSRV[r14.w].DirectionInnerAngle.y;
        r20.z = LightDataBufferSRV[r14.w].DirectionInnerAngle.z;
        r20.w = LightDataBufferSRV[r14.w].DirectionInnerAngle.w;



          r21.xyz = r7.xyz * r4.www + r18.xyz;
          r14.w = dot(r21.xyz, r21.xyz);
          r14.w = max(1.00000001e-010, r14.w);
          r14.w = rsqrt(r14.w);
          r21.xyz = r21.xyz * r14.www;
          r14.w = saturate(dot(r18.xyz, r21.xyz));
          r18.w = saturate(dot(r4.xyz, r21.xyz));
          r21.x = dot(r20.xyz, r20.xyz);
          r21.x = rsqrt(r21.x);
          r20.xyz = r21.xxx * r20.xyz;
          r18.x = dot(-r18.xyz, r20.xyz);
          r18.y = cmp(r19.w < r18.x);
          r16.x = r16.x * r15.w;
          r16.x = -r16.x * r16.x + 1;
          r16.x = max(0, r16.x);
          r16.x = r16.x * r16.x;
          r15.w = max(9.99999975e-005, r15.w);
          r15.w = rcp(r15.w);
          r15.w = r16.x * r15.w;
          r16.x = r18.x + -r19.w;
          r18.x = r20.w + -r19.w;
          r18.x = max(9.99999997e-007, r18.x);
          r16.x = saturate(r16.x / r18.x);
          r16.x = r16.x * r16.x;
          r15.w = r16.x * r15.w;
          r15.w = r17.w * r15.w;
          r15.w = r18.y ? r15.w : 0;
          r15.w = 0.318309873 * r15.w;
          r18.xyz = r19.xyz * r15.www;
          r15.w = r14.w * r14.w;
          r15.w = dot(r15.ww, r2.xx);
          r15.w = r2.x * 0.5 + r15.w;
          r15.w = -1 + r15.w;
          r16.x = 1 + -r17.w;
          r16.x = max(9.99999975e-005, r16.x);
          r19.x = r16.x * r16.x;
          r19.x = r19.x * r19.x;
          r16.x = r19.x * r16.x;
          r16.x = r15.w * r16.x + 1;
          r15.w = r15.w * r10.w + 1;
          r15.w = r16.x * r15.w;
          r15.w = r15.w * r9.y;
          r15.w = 0.318309873 * r15.w;
          r19.xyz = r15.www * r13.xyz;
          r14.xyz = r18.xyz * r19.xyz + r14.xyz;
          r14.w = 1 + -r14.w;
          r14.w = max(9.99999975e-005, r14.w);
          r15.w = r14.w * r14.w;
          r15.w = r15.w * r15.w;
          r14.w = r15.w * r14.w;
          r19.xyz = r12.yzw * r14.www + r11.yzw;
          r14.w = -r17.w * r6.w + r17.w;
          r14.w = r14.w * r17.w + r6.w;
          r14.w = sqrt(r14.w);
          r14.w = r14.w * r2.w;
          r14.w = r17.w * r8.w + r14.w;
          r14.w = rcp(r14.w);
          r14.w = 0.5 * r14.w;
          r15.w = r18.w * r12.x + -r18.w;
          r15.w = r15.w * r18.w + 1;
          r15.w = r15.w * r15.w;
          r15.w = 3.14159274 * r15.w;
          r15.w = rcp(r15.w);
          r15.w = r15.w * r12.x;
          r19.xyz = r19.xyz * r14.www;
          r19.xyz = r19.xyz * r15.www;
          r15.xyz = r18.xyz * r19.xyz + r15.xyz;
        }
      }
      r7.w = (int)r7.w + 1;
      r13.w = (int)r13.w + 1;
    }
  } else {
    r0.xyzw = GBuffer4.Load(r0.xyz).xyzw;
    r0.yz = float2(255,15.9375) * r0.zy;
    r2.w = floor(r0.z);
    r11.x = r0.x * 4080 + r2.w;
    r0.x = frac(r0.z);
    r11.y = r0.x * 4096 + r0.y;
    r0.xy = r11.xy * float2(0.000488519785,0.000488519785) + float2(-1,-1);
    r0.xy = max(float2(-1,-1), r0.xy);
    r0.xy = min(float2(1,1), r0.xy);
    r11.xyz = float3(1,1,1) + -abs(r0.xyx);
    r12.z = r11.x + -abs(r0.y);
    r0.z = cmp(r12.z >= 0);
    r9.yw = cmp(r0.xy >= float2(0,0));
    r9.yw = r9.yw ? float2(1,1) : float2(-1,-1);
    r9.yw = r11.yz * r9.yw;
    r12.xy = r0.zz ? r0.xy : r9.yw;
    r0.x = dot(r12.xyz, r12.xyz);
    r0.x = rsqrt(r0.x);
    r0.xyz = r12.xyz * r0.xxx;
    r11.x = dot(invViewMatrix._m00_m01_m02, r0.xyz);
    r11.y = dot(invViewMatrix._m10_m11_m12, r0.xyz);
    r11.z = dot(invViewMatrix._m20_m21_m22, r0.xyz);
    r0.x = dot(r8.xyz, r4.xyz);
    r0.y = r0.x + r0.x;
    r8.xyz = r4.xyz * -r0.yyy + r8.xyz;
    r0.x = max(9.99999975e-006, r0.x);
    r12.x = global_LightPropertyMatrix._m00;
    r12.y = global_LightPropertyMatrix._m01;
    r12.z = global_LightPropertyMatrix._m02;
    r13.xyz = r7.xyz * r4.www + r12.xyz;
    r0.y = dot(r13.xyz, r13.xyz);
    r0.y = rsqrt(r0.y);
    r13.xyz = r13.xyz * r0.yyy;
    r0.y = saturate(dot(r12.xyz, r13.xyz));
    r0.z = saturate(dot(r4.xyz, r12.xyz));
    r2.w = 1 + -r2.z;
    r13.xyz = r2.www * r5.xyz;
    r6.w = r2.x * -0.337748349 + 1;
    r0.y = r0.y * r0.y;
    r0.y = dot(r0.yy, r2.xx);
    r0.y = r2.x * 0.5 + r0.y;
    r0.y = -1 + r0.y;
    r7.w = 1 + -r0.z;
    r7.w = max(9.99999975e-005, r7.w);
    r8.w = r7.w * r7.w;
    r8.w = r8.w * r8.w;
    r7.w = r8.w * r7.w;
    r7.w = r0.y * r7.w + 1;
    r8.w = 1 + -r0.x;
    r8.w = max(9.99999975e-005, abs(r8.w));
    r9.y = r8.w * r8.w;
    r9.y = r9.y * r9.y;
    r8.w = r9.y * r8.w;
    r0.y = r0.y * r8.w + 1;
    r0.y = r7.w * r0.y;
    r0.y = r0.y * r6.w;
    r0.y = 0.318309873 * r0.y;
    r16.xyz = r13.xyz * r0.yyy;
    r0.y = dot(r12.xyz, r8.xyz);
    r17.xyz = -r0.yyy * r12.xyz + r8.xyz;
    r0.y = cmp(r0.y < 0.99998945);
    r7.w = dot(r17.xyz, r17.xyz);
    r7.w = rsqrt(r7.w);
    r17.xyz = r17.xyz * r7.www;
    r17.xyz = float3(0.00459006429,0.00459006429,0.00459006429) * r17.xyz;
    r12.xyz = r12.xyz * float3(0.99998945,0.99998945,0.99998945) + r17.xyz;
    r7.w = dot(r12.xyz, r12.xyz);
    r7.w = rsqrt(r7.w);
    r12.xyz = r12.xyz * r7.www;
    r8.xyz = r0.yyy ? r12.xyz : r8.xyz;
    r12.xyz = r7.xyz * r4.www + r8.xyz;
    r0.y = dot(r12.xyz, r12.xyz);
    r0.y = rsqrt(r0.y);
    r12.xyz = r12.xyz * r0.yyy;
    r0.y = saturate(dot(r8.xyz, r12.xyz));
    r7.w = saturate(dot(r4.xyz, r12.xyz));
    r8.x = saturate(dot(r4.xyz, r8.xyz));
    r8.y = dot(r12.xyz, r11.xyz);
    r5.xyz = r5.xyz * r2.zzz;
    r2.yzw = r2.www * r2.yyy + r5.xyz;
    r5.x = 1 + r2.x;
    r5.x = 0.5 * r5.x;
    r5.y = r2.x * r2.x;
    r12.xyz = float3(1,1,1) + -r2.yzw;
    r0.y = 1 + -r0.y;
    r0.y = max(9.99999975e-005, r0.y);
    r5.z = r0.y * r0.y;
    r5.z = r5.z * r5.z;
    r0.y = r5.z * r0.y;
    r17.xyz = r12.xyz * r0.yyy + r2.yzw;
    r0.y = r5.x * r5.x;
    r5.x = -r0.x * r0.y + r0.x;
    r5.x = r5.x * r0.x + r0.y;
    r5.z = -r8.x * r0.y + r8.x;
    r5.z = r5.z * r8.x + r0.y;
    r5.xz = sqrt(r5.xz);
    r5.z = r5.z * r0.x;
    r5.z = r8.x * r5.x + r5.z;
    r5.z = rcp(r5.z);
    r5.z = 0.5 * r5.z;
    r0.w = -r0.w * 0.899999976 + 1;
    r0.w = sqrt(r0.w);
    r8.x = r5.y / r0.w;
    r8.x = min(1, r8.x);
    r8.x = max(0.00100000005, r8.x);
    r0.w = r5.y * r0.w;
    r0.w = max(0.00100000005, r0.w);
    r5.y = r8.y * r8.y;
    r8.y = -r8.y * r8.y + 1;
    r8.y = -r7.w * r7.w + r8.y;
    r8.z = r8.x * r8.x;
    r5.y = r5.y / r8.z;
    r9.y = r0.w * r0.w;
    r8.y = r8.y / r9.y;
    r5.y = r8.y + r5.y;
    r5.y = r7.w * r7.w + r5.y;
    r0.w = r8.x * r0.w;
    r0.w = 3.14159274 * r0.w;
    r5.y = r5.y * r5.y;
    r5.y = r5.y * r0.w;
    r5.y = rcp(r5.y);
    r17.xyz = r17.xyz * r5.zzz;
    r17.xyz = r17.xyz * r5.yyy;
    r18.x = global_LightPropertyMatrix._m20;
    r18.y = global_LightPropertyMatrix._m21;
    r18.z = global_LightPropertyMatrix._m22;
    r16.xyz = r18.xyz * r16.xyz;
    r16.xyz = r16.xyz * r0.zzz;
    r17.xyz = r18.xyz * r17.xyz;
    r17.xyz = r17.xyz * r0.zzz;
    r16.xyz = r16.xyz * r5.www;
    r5.yzw = r17.xyz * r5.www;
  // Known bad code for instruction (needs manual fix):
    //ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r8.xy, r1.w, l(0), t17.xyxx
  //r8.x = LinearSampler[]..swiz;
  //r8.y = LinearSampler[]..swiz;
    
//manual correction - Losti
r2.x = ClusterInfoBufferSRV[r1.w].Element.x;
  r2.y = ClusterInfoBufferSRV[r1.w].Element.y;

    r0.z = (int)r8.y & 0x0000ffff;
    r1.w = (uint)r8.y >> 16;
    r17.xyz = r16.xyz;
    r18.xyz = r5.yzw;
    r7.w = r8.x;
    r8.y = 0;
    while (true) {
      r9.w = cmp((uint)r8.y >= (uint)r0.z);
      if (r9.w != 0) break;
    // Known bad code for instruction (needs manual fix):
        //ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r9.w, r7.w, l(0), t18.xxxx
    //r9.w = LinearSampler[]..swiz;
    
//manual correction - Losti
    r9.w = LightIndexListsBufferSRV[r7.w].Element;



    // Known bad code for instruction (needs manual fix):
        //ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r19.xyzw, r9.w, l(0), t19.xyzw
    //r19.x = LinearSampler[]..swiz;
    //r19.y = LinearSampler[]..swiz;
    //r19.z = LinearSampler[]..swiz;
    //r19.w = LinearSampler[]..swiz;

//manual correction - Losti
    r19.x = LightDataBufferSRV[r9.w].PositionRadius.x;
    r19.y = LightDataBufferSRV[r9.w].PositionRadius.y;
    r19.z = LightDataBufferSRV[r9.w].PositionRadius.z;
    r19.w = LightDataBufferSRV[r9.w].PositionRadius.w;


      r19.xyz = r19.xyz + -r6.xyz;
      r10.w = dot(r19.xyz, r19.xyz);
      r11.w = r19.w * r19.w;
      r12.w = rcp(r11.w);
      r12.w = cmp(r10.w < r12.w);
      if (r12.w != 0) {
        r12.w = max(1.00000001e-010, r10.w);
        r12.w = rsqrt(r12.w);
        r19.xyz = r19.xyz * r12.www;
        r12.w = saturate(dot(r4.xyz, r19.xyz));
        r13.w = cmp(0 < r12.w);
        if (r13.w != 0) {
        // Known bad code for instruction (needs manual fix):
                //ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyz, r9.w, l(16), t19.xyzx
        //r20.x = LinearSampler[]..swiz;
        //r20.y = LinearSampler[]..swiz;
        //r20.z = LinearSampler[]..swiz;
          
//manual correction - Losti
        r20.x = LightDataBufferSRV[r9.w].ColorOuterAngle.x;
        r20.y = LightDataBufferSRV[r9.w].ColorOuterAngle.y;
        r20.z = LightDataBufferSRV[r9.w].ColorOuterAngle.z;

          r21.xyz = r7.xyz * r4.www + r19.xyz;
          r9.w = dot(r21.xyz, r21.xyz);
          r9.w = max(1.00000001e-010, r9.w);
          r9.w = rsqrt(r9.w);
          r21.xyz = r21.xyz * r9.www;
          r9.w = saturate(dot(r19.xyz, r21.xyz));
          r13.w = saturate(dot(r4.xyz, r21.xyz));
          r11.w = r11.w * r10.w;
          r11.w = -r11.w * r11.w + 1;
          r11.w = max(0, r11.w);
          r11.w = r11.w * r11.w;
          r10.w = max(9.99999975e-005, r10.w);
          r10.w = rcp(r10.w);
          r10.w = r11.w * r10.w;
          r10.w = r12.w * r10.w;
          r10.w = 0.0795774683 * r10.w;
          r11.w = dot(r21.xyz, r11.xyz);
          r19.xyz = r20.xyz * r10.www;
          r10.w = r9.w * r9.w;
          r10.w = dot(r10.ww, r2.xx);
          r10.w = r2.x * 0.5 + r10.w;
          r10.w = -1 + r10.w;
          r14.w = 1 + -r12.w;
          r14.w = max(9.99999975e-005, r14.w);
          r15.w = r14.w * r14.w;
          r15.w = r15.w * r15.w;
          r14.w = r15.w * r14.w;
          r14.w = r10.w * r14.w + 1;
          r10.w = r10.w * r8.w + 1;
          r10.w = r14.w * r10.w;
          r10.w = r10.w * r6.w;
          r10.w = 0.318309873 * r10.w;
          r20.xyz = r13.xyz * r10.www;
          r17.xyz = r19.xyz * r20.xyz + r17.xyz;
          r9.w = 1 + -r9.w;
          r9.w = max(9.99999975e-005, r9.w);
          r10.w = r9.w * r9.w;
          r10.w = r10.w * r10.w;
          r9.w = r10.w * r9.w;
          r20.xyz = r12.xyz * r9.www + r2.yzw;
          r9.w = -r12.w * r0.y + r12.w;
          r9.w = r9.w * r12.w + r0.y;
          r9.w = sqrt(r9.w);
          r9.w = r9.w * r0.x;
          r9.w = r12.w * r5.x + r9.w;
          r9.w = rcp(r9.w);
          r9.w = 0.5 * r9.w;
          r10.w = r11.w * r11.w;
          r11.w = -r11.w * r11.w + 1;
          r11.w = -r13.w * r13.w + r11.w;
          r10.w = r10.w / r8.z;
          r11.w = r11.w / r9.y;
          r10.w = r11.w + r10.w;
          r10.w = r13.w * r13.w + r10.w;
          r10.w = r10.w * r10.w;
          r10.w = r10.w * r0.w;
          r10.w = rcp(r10.w);
          r20.xyz = r20.xyz * r9.www;
          r20.xyz = r20.xyz * r10.www;
          r18.xyz = r19.xyz * r20.xyz + r18.xyz;
        }
      }
      r7.w = (int)r7.w + 1;
      r8.y = (int)r8.y + 1;
    }
    r14.xyz = r17.xyz;
    r15.xyz = r18.xyz;
    r0.z = r7.w;
    r5.y = 0;
    while (true) {
      r5.z = cmp((uint)r5.y >= (uint)r1.w);
      if (r5.z != 0) break;
    // Known bad code for instruction (needs manual fix):
        //ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r5.z, r0.z, l(0), t18.xxxx
    //r5.z = LinearSampler[]..swiz;
    
//manual correction - Losti
r5.z = LightIndexListsBufferSRV[r0.z].Element;

    // Known bad code for instruction (needs manual fix):
//        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r16.xyzw, r5.z, l(0), t19.xyzw
    //r16.x = LinearSampler[]..swiz;
    //r16.y = LinearSampler[]..swiz;
    //r16.z = LinearSampler[]..swiz;
    //r16.w = LinearSampler[]..swiz;
      
//manual correction - Losti
    r16.x = LightDataBufferSRV[r5.z].PositionRadius.x;
    r16.y = LightDataBufferSRV[r5.z].PositionRadius.y;
    r16.z = LightDataBufferSRV[r5.z].PositionRadius.z;
    r16.w = LightDataBufferSRV[r5.z].PositionRadius.w;

      r16.xyz = r16.xyz + -r6.xyz;
      r5.w = dot(r16.xyz, r16.xyz);
      r8.x = r16.w * r16.w;
      r8.y = rcp(r8.x);
      r8.y = cmp(r5.w < r8.y);
      if (r8.y != 0) {
        r8.y = max(1.00000001e-010, r5.w);
        r8.y = rsqrt(r8.y);
        r16.xyz = r16.xyz * r8.yyy;
        r8.y = saturate(dot(r4.xyz, r16.xyz));
        r9.w = cmp(0 < r8.y);
        if (r9.w != 0) {
        // Known bad code for instruction (needs manual fix):
            //    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r19.xyzw, r5.z, l(16), t19.xyzw
  //      r19.x = LinearSampler[]..swiz;
    //    r19.y = LinearSampler[]..swiz;
      //  r19.z = LinearSampler[]..swiz;
        //r19.w = LinearSampler[]..swiz;
        

//manual correction - Losti
        r19.x = LightDataBufferSRV[r5.z].ColorOuterAngle.x;
        r19.y = LightDataBufferSRV[r5.z].ColorOuterAngle.y;
        r19.z = LightDataBufferSRV[r5.z].ColorOuterAngle.z;
        r19.w = LightDataBufferSRV[r5.z].ColorOuterAngle.w;



        // Known bad code for instruction (needs manual fix):
                //ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r5.z, l(32), t19.xyzw
        //r20.x = LinearSampler[]..swiz;
        //r20.y = LinearSampler[]..swiz;
        //r20.z = LinearSampler[]..swiz;
        //r20.w = LinearSampler[]..swiz;


//manual correction - Losti
        r20.x = LightDataBufferSRV[r5.z].DirectionInnerAngle.x;
        r20.y = LightDataBufferSRV[r5.z].DirectionInnerAngle.y;
        r20.z = LightDataBufferSRV[r5.z].DirectionInnerAngle.z;
        r20.w = LightDataBufferSRV[r5.z].DirectionInnerAngle.w;



          r21.xyz = r7.xyz * r4.www + r16.xyz;
          r5.z = dot(r21.xyz, r21.xyz);
          r5.z = max(1.00000001e-010, r5.z);
          r5.z = rsqrt(r5.z);
          r21.xyz = r21.xyz * r5.zzz;
          r5.z = saturate(dot(r16.xyz, r21.xyz));
          r9.w = saturate(dot(r4.xyz, r21.xyz));
          r10.w = dot(r20.xyz, r20.xyz);
          r10.w = rsqrt(r10.w);
          r20.xyz = r20.xyz * r10.www;
          r10.w = dot(-r16.xyz, r20.xyz);
          r11.w = cmp(r19.w < r10.w);
          r8.x = r8.x * r5.w;
          r8.x = -r8.x * r8.x + 1;
          r8.x = max(0, r8.x);
          r8.x = r8.x * r8.x;
          r5.w = max(9.99999975e-005, r5.w);
          r5.w = rcp(r5.w);
          r5.w = r8.x * r5.w;
          r8.x = r10.w + -r19.w;
          r10.w = r20.w + -r19.w;
          r10.w = max(9.99999997e-007, r10.w);
          r8.x = saturate(r8.x / r10.w);
          r8.x = r8.x * r8.x;
          r5.w = r8.x * r5.w;
          r5.w = r8.y * r5.w;
          r5.w = r11.w ? r5.w : 0;
          r5.w = 0.318309873 * r5.w;
          r8.x = dot(r21.xyz, r11.xyz);
          r16.xyz = r19.xyz * r5.www;
          r5.w = r5.z * r5.z;
          r5.w = dot(r5.ww, r2.xx);
          r5.w = r2.x * 0.5 + r5.w;
          r5.w = -1 + r5.w;
          r10.w = 1 + -r8.y;
          r10.w = max(9.99999975e-005, r10.w);
          r11.w = r10.w * r10.w;
          r11.w = r11.w * r11.w;
          r10.w = r11.w * r10.w;
          r10.w = r5.w * r10.w + 1;
          r5.w = r5.w * r8.w + 1;
          r5.w = r10.w * r5.w;
          r5.w = r5.w * r6.w;
          r5.w = 0.318309873 * r5.w;
          r19.xyz = r13.xyz * r5.www;
          r14.xyz = r16.xyz * r19.xyz + r14.xyz;
          r5.z = 1 + -r5.z;
          r5.z = max(9.99999975e-005, r5.z);
          r5.w = r5.z * r5.z;
          r5.w = r5.w * r5.w;
          r5.z = r5.z * r5.w;
          r19.xyz = r12.xyz * r5.zzz + r2.yzw;
          r5.z = -r8.y * r0.y + r8.y;
          r5.z = r5.z * r8.y + r0.y;
          r5.z = sqrt(r5.z);
          r5.z = r5.z * r0.x;
          r5.z = r8.y * r5.x + r5.z;
          r5.z = rcp(r5.z);
          r5.z = 0.5 * r5.z;
          r5.w = r8.x * r8.x;
          r8.x = -r8.x * r8.x + 1;
          r8.x = -r9.w * r9.w + r8.x;
          r5.w = r5.w / r8.z;
          r8.x = r8.x / r9.y;
          r5.w = r8.x + r5.w;
          r5.w = r9.w * r9.w + r5.w;
          r5.w = r5.w * r5.w;
          r5.w = r5.w * r0.w;
          r5.w = rcp(r5.w);
          r19.xyz = r19.xyz * r5.zzz;
          r19.xyz = r19.xyz * r5.www;
          r15.xyz = r16.xyz * r19.xyz + r15.xyz;
        }
      }
      r0.z = (int)r0.z + 1;
      r5.y = (int)r5.y + 1;
    }
  }
  r0.xy = float2(-1,-1) + r9.xz;
  r0.xy = shaderProperties.yy * r0.xy + float2(1,1);
  r0.yzw = r15.xyz * r0.yyy;
  r0.xyz = r14.xyz * r0.xxx + r0.yzw;
  r0.xyz = r3.yyy * r1.xyz + r0.xyz;
  r0.xyz = max(float3(0,0,0), r0.xyz);
  r0.w = Exposure.Load(float4(0,0,0,0)).x;
  r1.x = cmp(r0.w == 0.000000);
  r0.w = r1.x ? 0.00999999978 : r0.w;
  r0.xyz = r0.xyz * r0.www + r3.xzw;
  o0.xyz = r10.xyz * r9.zzz + r0.xyz;
  o0.w = 1;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
//
//   using 3Dmigoto v1.3.6 on Mon Sep 03 17:16:30 2018
//
//
// Buffer Definitions:
//
// cbuffer $Globals
// {
//
//   float2 Params;                     // Offset:    0 Size:     8 [unused]
//   float4 VPtoRTScaleBias;            // Offset:   16 Size:    16 [unused]
//   float4 shaderProperties;           // Offset:   32 Size:    16
//   row_major float3x3 invViewMatrix;  // Offset:   48 Size:    44
//
// }
//
// cbuffer PerFrame
// {
//
//   float4x4 global_LightPropertyMatrix;// Offset:    0 Size:    64
//   float4x3 global_FogPropertyMatrix; // Offset:   64 Size:    48 [unused]
//   float4 global_Data;                // Offset:  112 Size:    16
//   float4 global_Data2;               // Offset:  128 Size:    16 [unused]
//
// }
//
// cbuffer PerView
// {
//
//   row_major float4x4 global_View;    // Offset:    0 Size:    64 [unused]
//   row_major float4x4 global_Projection;// Offset:   64 Size:    64 [unused]
//   row_major float4x4 global_ViewProjection;// Offset:  128 Size:    64 [unused]
//   float4 global_ViewPos;             // Offset:  192 Size:    16
//   float4 global_ViewInfo;            // Offset:  208 Size:    16
//   float4 global_ScaleAndBias;        // Offset:  224 Size:    16
//
// }
//
// Resource bind info for ClusterInfoBuffer
// {
//
//   int2 $Element;                     // Offset:    0 Size:     8
//
// }
//
// Resource bind info for LightIndexListsBuffer
// {
//
//   int $Element;                      // Offset:    0 Size:     4
//
// }
//
// Resource bind info for LightDataBuffer
// {
//
//   struct PackedLight
//   {
//
//       float4 PositionRadius;         // Offset:    0
//       float4 ColorOuterAngle;        // Offset:   16
//       float4 DirectionInnerAngle;    // Offset:   32
//
//   } $Element;                        // Offset:    0 Size:    48
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// LinearSampler                     sampler      NA          NA    0        1
// Exposure                          texture  float4          2d    0        1
// GBuffer0                          texture  float4          2d    1        1
// GBuffer1                          texture  float4          2d    2        1
// GBuffer2                          texture  float4          2d    3        1
// GBuffer3                          texture  float4          2d    4        1
// GBuffer4                          texture  float4          2d    5        1
// LinearDepth                       texture  float4          2d    6        1
// IBL_Specular                      texture  float4          2d    7        1
// Base                              texture  float4          2d    8        1
// Shadow                            texture  float4          2d    9        1
// ClusterInfoBuffer                 texture  struct         r/o   17        1
// LightIndexListsBuffer             texture  struct         r/o   18        1
// LightDataBuffer                   texture  struct         r/o   19        1
// $Globals                          cbuffer      NA          NA    0        1
// PerView                           cbuffer      NA          NA   12        1
// PerFrame                          cbuffer      NA          NA   13        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float   xy
// TexCoord                 0   xy          1     NONE   float   xy
// TexCoord                 1   xyz         2     NONE   float   xyz
//
//
// 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[6], immediateIndexed
dcl_constantbuffer cb13[8], immediateIndexed
dcl_constantbuffer cb12[15], immediateIndexed
dcl_sampler s0, 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_texture2d (float,float,float,float) t7
dcl_resource_texture2d (float,float,float,float) t8
dcl_resource_texture2d (float,float,float,float) t9
dcl_resource_structured t17, 8
dcl_resource_structured t18, 4
dcl_resource_structured t19, 48
dcl_input_ps_siv linear noperspective v0.xy, position
dcl_input_ps linear v1.xy
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 22
ftoi r0.xy, v0.xyxx
mov r0.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r1.xyz, r0.xyww, t1.xyzw
ld_indexable(texture2d)(float,float,float,float) r2.xyzw, r0.xyww, t4.xyzw
ld_indexable(texture2d)(float,float,float,float) r1.w, r0.xyww, t6.yzwx
mul r2.w, r2.w, l(255.000000)
round_ne r2.w, r2.w
ftou r2.w, r2.w
and r3.x, r2.w, l(1)
ult r3.y, l(0), r3.x
ubfe r2.w, l(2), l(1), r2.w
movc r3.y, r3.y, l(0), l(1.000000)
mul r4.xyz, r1.xyzx, r3.yyyy
ne r3.z, l(0.000000, 0.000000, 0.000000, 0.000000), cb13[7].y
itof r3.x, r3.x
mul r5.xyz, r1.xyzx, r3.xxxx
movc r3.x, r3.z, l(0), l(1.000000)
mul r3.xzw, r3.xxxx, r5.xxyz
ieq r4.w, r2.w, l(1)
eq r5.x, r1.w, l(1.000000)
or r4.w, r4.w, r5.x
if_nz r4.w
  max r4.xyz, r4.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
  ld_indexable(texture2d)(float,float,float,float) r4.w, l(0, 0, 0, 0), t0.yzwx
  eq r5.x, r4.w, l(0.000000)
  movc r4.w, r5.x, l(0.010000), r4.w
  mad o0.xyz, r4.xyzx, r4.wwww, r3.xzwx
  mov o0.w, l(0)
  ret
endif
ld_indexable(texture2d)(float,float,float,float) r4.xy, r0.xyww, t2.xyzw
ld_indexable(texture2d)(float,float,float,float) r5.xyz, r0.xyww, t3.xyzw
mad r4.xy, r4.xyxx, l(3.555400, 3.555400, 0.000000, 0.000000), l(-1.777700, -1.777700, 0.000000, 0.000000)
mov r4.z, l(1.000000)
dp3 r4.z, r4.xyzx, r4.xyzx
div r4.z, l(2.000000), r4.z
mul r6.xy, r4.xyxx, r4.zzzz
add r6.z, r4.z, l(-1.000000)
max r2.x, r2.x, l(0.090000)
mul r2.y, r2.y, r2.y
mul r2.y, r2.y, l(0.160000)
dp3 r4.x, cb0[3].xyzx, r6.xyzx
dp3 r4.y, cb0[4].xyzx, r6.xyzx
dp3 r4.z, cb0[5].xyzx, r6.xyzx
mad r6.xyz, r1.wwww, v2.xyzx, cb12[12].xyzx
add r7.xyz, -r6.xyzx, cb12[12].xyzx
dp3 r4.w, r7.xyzx, r7.xyzx
rsq r4.w, r4.w
mul r8.xyz, r4.wwww, r7.xyzx
lt r9.xy, l(0.000000, 0.000000, 0.000000, 0.000000), cb0[2].xwxx
if_nz r9.x
  sample_indexable(texture2d)(float,float,float,float) r9.x, v1.xyxx, t8.xzyw, s0
  dp3 r5.w, r4.xyzx, r8.xyzx
  add r5.w, r9.x, r5.w
  mad r6.w, r2.x, l(-16.000000), l(-1.000000)
  exp r6.w, r6.w
  max r5.w, |r5.w|, l(0.000100)
  log r5.w, r5.w
  mul r5.w, r5.w, r6.w
  exp r5.w, r5.w
  add r5.w, r9.x, r5.w
  add_sat r9.z, r5.w, l(-1.000000)
else
  mov r9.xz, l(1.000000,0,1.000000,0)
endif
if_nz r9.y
  ld_indexable(texture2d)(float,float,float,float) r5.w, r0.xyww, t9.yzwx
else
  mov r5.w, l(1.000000)
endif
ld_indexable(texture2d)(float,float,float,float) r10.xyz, r0.xyww, t7.xyzw
mul r1.w, r1.w, cb12[13].x
ishr r9.yw, r0.yyyx, l(0, 7, 0, 7)
log r1.w, r1.w
mad r1.w, r1.w, cb12[14].x, cb12[14].y
max r1.w, r1.w, l(0.000000)
min r1.w, r1.w, l(31.000000)
round_z r1.w, r1.w
itof r9.yw, r9.yyyw
mad r1.w, r1.w, cb12[14].w, r9.y
mad r1.w, r1.w, cb12[14].z, r9.w
ftoi r1.w, r1.w
if_z r2.w
  dp3 r2.w, r8.xyzx, r4.xyzx
  add r6.w, r2.w, r2.w
  mad r11.xyz, r4.xyzx, -r6.wwww, r8.xyzx
  max r2.w, r2.w, l(0.000010)
  mov r12.x, cb13[0].x
  mov r12.y, cb13[1].x
  mov r12.z, cb13[2].x
  mad r13.xyz, r7.xyzx, r4.wwww, r12.xyzx
  dp3 r6.w, r13.xyzx, r13.xyzx
  rsq r6.w, r6.w
  mul r13.xyz, r6.wwww, r13.xyzx
  dp3_sat r6.w, r12.xyzx, r13.xyzx
  dp3_sat r7.w, r4.xyzx, r12.xyzx
  add r8.w, -r2.z, l(1.000000)
  mul r13.xyz, r5.xyzx, r8.wwww
  mad r9.y, r2.x, l(-0.337748349), l(1.000000)
  mul r6.w, r6.w, r6.w
  dp2 r6.w, r6.wwww, r2.xxxx
  mad r6.w, r2.x, l(0.500000), r6.w
  add r6.w, r6.w, l(-1.000000)
  add r9.w, -r7.w, l(1.000000)
  max r9.w, r9.w, l(0.000100)
  mul r10.w, r9.w, r9.w
  mul r10.w, r10.w, r10.w
  mul r9.w, r9.w, r10.w
  mad r9.w, r6.w, r9.w, l(1.000000)
  add r10.w, -r2.w, l(1.000000)
  max r10.w, |r10.w|, l(0.000100)
  mul r11.w, r10.w, r10.w
  mul r11.w, r11.w, r11.w
  mul r10.w, r10.w, r11.w
  mad r6.w, r6.w, r10.w, l(1.000000)
  mul r6.w, r6.w, r9.w
  mul r6.w, r9.y, r6.w
  mul r6.w, r6.w, l(0.318309873)
  mul r14.xyz, r6.wwww, r13.xyzx
  dp3 r6.w, r12.xyzx, r11.xyzx
  mad r15.xyz, -r6.wwww, r12.xyzx, r11.xyzx
  lt r6.w, r6.w, l(0.999989450)
  dp3 r9.w, r15.xyzx, r15.xyzx
  rsq r9.w, r9.w
  mul r15.xyz, r9.wwww, r15.xyzx
  mul r15.xyz, r15.xyzx, l(0.00459006429, 0.00459006429, 0.00459006429, 0.000000)
  mad r12.xyz, r12.xyzx, l(0.999989450, 0.999989450, 0.999989450, 0.000000), r15.xyzx
  dp3 r9.w, r12.xyzx, r12.xyzx
  rsq r9.w, r9.w
  mul r12.xyz, r9.wwww, r12.xyzx
  movc r11.xyz, r6.wwww, r12.xyzx, r11.xyzx
  mad r12.xyz, r7.xyzx, r4.wwww, r11.xyzx
  dp3 r6.w, r12.xyzx, r12.xyzx
  rsq r6.w, r6.w
  mul r12.xyz, r6.wwww, r12.xyzx
  dp3_sat r6.w, r11.xyzx, r12.xyzx
  dp3_sat r9.w, r4.xyzx, r12.xyzx
  dp3_sat r11.x, r4.xyzx, r11.xyzx
  mul r11.yzw, r2.zzzz, r5.xxyz
  mad r11.yzw, r8.wwww, r2.yyyy, r11.yyzw
  add r8.w, r2.x, l(1.000000)
  mul r8.w, r8.w, l(0.500000)
  mul r12.x, r2.x, r2.x
  add r12.yzw, -r11.yyzw, l(0.000000, 1.000000, 1.000000, 1.000000)
  add r6.w, -r6.w, l(1.000000)
  max r6.w, r6.w, l(0.000100)
  mul r13.w, r6.w, r6.w
  mul r13.w, r13.w, r13.w
  mul r6.w, r6.w, r13.w
  mad r15.xyz, r12.yzwy, r6.wwww, r11.yzwy
  mul r6.w, r8.w, r8.w
  mad r8.w, -r2.w, r6.w, r2.w
  mad r8.w, r8.w, r2.w, r6.w
  sqrt r8.w, r8.w
  mad r13.w, -r11.x, r6.w, r11.x
  mad r13.w, r13.w, r11.x, r6.w
  sqrt r13.w, r13.w
  mul r13.w, r2.w, r13.w
  mad r11.x, r11.x, r8.w, r13.w
  rcp r11.x, r11.x
  mul r11.x, r11.x, l(0.500000)
  mul r12.x, r12.x, r12.x
  mad r13.w, r9.w, r12.x, -r9.w
  mad r9.w, r13.w, r9.w, l(1.000000)
  mul r9.w, r9.w, r9.w
  mul r9.w, r9.w, l(3.14159274)
  rcp r9.w, r9.w
  mul r9.w, r9.w, r12.x
  mul r15.xyz, r11.xxxx, r15.xyzx
  mul r15.xyz, r9.wwww, r15.xyzx
  mov r16.x, cb13[0].z
  mov r16.y, cb13[1].z
  mov r16.z, cb13[2].z
  mul r14.xyz, r14.xyzx, r16.xyzx
  mul r14.xyz, r7.wwww, r14.xyzx
  mul r15.xyz, r15.xyzx, r16.xyzx
  mul r15.xyz, r7.wwww, r15.xyzx
  mul r14.xyz, r5.wwww, r14.xyzx
  mul r15.xyz, r5.wwww, r15.xyzx
  ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r16.xy, r1.w, l(0), t17.xyxx
  and r7.w, r16.y, l(0x0000ffff)
  ishr r9.w, r16.y, l(16)
  mov r16.yzw, r14.xxyz
  mov r17.xyz, r15.xyzx
  mov r11.x, r16.x
  mov r13.w, l(0)
  loop
    uge r14.w, r13.w, r7.w
    breakc_nz r14.w
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r14.w, r11.x, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r18.xyzw, r14.w, l(0), t19.xyzw
    add r18.xyz, -r6.xyzx, r18.xyzx
    dp3 r15.w, r18.xyzx, r18.xyzx
    mul r17.w, r18.w, r18.w
    rcp r18.w, r17.w
    lt r18.w, r15.w, r18.w
    if_nz r18.w
      max r18.w, r15.w, l(1.000000013E-010)
      rsq r18.w, r18.w
      mul r18.xyz, r18.wwww, r18.xyzx
      dp3_sat r18.w, r4.xyzx, r18.xyzx
      lt r19.x, l(0.000000), r18.w
      if_nz r19.x
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r19.xyz, r14.w, l(16), t19.xyzx
        mad r20.xyz, r7.xyzx, r4.wwww, r18.xyzx
        dp3 r14.w, r20.xyzx, r20.xyzx
        max r14.w, r14.w, l(1.000000013E-010)
        rsq r14.w, r14.w
        mul r20.xyz, r14.wwww, r20.xyzx
        dp3_sat r14.w, r18.xyzx, r20.xyzx
        dp3_sat r18.x, r4.xyzx, r20.xyzx
        mul r17.w, r15.w, r17.w
        mad r17.w, -r17.w, r17.w, l(1.000000)
        max r17.w, r17.w, l(0.000000)
        mul r17.w, r17.w, r17.w
        max r15.w, r15.w, l(0.000100)
        rcp r15.w, r15.w
        mul r15.w, r15.w, r17.w
        mul r15.w, r15.w, r18.w
        mul r15.w, r15.w, l(0.0795774683)
        mul r19.xyz, r15.wwww, r19.xyzx
        mul r15.w, r14.w, r14.w
        dp2 r15.w, r15.wwww, r2.xxxx
        mad r15.w, r2.x, l(0.500000), r15.w
        add r15.w, r15.w, l(-1.000000)
        add r17.w, -r18.w, l(1.000000)
        max r17.w, r17.w, l(0.000100)
        mul r18.y, r17.w, r17.w
        mul r18.y, r18.y, r18.y
        mul r17.w, r17.w, r18.y
        mad r17.w, r15.w, r17.w, l(1.000000)
        mad r15.w, r15.w, r10.w, l(1.000000)
        mul r15.w, r15.w, r17.w
        mul r15.w, r9.y, r15.w
        mul r15.w, r15.w, l(0.318309873)
        mul r20.xyz, r13.xyzx, r15.wwww
        mad r16.yzw, r19.xxyz, r20.xxyz, r16.yyzw
        add r14.w, -r14.w, l(1.000000)
        max r14.w, r14.w, l(0.000100)
        mul r15.w, r14.w, r14.w
        mul r15.w, r15.w, r15.w
        mul r14.w, r14.w, r15.w
        mad r20.xyz, r12.yzwy, r14.wwww, r11.yzwy
        mad r14.w, -r18.w, r6.w, r18.w
        mad r14.w, r14.w, r18.w, r6.w
        sqrt r14.w, r14.w
        mul r14.w, r2.w, r14.w
        mad r14.w, r18.w, r8.w, r14.w
        rcp r14.w, r14.w
        mul r14.w, r14.w, l(0.500000)
        mad r15.w, r18.x, r12.x, -r18.x
        mad r15.w, r15.w, r18.x, l(1.000000)
        mul r15.w, r15.w, r15.w
        mul r15.w, r15.w, l(3.14159274)
        rcp r15.w, r15.w
        mul r15.w, r12.x, r15.w
        mul r18.xyz, r14.wwww, r20.xyzx
        mul r18.xyz, r15.wwww, r18.xyzx
        mad r17.xyz, r19.xyzx, r18.xyzx, r17.xyzx
      endif
    endif
    iadd r11.x, r11.x, l(1)
    iadd r13.w, r13.w, l(1)
  endloop
  mov r14.xyz, r16.yzwy
  mov r15.xyz, r17.xyzx
  mov r7.w, r11.x
  mov r13.w, l(0)
  loop
    uge r14.w, r13.w, r9.w
    breakc_nz r14.w
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r14.w, r7.w, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r18.xyzw, r14.w, l(0), t19.xyzw
    add r18.xyz, -r6.xyzx, r18.xyzx
    dp3 r15.w, r18.xyzx, r18.xyzx
    mul r16.x, r18.w, r18.w
    rcp r17.w, r16.x
    lt r17.w, r15.w, r17.w
    if_nz r17.w
      max r17.w, r15.w, l(1.000000013E-010)
      rsq r17.w, r17.w
      mul r18.xyz, r17.wwww, r18.xyzx
      dp3_sat r17.w, r4.xyzx, r18.xyzx
      lt r18.w, l(0.000000), r17.w
      if_nz r18.w
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r19.xyzw, r14.w, l(16), t19.xyzw
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r14.w, l(32), t19.xyzw
        mad r21.xyz, r7.xyzx, r4.wwww, r18.xyzx
        dp3 r14.w, r21.xyzx, r21.xyzx
        max r14.w, r14.w, l(1.000000013E-010)
        rsq r14.w, r14.w
        mul r21.xyz, r14.wwww, r21.xyzx
        dp3_sat r14.w, r18.xyzx, r21.xyzx
        dp3_sat r18.w, r4.xyzx, r21.xyzx
        dp3 r21.x, r20.xyzx, r20.xyzx
        rsq r21.x, r21.x
        mul r20.xyz, r20.xyzx, r21.xxxx
        dp3 r18.x, -r18.xyzx, r20.xyzx
        lt r18.y, r19.w, r18.x
        mul r16.x, r15.w, r16.x
        mad r16.x, -r16.x, r16.x, l(1.000000)
        max r16.x, r16.x, l(0.000000)
        mul r16.x, r16.x, r16.x
        max r15.w, r15.w, l(0.000100)
        rcp r15.w, r15.w
        mul r15.w, r15.w, r16.x
        add r16.x, -r19.w, r18.x
        add r18.x, -r19.w, r20.w
        max r18.x, r18.x, l(0.000001)
        div_sat r16.x, r16.x, r18.x
        mul r16.x, r16.x, r16.x
        mul r15.w, r15.w, r16.x
        mul r15.w, r15.w, r17.w
        and r15.w, r15.w, r18.y
        mul r15.w, r15.w, l(0.318309873)
        mul r18.xyz, r15.wwww, r19.xyzx
        mul r15.w, r14.w, r14.w
        dp2 r15.w, r15.wwww, r2.xxxx
        mad r15.w, r2.x, l(0.500000), r15.w
        add r15.w, r15.w, l(-1.000000)
        add r16.x, -r17.w, l(1.000000)
        max r16.x, r16.x, l(0.000100)
        mul r19.x, r16.x, r16.x
        mul r19.x, r19.x, r19.x
        mul r16.x, r16.x, r19.x
        mad r16.x, r15.w, r16.x, l(1.000000)
        mad r15.w, r15.w, r10.w, l(1.000000)
        mul r15.w, r15.w, r16.x
        mul r15.w, r9.y, r15.w
        mul r15.w, r15.w, l(0.318309873)
        mul r19.xyz, r13.xyzx, r15.wwww
        mad r14.xyz, r18.xyzx, r19.xyzx, r14.xyzx
        add r14.w, -r14.w, l(1.000000)
        max r14.w, r14.w, l(0.000100)
        mul r15.w, r14.w, r14.w
        mul r15.w, r15.w, r15.w
        mul r14.w, r14.w, r15.w
        mad r19.xyz, r12.yzwy, r14.wwww, r11.yzwy
        mad r14.w, -r17.w, r6.w, r17.w
        mad r14.w, r14.w, r17.w, r6.w
        sqrt r14.w, r14.w
        mul r14.w, r2.w, r14.w
        mad r14.w, r17.w, r8.w, r14.w
        rcp r14.w, r14.w
        mul r14.w, r14.w, l(0.500000)
        mad r15.w, r18.w, r12.x, -r18.w
        mad r15.w, r15.w, r18.w, l(1.000000)
        mul r15.w, r15.w, r15.w
        mul r15.w, r15.w, l(3.14159274)
        rcp r15.w, r15.w
        mul r15.w, r12.x, r15.w
        mul r19.xyz, r14.wwww, r19.xyzx
        mul r19.xyz, r15.wwww, r19.xyzx
        mad r15.xyz, r18.xyzx, r19.xyzx, r15.xyzx
      endif
    endif
    iadd r7.w, r7.w, l(1)
    iadd r13.w, r13.w, l(1)
  endloop
else
  ld_indexable(texture2d)(float,float,float,float) r0.xyzw, r0.xyzw, t5.xyzw
  mul r0.yz, r0.zzyz, l(0.000000, 255.000000, 15.937500, 0.000000)
  round_ni r2.w, r0.z
  mad r11.x, r0.x, l(4080.000000), r2.w
  frc r0.x, r0.z
  mad r11.y, r0.x, l(4096.000000), r0.y
  mad r0.xy, r11.xyxx, l(0.000488519785, 0.000488519785, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000)
  max r0.xy, r0.xyxx, l(-1.000000, -1.000000, 0.000000, 0.000000)
  min r0.xy, r0.xyxx, l(1.000000, 1.000000, 0.000000, 0.000000)
  add r11.xyz, -|r0.xyxx|, l(1.000000, 1.000000, 1.000000, 0.000000)
  add r12.z, -|r0.y|, r11.x
  ge r0.z, r12.z, l(0.000000)
  ge r9.yw, r0.xxxy, l(0.000000, 0.000000, 0.000000, 0.000000)
  movc r9.yw, r9.yyyw, l(0,1.000000,0,1.000000), l(0,-1.000000,0,-1.000000)
  mul r9.yw, r9.yyyw, r11.yyyz
  movc r12.xy, r0.zzzz, r0.xyxx, r9.ywyy
  dp3 r0.x, r12.xyzx, r12.xyzx
  rsq r0.x, r0.x
  mul r0.xyz, r0.xxxx, r12.xyzx
  dp3 r11.x, cb0[3].xyzx, r0.xyzx
  dp3 r11.y, cb0[4].xyzx, r0.xyzx
  dp3 r11.z, cb0[5].xyzx, r0.xyzx
  dp3 r0.x, r8.xyzx, r4.xyzx
  add r0.y, r0.x, r0.x
  mad r8.xyz, r4.xyzx, -r0.yyyy, r8.xyzx
  max r0.x, r0.x, l(0.000010)
  mov r12.x, cb13[0].x
  mov r12.y, cb13[1].x
  mov r12.z, cb13[2].x
  mad r13.xyz, r7.xyzx, r4.wwww, r12.xyzx
  dp3 r0.y, r13.xyzx, r13.xyzx
  rsq r0.y, r0.y
  mul r13.xyz, r0.yyyy, r13.xyzx
  dp3_sat r0.y, r12.xyzx, r13.xyzx
  dp3_sat r0.z, r4.xyzx, r12.xyzx
  add r2.w, -r2.z, l(1.000000)
  mul r13.xyz, r5.xyzx, r2.wwww
  mad r6.w, r2.x, l(-0.337748349), l(1.000000)
  mul r0.y, r0.y, r0.y
  dp2 r0.y, r0.yyyy, r2.xxxx
  mad r0.y, r2.x, l(0.500000), r0.y
  add r0.y, r0.y, l(-1.000000)
  add r7.w, -r0.z, l(1.000000)
  max r7.w, r7.w, l(0.000100)
  mul r8.w, r7.w, r7.w
  mul r8.w, r8.w, r8.w
  mul r7.w, r7.w, r8.w
  mad r7.w, r0.y, r7.w, l(1.000000)
  add r8.w, -r0.x, l(1.000000)
  max r8.w, |r8.w|, l(0.000100)
  mul r9.y, r8.w, r8.w
  mul r9.y, r9.y, r9.y
  mul r8.w, r8.w, r9.y
  mad r0.y, r0.y, r8.w, l(1.000000)
  mul r0.y, r0.y, r7.w
  mul r0.y, r6.w, r0.y
  mul r0.y, r0.y, l(0.318309873)
  mul r16.xyz, r0.yyyy, r13.xyzx
  dp3 r0.y, r12.xyzx, r8.xyzx
  mad r17.xyz, -r0.yyyy, r12.xyzx, r8.xyzx
  lt r0.y, r0.y, l(0.999989450)
  dp3 r7.w, r17.xyzx, r17.xyzx
  rsq r7.w, r7.w
  mul r17.xyz, r7.wwww, r17.xyzx
  mul r17.xyz, r17.xyzx, l(0.00459006429, 0.00459006429, 0.00459006429, 0.000000)
  mad r12.xyz, r12.xyzx, l(0.999989450, 0.999989450, 0.999989450, 0.000000), r17.xyzx
  dp3 r7.w, r12.xyzx, r12.xyzx
  rsq r7.w, r7.w
  mul r12.xyz, r7.wwww, r12.xyzx
  movc r8.xyz, r0.yyyy, r12.xyzx, r8.xyzx
  mad r12.xyz, r7.xyzx, r4.wwww, r8.xyzx
  dp3 r0.y, r12.xyzx, r12.xyzx
  rsq r0.y, r0.y
  mul r12.xyz, r0.yyyy, r12.xyzx
  dp3_sat r0.y, r8.xyzx, r12.xyzx
  dp3_sat r7.w, r4.xyzx, r12.xyzx
  dp3_sat r8.x, r4.xyzx, r8.xyzx
  dp3 r8.y, r12.xyzx, r11.xyzx
  mul r5.xyz, r2.zzzz, r5.xyzx
  mad r2.yzw, r2.wwww, r2.yyyy, r5.xxyz
  add r5.x, r2.x, l(1.000000)
  mul r5.x, r5.x, l(0.500000)
  mul r5.y, r2.x, r2.x
  add r12.xyz, -r2.yzwy, l(1.000000, 1.000000, 1.000000, 0.000000)
  add r0.y, -r0.y, l(1.000000)
  max r0.y, r0.y, l(0.000100)
  mul r5.z, r0.y, r0.y
  mul r5.z, r5.z, r5.z
  mul r0.y, r0.y, r5.z
  mad r17.xyz, r12.xyzx, r0.yyyy, r2.yzwy
  mul r0.y, r5.x, r5.x
  mad r5.x, -r0.x, r0.y, r0.x
  mad r5.x, r5.x, r0.x, r0.y
  mad r5.z, -r8.x, r0.y, r8.x
  mad r5.z, r5.z, r8.x, r0.y
  sqrt r5.xz, r5.xxzx
  mul r5.z, r0.x, r5.z
  mad r5.z, r8.x, r5.x, r5.z
  rcp r5.z, r5.z
  mul r5.z, r5.z, l(0.500000)
  mad r0.w, -r0.w, l(0.900000), l(1.000000)
  sqrt r0.w, r0.w
  div r8.x, r5.y, r0.w
  min r8.x, r8.x, l(1.000000)
  max r8.x, r8.x, l(0.001000)
  mul r0.w, r0.w, r5.y
  max r0.w, r0.w, l(0.001000)
  mul r5.y, r8.y, r8.y
  mad r8.y, -r8.y, r8.y, l(1.000000)
  mad r8.y, -r7.w, r7.w, r8.y
  mul r8.z, r8.x, r8.x
  div r5.y, r5.y, r8.z
  mul r9.y, r0.w, r0.w
  div r8.y, r8.y, r9.y
  add r5.y, r5.y, r8.y
  mad r5.y, r7.w, r7.w, r5.y
  mul r0.w, r0.w, r8.x
  mul r0.w, r0.w, l(3.14159274)
  mul r5.y, r5.y, r5.y
  mul r5.y, r0.w, r5.y
  rcp r5.y, r5.y
  mul r17.xyz, r5.zzzz, r17.xyzx
  mul r17.xyz, r5.yyyy, r17.xyzx
  mov r18.x, cb13[0].z
  mov r18.y, cb13[1].z
  mov r18.z, cb13[2].z
  mul r16.xyz, r16.xyzx, r18.xyzx
  mul r16.xyz, r0.zzzz, r16.xyzx
  mul r17.xyz, r17.xyzx, r18.xyzx
  mul r17.xyz, r0.zzzz, r17.xyzx
  mul r16.xyz, r5.wwww, r16.xyzx
  mul r5.yzw, r5.wwww, r17.xxyz
  ld_structured_indexable(structured_buffer, stride=8)(mixed,mixed,mixed,mixed) r8.xy, r1.w, l(0), t17.xyxx
  and r0.z, r8.y, l(0x0000ffff)
  ishr r1.w, r8.y, l(16)
  mov r17.xyz, r16.xyzx
  mov r18.xyz, r5.yzwy
  mov r7.w, r8.x
  mov r8.y, l(0)
  loop
    uge r9.w, r8.y, r0.z
    breakc_nz r9.w
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r9.w, r7.w, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r19.xyzw, r9.w, l(0), t19.xyzw
    add r19.xyz, -r6.xyzx, r19.xyzx
    dp3 r10.w, r19.xyzx, r19.xyzx
    mul r11.w, r19.w, r19.w
    rcp r12.w, r11.w
    lt r12.w, r10.w, r12.w
    if_nz r12.w
      max r12.w, r10.w, l(1.000000013E-010)
      rsq r12.w, r12.w
      mul r19.xyz, r12.wwww, r19.xyzx
      dp3_sat r12.w, r4.xyzx, r19.xyzx
      lt r13.w, l(0.000000), r12.w
      if_nz r13.w
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyz, r9.w, l(16), t19.xyzx
        mad r21.xyz, r7.xyzx, r4.wwww, r19.xyzx
        dp3 r9.w, r21.xyzx, r21.xyzx
        max r9.w, r9.w, l(1.000000013E-010)
        rsq r9.w, r9.w
        mul r21.xyz, r9.wwww, r21.xyzx
        dp3_sat r9.w, r19.xyzx, r21.xyzx
        dp3_sat r13.w, r4.xyzx, r21.xyzx
        mul r11.w, r10.w, r11.w
        mad r11.w, -r11.w, r11.w, l(1.000000)
        max r11.w, r11.w, l(0.000000)
        mul r11.w, r11.w, r11.w
        max r10.w, r10.w, l(0.000100)
        rcp r10.w, r10.w
        mul r10.w, r10.w, r11.w
        mul r10.w, r10.w, r12.w
        mul r10.w, r10.w, l(0.0795774683)
        dp3 r11.w, r21.xyzx, r11.xyzx
        mul r19.xyz, r10.wwww, r20.xyzx
        mul r10.w, r9.w, r9.w
        dp2 r10.w, r10.wwww, r2.xxxx
        mad r10.w, r2.x, l(0.500000), r10.w
        add r10.w, r10.w, l(-1.000000)
        add r14.w, -r12.w, l(1.000000)
        max r14.w, r14.w, l(0.000100)
        mul r15.w, r14.w, r14.w
        mul r15.w, r15.w, r15.w
        mul r14.w, r14.w, r15.w
        mad r14.w, r10.w, r14.w, l(1.000000)
        mad r10.w, r10.w, r8.w, l(1.000000)
        mul r10.w, r10.w, r14.w
        mul r10.w, r6.w, r10.w
        mul r10.w, r10.w, l(0.318309873)
        mul r20.xyz, r10.wwww, r13.xyzx
        mad r17.xyz, r19.xyzx, r20.xyzx, r17.xyzx
        add r9.w, -r9.w, l(1.000000)
        max r9.w, r9.w, l(0.000100)
        mul r10.w, r9.w, r9.w
        mul r10.w, r10.w, r10.w
        mul r9.w, r9.w, r10.w
        mad r20.xyz, r12.xyzx, r9.wwww, r2.yzwy
        mad r9.w, -r12.w, r0.y, r12.w
        mad r9.w, r9.w, r12.w, r0.y
        sqrt r9.w, r9.w
        mul r9.w, r0.x, r9.w
        mad r9.w, r12.w, r5.x, r9.w
        rcp r9.w, r9.w
        mul r9.w, r9.w, l(0.500000)
        mul r10.w, r11.w, r11.w
        mad r11.w, -r11.w, r11.w, l(1.000000)
        mad r11.w, -r13.w, r13.w, r11.w
        div r10.w, r10.w, r8.z
        div r11.w, r11.w, r9.y
        add r10.w, r10.w, r11.w
        mad r10.w, r13.w, r13.w, r10.w
        mul r10.w, r10.w, r10.w
        mul r10.w, r0.w, r10.w
        rcp r10.w, r10.w
        mul r20.xyz, r9.wwww, r20.xyzx
        mul r20.xyz, r10.wwww, r20.xyzx
        mad r18.xyz, r19.xyzx, r20.xyzx, r18.xyzx
      endif
    endif
    iadd r7.w, r7.w, l(1)
    iadd r8.y, r8.y, l(1)
  endloop
  mov r14.xyz, r17.xyzx
  mov r15.xyz, r18.xyzx
  mov r0.z, r7.w
  mov r5.y, l(0)
  loop
    uge r5.z, r5.y, r1.w
    breakc_nz r5.z
    ld_structured_indexable(structured_buffer, stride=4)(mixed,mixed,mixed,mixed) r5.z, r0.z, l(0), t18.xxxx
    ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r16.xyzw, r5.z, l(0), t19.xyzw
    add r16.xyz, -r6.xyzx, r16.xyzx
    dp3 r5.w, r16.xyzx, r16.xyzx
    mul r8.x, r16.w, r16.w
    rcp r8.y, r8.x
    lt r8.y, r5.w, r8.y
    if_nz r8.y
      max r8.y, r5.w, l(1.000000013E-010)
      rsq r8.y, r8.y
      mul r16.xyz, r8.yyyy, r16.xyzx
      dp3_sat r8.y, r4.xyzx, r16.xyzx
      lt r9.w, l(0.000000), r8.y
      if_nz r9.w
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r19.xyzw, r5.z, l(16), t19.xyzw
        ld_structured_indexable(structured_buffer, stride=48)(mixed,mixed,mixed,mixed) r20.xyzw, r5.z, l(32), t19.xyzw
        mad r21.xyz, r7.xyzx, r4.wwww, r16.xyzx
        dp3 r5.z, r21.xyzx, r21.xyzx
        max r5.z, r5.z, l(1.000000013E-010)
        rsq r5.z, r5.z
        mul r21.xyz, r5.zzzz, r21.xyzx
        dp3_sat r5.z, r16.xyzx, r21.xyzx
        dp3_sat r9.w, r4.xyzx, r21.xyzx
        dp3 r10.w, r20.xyzx, r20.xyzx
        rsq r10.w, r10.w
        mul r20.xyz, r10.wwww, r20.xyzx
        dp3 r10.w, -r16.xyzx, r20.xyzx
        lt r11.w, r19.w, r10.w
        mul r8.x, r5.w, r8.x
        mad r8.x, -r8.x, r8.x, l(1.000000)
        max r8.x, r8.x, l(0.000000)
        mul r8.x, r8.x, r8.x
        max r5.w, r5.w, l(0.000100)
        rcp r5.w, r5.w
        mul r5.w, r5.w, r8.x
        add r8.x, -r19.w, r10.w
        add r10.w, -r19.w, r20.w
        max r10.w, r10.w, l(0.000001)
        div_sat r8.x, r8.x, r10.w
        mul r8.x, r8.x, r8.x
        mul r5.w, r5.w, r8.x
        mul r5.w, r5.w, r8.y
        and r5.w, r5.w, r11.w
        mul r5.w, r5.w, l(0.318309873)
        dp3 r8.x, r21.xyzx, r11.xyzx
        mul r16.xyz, r5.wwww, r19.xyzx
        mul r5.w, r5.z, r5.z
        dp2 r5.w, r5.wwww, r2.xxxx
        mad r5.w, r2.x, l(0.500000), r5.w
        add r5.w, r5.w, l(-1.000000)
        add r10.w, -r8.y, l(1.000000)
        max r10.w, r10.w, l(0.000100)
        mul r11.w, r10.w, r10.w
        mul r11.w, r11.w, r11.w
        mul r10.w, r10.w, r11.w
        mad r10.w, r5.w, r10.w, l(1.000000)
        mad r5.w, r5.w, r8.w, l(1.000000)
        mul r5.w, r5.w, r10.w
        mul r5.w, r6.w, r5.w
        mul r5.w, r5.w, l(0.318309873)
        mul r19.xyz, r5.wwww, r13.xyzx
        mad r14.xyz, r16.xyzx, r19.xyzx, r14.xyzx
        add r5.z, -r5.z, l(1.000000)
        max r5.z, r5.z, l(0.000100)
        mul r5.w, r5.z, r5.z
        mul r5.w, r5.w, r5.w
        mul r5.z, r5.w, r5.z
        mad r19.xyz, r12.xyzx, r5.zzzz, r2.yzwy
        mad r5.z, -r8.y, r0.y, r8.y
        mad r5.z, r5.z, r8.y, r0.y
        sqrt r5.z, r5.z
        mul r5.z, r0.x, r5.z
        mad r5.z, r8.y, r5.x, r5.z
        rcp r5.z, r5.z
        mul r5.z, r5.z, l(0.500000)
        mul r5.w, r8.x, r8.x
        mad r8.x, -r8.x, r8.x, l(1.000000)
        mad r8.x, -r9.w, r9.w, r8.x
        div r5.w, r5.w, r8.z
        div r8.x, r8.x, r9.y
        add r5.w, r5.w, r8.x
        mad r5.w, r9.w, r9.w, r5.w
        mul r5.w, r5.w, r5.w
        mul r5.w, r0.w, r5.w
        rcp r5.w, r5.w
        mul r19.xyz, r5.zzzz, r19.xyzx
        mul r19.xyz, r5.wwww, r19.xyzx
        mad r15.xyz, r16.xyzx, r19.xyzx, r15.xyzx
      endif
    endif
    iadd r0.z, r0.z, l(1)
    iadd r5.y, r5.y, l(1)
  endloop
endif
add r0.xy, r9.xzxx, l(-1.000000, -1.000000, 0.000000, 0.000000)
mad r0.xy, cb0[2].yyyy, r0.xyxx, l(1.000000, 1.000000, 0.000000, 0.000000)
mul r0.yzw, r0.yyyy, r15.xxyz
mad r0.xyz, r14.xyzx, r0.xxxx, r0.yzwy
mad r0.xyz, r3.yyyy, r1.xyzx, r0.xyzx
max r0.xyz, r0.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
ld_indexable(texture2d)(float,float,float,float) r0.w, l(0, 0, 0, 0), t0.yzwx
eq r1.x, r0.w, l(0.000000)
movc r0.w, r1.x, l(0.010000), r0.w
mad r0.xyz, r0.xyzx, r0.wwww, r3.xzwx
mad o0.xyz, r10.xyzx, r9.zzzz, r0.xyzx
mov o0.w, l(1.000000)
ret
// Approximately 696 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 