//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
//   using 3Dmigoto v1.2.67 on Mon Jan 01 13:12:21 2018
//
//
// Buffer Definitions: 
//
// cbuffer $Globals
// {
//
//   float4 specColor;                  // Offset:    0 Size:    16 [unused]
//   float4 ControlData;                // Offset:   16 Size:    16 [unused]
//   float4 difColor;                   // Offset:   32 Size:    16 [unused]
//   float4 ambient;                    // Offset:   48 Size:    16
//   float4 g_vDefLightDir;             // Offset:   64 Size:    16
//   float4 g_vDefLightColor;           // Offset:   80 Size:    16
//   float4 g_vDefSpecColor;            // Offset:   96 Size:    16 [unused]
//   uint CS_FRONT;                     // Offset:  112 Size:     4
//      = 0x00000000 
//   uint CS_RIGHT;                     // Offset:  116 Size:     4
//      = 0x00000001 
//   uint CS_BACK;                      // Offset:  120 Size:     4
//      = 0x00000002 
//   uint CS_LEFT;                      // Offset:  124 Size:     4
//      = 0x00000003 
//   uint CS_TOP;                       // Offset:  128 Size:     4
//      = 0x00000004 
//   uint CS_BOTTOM;                    // Offset:  132 Size:     4
//      = 0x00000005 
//   float4 g_vAmbientSettings;         // Offset:  144 Size:    16 [unused]
//   
//   struct
//   {
//       
//       float4 vDesc;                  // Offset:  160
//       float4 vFogLayerPlane;         // Offset:  176
//       float4 vFogLayerColor;         // Offset:  192
//       float4 vFogLayerSettings;      // Offset:  208
//       float4 vFogColor;              // Offset:  224
//       float4 vFogDistance;           // Offset:  240
//
//   } g_FogDesc;                       // Offset:  160 Size:    96
//   
//   struct
//   {
//       
//       float4x4 mLightSpaceInverse;   // Offset:  256
//       float4x4 mLightSpace;          // Offset:  320
//       float4 vShadowBias;            // Offset:  384
//       float4 vBiasDir;               // Offset:  400
//       float4 vSmoothOffs;            // Offset:  416
//       float4 vShadowsDesc;           // Offset:  432
//       float4 avCPlane[8];            // Offset:  448
//       float4 avCascadeZ[2];          // Offset:  576
//       float4 avUVTransform[8];       // Offset:  608
//       float4 avZTransformZF[8];      // Offset:  736
//
//   } g_ShadSettings;                  // Offset:  256 Size:   608 [unused]
//   float4x4 g_mCloudsShadowsSpace;    // Offset:  864 Size:    64 [unused]
//   float4 g_vCloudsShadowDesc;        // Offset:  928 Size:    16
//   float4x4 g_mWorldViewProjection;   // Offset:  944 Size:    64 [unused]
//   float3 g_deltaCam;                 // Offset: 1008 Size:    12 [unused]
//   float3 g_sunVector;                // Offset: 1024 Size:    12
//   float3 g_camPos;                   // Offset: 1040 Size:    12 [unused]
//   float3 g_worldPos;                 // Offset: 1056 Size:    12 [unused]
//   float3 g_color_Diffuse;            // Offset: 1072 Size:    12 [unused]
//   float4 g_color_Empty;              // Offset: 1088 Size:    16
//   float3 g_simpleData;               // Offset: 1104 Size:    12 [unused]
//   float cEPS;                        // Offset: 1116 Size:     4
//      = 0x38d1b717 
//   float c0;                          // Offset: 1120 Size:     4 [unused]
//      = 0x00000000 
//   float c0_5;                        // Offset: 1124 Size:     4
//      = 0x3f000000 
//   float c1_0;                        // Offset: 1128 Size:     4
//      = 0x3f800000 
//   float c2_0;                        // Offset: 1132 Size:     4
//      = 0x40000000 
//   float c3_0;                        // Offset: 1136 Size:     4
//      = 0x40400000 
//   float c4_0;                        // Offset: 1140 Size:     4
//      = 0x40800000 
//   float c140_0;                      // Offset: 1144 Size:     4 [unused]
//      = 0x430c0000 
//
// }
//
// cbuffer CBLightSettings
// {
//
//   struct
//   {
//       
//       float4 vLightsListSettings2;   // Offset:    0
//       float4 vShadowLODYPos;         // Offset:   16
//       float4 vShadowLODXSZ;          // Offset:   32
//       float4 vShadowLODYSZ;          // Offset:   48
//       float4 vShadowTexRes;          // Offset:   64
//
//   } g_LightListSettings;             // Offset:    0 Size:    80
//   float4 g_avLODMask[4];             // Offset:   80 Size:    64
//   float4 g_avRot[6];                 // Offset:  144 Size:    96
//   float4 g_avLightsInfo[2048];       // Offset:  240 Size: 32768
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// LightsShadowsSampler            sampler_c      NA          NA    0        1
// CloudsShadowsSampler              sampler      NA          NA    1        1
// RoadAlphaTextureSampler           sampler      NA          NA    2        1
// RoadTextureSampler                sampler      NA          NA    3        1
// RoadSpecularTextureSampler        sampler      NA          NA    4        1
// NormalTextureSampler              sampler      NA          NA    5        1
// SkyTextureSampler                 sampler      NA          NA    6        1
// NormalTextureSampler              texture  float4          2d    0        1
// CloudsShadowsSampler              texture  float4          2d    1        1
// RoadAlphaTextureSampler           texture  float4          2d    2        1
// RoadTextureSampler                texture  float4          2d    3        1
// RoadSpecularTextureSampler        texture  float4          2d    4        1
// SkyTextureSampler                 texture  float4          2d    5        1
// g_tLightsShadows                  texture  float4          2d    6        1
// g_tLightsList                     texture   uint2          3d    7        1
// $Globals                          cbuffer      NA          NA    0        1
// CBLightSettings                   cbuffer      NA          NA    1        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float       
// TEXCOORD                 0   xyzw        1     NONE   float   xyzw
// TEXCOORD                 1   xyzw        2     NONE   float   xyzw
// TEXCOORD                 2   xyzw        3     NONE   float   xyz 
// TEXCOORD                 3   xyzw        4     NONE   float       
// TEXCOORD                 4   xyzw        5     NONE   float   xy w
// TEXCOORD                 5   xy          6     NONE   float   xy  
// TEXCOORD                 6   xyz         7     NONE   float   xyz 
// TEXCOORD                 7   xyzw        8     NONE   float   xyzw
// COLOR                    0   xyzw        9     NONE   float       
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
//
ps_4_1
dcl_globalFlags refactoringAllowed
dcl_constantbuffer cb0[72], immediateIndexed
dcl_constantbuffer cb1[2063], dynamicIndexed
dcl_sampler s0, mode_comparison
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_sampler s3, mode_default
dcl_sampler s4, mode_default
dcl_sampler s5, mode_default
dcl_sampler s6, 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_texture3d (uint,uint,uint,uint) t7
dcl_input_ps linear v1.xyzw
dcl_input_ps linear v2.xyzw
dcl_input_ps linear v3.xyz
dcl_input_ps linear v5.xyw
dcl_input_ps linear v6.xy
dcl_input_ps linear v7.xyz
dcl_input_ps linear v8.xyzw
dcl_output o0.xyzw
dcl_temps 12
mul r0.x, v3.x, cb0[71].y
mul r0.x, r0.x, v3.z
mad r0.x, v3.y, v3.y, -r0.x
lt r0.y, l(0.000000), r0.x
if_nz r0.y
  sqrt r0.x, r0.x
  add r0.x, r0.x, -v3.y
  lt r0.y, cb0[69].w, |r0.x|
  if_nz r0.y
    mul r0.y, v3.z, cb0[70].w
    div r0.x, r0.y, r0.x
  else 
    mov r0.x, v1.x
  endif 
else 
  mov r0.x, v1.x
endif 
add r0.z, -r0.x, cb0[70].z
mul r0.yw, r0.xxxz, r0.xxxz
mul r0.zw, r0.zzzx, r0.yyyw
mul r0.z, r0.z, v2.y
mad r0.z, r0.w, v2.x, -r0.z
mul r0.y, r0.y, cb0[71].x
mad r0.w, -cb0[71].y, r0.x, r0.y
add r0.w, r0.w, cb0[70].z
mad r0.y, -cb0[70].w, r0.x, r0.y
mul r0.y, r0.y, v2.y
mad r0.y, r0.w, v2.x, r0.y
add r0.zw, -r0.zzzx, v1.yyyx
mad r0.z, -r0.y, r0.w, r0.z
mad r0.y, r0.y, r0.y, cb0[70].z
rsq r0.y, r0.y
mul r0.y, r0.y, r0.z
div r0.z, cb0[70].z, v2.z
lt r0.w, r0.x, l(0.000000)
lt r1.x, cb0[70].z, r0.x
or r0.w, r0.w, r1.x
not r0.w, r0.w
lt r0.z, |r0.y|, r0.z
and r0.z, r0.z, r0.w
mul r0.w, v2.z, cb0[70].y
mad r1.z, r0.y, r0.w, cb0[70].y
mad r1.x, r0.x, r0.w, v2.w
div r0.xy, v5.xyxx, v5.wwww
mul r1.y, r1.x, l(0.250000)
sample r2.xyzw, r1.yzyy, t2.xyzw, s2
sample r3.xyzw, r1.xzxx, t3.xyzw, s3
sample r0.w, r1.xzxx, t4.xzwy, s4
sample r1.xyzw, r0.xyxx, t5.xyzw, s6
if_nz r0.z
  sample r4.xyz, v6.xyxx, t0.xyzw, s5
  mad r4.xyz, r4.xyzx, cb0[70].wwww, -cb0[70].zzzz
  dp3 r0.z, r4.xyzx, r4.xyzx
  rsq r0.z, r0.z
  mul r4.xyz, r0.zzzz, r4.xyzx
  sample r0.z, v1.zwzz, t1.xzyw, s1
  add r0.z, r0.z, l(-1.000000)
  mad r0.z, cb0[58].z, r0.z, l(1.000000)
  dp3 r4.w, r4.xyzx, -cb0[4].xyzx
  max r4.w, r4.w, l(0.000000)
  mul r5.xyz, r4.wwww, cb0[5].xyzx
  mad r5.xyz, r5.xyzx, r0.zzzz, cb0[3].xyzx
  lt r4.w, cb0[4].w, l(1.500000)
  if_nz r4.w
    mov r6.xyz, r5.xyzx
  endif 
  if_z r4.w
    mul r0.xy, r0.xyxx, cb1[0].xyxx
    ftoi r7.xy, r0.xyxx
    mov r7.w, l(0)
    ld r0.x, r7.xyww, t7.yxzw
    umin r0.x, r0.x, l(17)
    ige r0.y, l(1), r0.x
    if_nz r0.y
      mov r6.xyz, r5.xyzx
    endif 
    if_z r0.y
      mov r6.x, l(1)
      mov r6.yzw, r5.xxzy
      loop 
        ige r0.y, r6.x, r0.x
        breakc_nz r0.y
        mov r7.z, r6.x
        ld r0.y, r7.xyzw, t7.yxzw
        ishl r0.y, r0.y, l(3)
        iadd r4.w, r0.y, l(1)
        ge r8.xy, cb1[r4.w + 15].xyxx, l(100.000000, 100.000000, 0.000000, 0.000000)
        if_nz r8.x
          add r5.w, l(-100.000000), cb1[r4.w + 15].x
        else 
          mov r5.w, cb1[r4.w + 15].x
        endif 
        if_nz r8.y
          add r7.z, l(-100.000000), cb1[r4.w + 15].y
        else 
          mov r7.z, cb1[r4.w + 15].y
        endif 
        add r8.xzw, -v7.xxyz, cb1[r0.y + 15].xxyz
        dp3 r9.x, r8.xzwx, r8.xzwx
        mad r9.y, r9.x, cb1[r4.w + 15].w, l(1.000000)
        div r9.y, l(1.000000, 1.000000, 1.000000, 1.000000), r9.y
        add r9.y, r9.y, l(-0.100000)
        mul_sat r9.y, r9.y, l(1.11111116)
        lt r9.z, l(0.001000), r9.y
        if_nz r9.z
          sqrt r9.x, r9.x
          div r9.x, l(1.000000, 1.000000, 1.000000, 1.000000), r9.x
          mul r8.xzw, r8.xxzw, r9.xxxx
          max r9.x, r8.z, l(0.000000)
          mul r9.x, r9.x, r9.y
          iadd r9.y, r4.w, l(1)
          lt r9.z, l(2.000000), cb1[r0.y + 15].w
          if_nz r9.z
            add r9.z, l(-3.000000), cb1[r0.y + 15].w
            dp3 r8.x, r8.xzwx, cb1[r9.y + 15].xyzx
            add r8.z, -|r8.x|, l(1.000000)
            sqrt r8.z, r8.z
            mad r8.w, |r8.x|, l(-0.0187292993), l(0.074261)
            mad r8.w, r8.w, |r8.x|, l(-0.212114394)
            mad r8.w, r8.w, |r8.x|, l(1.57072878)
            mul r9.w, r8.z, r8.w
            mad r9.w, r9.w, l(-2.000000), l(3.14159274)
            lt r8.x, r8.x, -r8.x
            and r8.x, r8.x, r9.w
            mad r8.x, r8.w, r8.z, r8.x
            lt r8.z, r8.x, r9.z
            if_nz r8.z
              frc r8.z, cb1[r9.y + 15].w
              div r8.x, r8.x, r9.z
              add r8.x, -r8.z, r8.x
              add r8.z, -r8.z, l(1.000000)
              div_sat r8.x, r8.x, r8.z
              add r8.x, -r8.x, l(1.000000)
            else 
              mov r8.x, l(0)
            endif 
            mul r9.x, r8.x, r9.x
            lt r8.x, l(0.000000), r9.x
            ge r8.z, cb1[r9.y + 15].w, l(1.000000)
            and r8.x, r8.z, r8.x
            if_nz r8.x
              ftoi r8.x, cb1[r9.y + 15].w
              iadd r8.x, r8.x, l(-1)
            else 
              mov r8.x, l(-1)
            endif 
            mov r10.xyz, v7.xyzx
          else 
            lt r8.z, l(0.000000), r9.x
            and r8.y, r8.z, r8.y
            if_nz r8.y
              ge r8.y, cb1[r9.y + 15].w, l(1.000000)
              if_nz r8.y
                ftoi r8.y, cb1[r9.y + 15].w
                iadd r8.y, r8.y, l(-1)
                add r9.yzw, v7.xxyz, -cb1[r0.y + 15].xxyz
                lt r8.zw, |r9.yyyw|, r9.zzzz
                and r8.z, r8.w, r8.z
                if_nz r8.z
                  mov r8.z, cb0[8].x
                else 
                  lt r11.xy, r9.zzzz, -|r9.ywyy|
                  and r8.w, r11.y, r11.x
                  if_nz r8.w
                    mov r8.z, cb0[8].y
                  else 
                    lt r8.w, |r9.y|, r9.w
                    if_nz r8.w
                      mov r8.z, cb0[7].x
                    else 
                      lt r8.w, r9.w, -|r9.y|
                      if_nz r8.w
                        mov r8.z, cb0[7].z
                      else 
                        ge r8.w, r9.y, l(0.000000)
                        if_nz r8.w
                          mov r8.z, cb0[7].y
                        else 
                          mov r8.z, cb0[7].w
                        endif 
                      endif 
                    endif 
                  endif 
                endif 
                ult r8.w, r8.z, cb0[8].x
                if_nz r8.w
                  dp2 r11.x, r9.ywyy, cb1[r8.z + 9].xyxx
                  dp2 r11.z, r9.ywyy, cb1[r8.z + 9].zwzz
                  mov r11.y, r9.z
                else 
                  dp2 r11.y, r9.zwzz, cb1[r8.z + 9].xyxx
                  dp2 r11.z, r9.zwzz, cb1[r8.z + 9].zwzz
                  mov r11.x, r9.y
                endif 
                add r10.xyz, r11.xyzx, cb1[r0.y + 15].xyzx
                iadd r8.x, r8.y, r8.z
              else 
                mov r8.x, l(-1)
                mov r10.xyz, v7.xyzx
              endif 
            else 
              mov r8.x, l(-1)
              mov r10.xyz, v7.xyzx
            endif 
          endif 
          ige r0.y, r8.x, l(0)
          if_nz r0.y
            iadd r0.y, r4.w, l(3)
            or r8.y, r0.y, l(5)
            iadd r8.z, r8.y, l(1)
            or r8.w, r8.z, l(7)
            mul r11.xyzw, r10.yyyy, cb1[r8.y + 15].xyzw
            mad r11.xyzw, r10.xxxx, cb1[r0.y + 15].xyzw, r11.xyzw
            mad r10.xyzw, r10.zzzz, cb1[r8.z + 15].xyzw, r11.xyzw
            add r10.xyzw, r10.xyzw, cb1[r8.w + 15].xyzw
            div r8.yzw, r10.xxyz, r10.wwww
            lt r9.yz, l(0.000000, 1.000000, 1.000000, 0.000000), |r8.yyzy|
            or r0.y, r9.z, r9.y
            if_nz r0.y
              mov r9.y, l(0)
            endif 
            if_z r0.y
              mad r0.y, r8.y, l(0.500000), l(0.500000)
              mad r8.y, -r8.z, l(0.500000), l(0.500000)
              ushr r8.z, r8.x, l(5)
              and r8.x, r8.x, l(31)
              dp4 r9.z, cb1[2].xyzw, cb1[r8.z + 5].xyzw
              mul r9.w, r9.z, cb1[4].x
              div r9.w, l(0.500000), r9.w
              add r10.x, -r9.w, l(1.000000)
              max r0.y, r0.y, r9.w
              min r0.y, r10.x, r0.y
              max r8.y, r8.y, r9.w
              min r8.y, r10.x, r8.y
              utof r8.x, r8.x
              add r0.y, r0.y, r8.x
              mul r10.x, r9.z, r0.y
              dp4 r0.y, cb1[1].xyzw, cb1[r8.z + 5].xyzw
              dp2 r8.x, r8.yyyy, r9.zzzz
              add r10.y, r0.y, r8.x
              sample_c_lz r9.y, r10.xyxx, t6.xxxx, s0, r8.w
            endif 
            mul r9.x, r9.y, r9.x
          endif 
          mul r8.x, r5.w, r9.x
          mul r8.y, r7.z, r9.x
          mul r8.z, r9.x, cb1[r4.w + 15].z
          add r6.yzw, r6.yyzw, r8.xxzy
        endif 
        iadd r6.x, r6.x, l(1)
      endloop 
      mov r6.x, r6.y
      mov r6.yz, r6.wwzw
    endif 
  endif 
  mul r2.xyzw, r2.xyzw, r3.xyzw
  mov r6.w, cb0[70].z
  mul r2.xyzw, r2.xyzw, r6.xyzw
  mul r0.xyw, r0.wwww, cb0[5].xyxz
  mul r0.xyw, r0.xyxw, l(1.500000, 1.500000, 0.000000, 1.500000)
  dp3 r3.x, -v7.xyzx, -v7.xyzx
  rsq r3.x, r3.x
  mad r3.xyz, -v7.xyzx, r3.xxxx, cb0[64].xyzx
  mul r3.xyz, r3.xyzx, l(0.500000, 0.500000, 0.500000, 0.000000)
  dp3 r3.w, r3.xyzx, r3.xyzx
  rsq r3.w, r3.w
  mul r3.xyz, r3.wwww, r3.xyzx
  dp3 r3.x, r3.xyzx, r4.xyzx
  max r3.x, r3.x, l(0.000000)
  mul r3.x, r3.x, r3.x
  mul r3.x, r3.x, r3.x
  mul r3.x, r3.x, r3.x
  mul r0.xyw, r0.xyxw, r3.xxxx
  mad r0.xyz, r0.xywx, r0.zzzz, r2.xyzx
  mov_sat r3.xyz, v8.xyzx
  lt r0.w, cb0[13].w, l(0.500000)
  if_nz r0.w
    add r4.xyz, -r0.xyzx, r1.xyzx
    mad r2.xyz, r3.xyzx, r4.xyzx, r0.xyzx
  endif 
  if_z r0.w
    mov_sat r0.w, v8.w
    mul r1.w, r1.w, r1.w
    mad r4.xyz, cb0[5].xyzx, r1.wwww, cb0[3].xyzx
    ge r1.w, cb0[10].z, l(0.000000)
    if_nz r1.w
      mad r5.xyz, cb0[12].xyzx, r4.xyzx, -r0.xyzx
      mad r5.xyz, r0.wwww, r5.xyzx, r0.xyzx
      add r6.xyz, r1.xyzx, -r5.xyzx
      mad r2.xyz, r3.xyzx, r6.xyzx, r5.xyzx
    else 
      mul r1.w, -cb0[11].w, cb0[13].z
      min r1.w, r1.w, l(1.000000)
      lt r3.w, r1.w, l(0.999900)
      if_nz r3.w
        mul r1.w, r1.w, r1.w
        mad r5.xyz, cb0[12].xyzx, r4.xyzx, -r0.xyzx
        mad r5.xyz, r0.wwww, r5.xyzx, r0.xyzx
        add r6.xyz, r1.xyzx, -r5.xyzx
        mad r5.xyz, r3.xyzx, r6.xyzx, r5.xyzx
        add r6.xyz, -r0.xyzx, r1.xyzx
        mad r6.xyz, r3.xyzx, r6.xyzx, r0.xyzx
        mad r7.xyz, cb0[12].xyzx, r4.xyzx, -r6.xyzx
        mad r6.xyz, r0.wwww, r7.xyzx, r6.xyzx
        add r6.xyz, -r5.xyzx, r6.xyzx
        mad r2.xyz, r1.wwww, r6.xyzx, r5.xyzx
      else 
        add r1.xyz, -r0.xyzx, r1.xyzx
        mad r0.xyz, r3.xyzx, r1.xyzx, r0.xyzx
        mad r1.xyz, cb0[12].xyzx, r4.xyzx, -r0.xyzx
        mad r2.xyz, r0.wwww, r1.xyzx, r0.xyzx
      endif 
    endif 
  endif 
  mov o0.xyzw, r2.xyzw
else 
  mov o0.xyzw, cb0[68].xyzw
endif 
ret 
// Approximately 319 instruction slots used
