//
// 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 [unused]
//   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
// NormalTextureSampler              sampler      NA          NA    4        1
// SkyTextureSampler                 sampler      NA          NA    5        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
// SkyTextureSampler                 texture  float4          2d    4        1
// g_tLightsShadows                  texture  float4          2d    5        1
// g_tLightsList                     texture   uint2          3d    6        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_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_texture3d (uint,uint,uint,uint) t6
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 11
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 r1.xyzw, r1.xzxx, t3.xyzw, s3
sample r3.xyzw, r0.xyxx, t4.xyzw, s5
if_nz r0.z
  sample r4.xyz, v6.xyxx, t0.xyzw, s4
  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 r0.w, r4.xyzx, -cb0[4].xyzx
  max r0.w, r0.w, l(0.000000)
  mul r4.xyz, r0.wwww, cb0[5].xyzx
  mad r4.xyz, r4.xyzx, r0.zzzz, cb0[3].xyzx
  lt r0.z, cb0[4].w, l(1.500000)
  if_nz r0.z
    mov r5.xyz, r4.xyzx
  endif 
  if_z r0.z
    mul r0.xy, r0.xyxx, cb1[0].xyxx
    ftoi r0.xy, r0.xyxx
    mov r0.w, l(0)
    ld r4.w, r0.xyww, t6.xzwy
    umin r4.w, r4.w, l(17)
    ige r6.x, l(1), r4.w
    if_nz r6.x
      mov r5.xyz, r4.xyzx
    endif 
    if_z r6.x
      mov r5.x, l(1)
      mov r5.yzw, r4.xxzy
      loop 
        ige r6.x, r5.x, r4.w
        breakc_nz r6.x
        mov r0.z, r5.x
        ld r0.z, r0.xyzw, t6.yzxw
        ishl r0.z, r0.z, l(3)
        iadd r6.x, r0.z, l(1)
        ge r6.yz, cb1[r6.x + 15].xxyx, l(0.000000, 100.000000, 100.000000, 0.000000)
        if_nz r6.y
          add r6.y, l(-100.000000), cb1[r6.x + 15].x
        else 
          mov r6.y, cb1[r6.x + 15].x
        endif 
        if_nz r6.z
          add r6.w, l(-100.000000), cb1[r6.x + 15].y
        else 
          mov r6.w, cb1[r6.x + 15].y
        endif 
        add r7.xyz, -v7.xyzx, cb1[r0.z + 15].xyzx
        dp3 r7.w, r7.xyzx, r7.xyzx
        mad r8.x, r7.w, cb1[r6.x + 15].w, l(1.000000)
        div r8.x, l(1.000000, 1.000000, 1.000000, 1.000000), r8.x
        add r8.x, r8.x, l(-0.100000)
        mul_sat r8.x, r8.x, l(1.11111116)
        lt r8.y, l(0.001000), r8.x
        if_nz r8.y
          sqrt r7.w, r7.w
          div r7.w, l(1.000000, 1.000000, 1.000000, 1.000000), r7.w
          mul r7.xyz, r7.wwww, r7.xyzx
          max r7.w, r7.y, l(0.000000)
          mul r7.w, r7.w, r8.x
          iadd r8.x, r6.x, l(1)
          lt r8.y, l(2.000000), cb1[r0.z + 15].w
          if_nz r8.y
            add r8.y, l(-3.000000), cb1[r0.z + 15].w
            dp3 r7.x, r7.xyzx, cb1[r8.x + 15].xyzx
            add r7.y, -|r7.x|, l(1.000000)
            sqrt r7.y, r7.y
            mad r7.z, |r7.x|, l(-0.0187292993), l(0.074261)
            mad r7.z, r7.z, |r7.x|, l(-0.212114394)
            mad r7.z, r7.z, |r7.x|, l(1.57072878)
            mul r8.z, r7.y, r7.z
            mad r8.z, r8.z, l(-2.000000), l(3.14159274)
            lt r7.x, r7.x, -r7.x
            and r7.x, r7.x, r8.z
            mad r7.x, r7.z, r7.y, r7.x
            lt r7.y, r7.x, r8.y
            if_nz r7.y
              frc r7.y, cb1[r8.x + 15].w
              div r7.x, r7.x, r8.y
              add r7.x, -r7.y, r7.x
              add r7.y, -r7.y, l(1.000000)
              div_sat r7.x, r7.x, r7.y
              add r7.x, -r7.x, l(1.000000)
            else 
              mov r7.x, l(0)
            endif 
            mul r7.w, r7.x, r7.w
            lt r7.x, l(0.000000), r7.w
            ge r7.y, cb1[r8.x + 15].w, l(1.000000)
            and r7.x, r7.y, r7.x
            if_nz r7.x
              ftoi r7.x, cb1[r8.x + 15].w
              iadd r7.x, r7.x, l(-1)
            else 
              mov r7.x, l(-1)
            endif 
            mov r8.yzw, v7.xxyz
          else 
            lt r7.y, l(0.000000), r7.w
            and r6.z, r6.z, r7.y
            if_nz r6.z
              ge r6.z, cb1[r8.x + 15].w, l(1.000000)
              if_nz r6.z
                ftoi r6.z, cb1[r8.x + 15].w
                iadd r6.z, r6.z, l(-1)
                add r9.xyz, v7.xyzx, -cb1[r0.z + 15].xyzx
                lt r7.yz, |r9.xxzx|, r9.yyyy
                and r7.y, r7.z, r7.y
                if_nz r7.y
                  mov r7.y, cb0[8].x
                else 
                  lt r10.xy, r9.yyyy, -|r9.xzxx|
                  and r7.z, r10.y, r10.x
                  if_nz r7.z
                    mov r7.y, cb0[8].y
                  else 
                    lt r7.z, |r9.x|, r9.z
                    if_nz r7.z
                      mov r7.y, cb0[7].x
                    else 
                      lt r7.z, r9.z, -|r9.x|
                      if_nz r7.z
                        mov r7.y, cb0[7].z
                      else 
                        ge r7.z, r9.x, l(0.000000)
                        if_nz r7.z
                          mov r7.y, cb0[7].y
                        else 
                          mov r7.y, cb0[7].w
                        endif 
                      endif 
                    endif 
                  endif 
                endif 
                ult r7.z, r7.y, cb0[8].x
                if_nz r7.z
                  dp2 r10.x, r9.xzxx, cb1[r7.y + 9].xyxx
                  dp2 r10.z, r9.xzxx, cb1[r7.y + 9].zwzz
                  mov r10.y, r9.y
                else 
                  dp2 r10.y, r9.yzyy, cb1[r7.y + 9].xyxx
                  dp2 r10.z, r9.yzyy, cb1[r7.y + 9].zwzz
                  mov r10.x, r9.x
                endif 
                add r8.yzw, r10.xxyz, cb1[r0.z + 15].xxyz
                iadd r7.x, r6.z, r7.y
              else 
                mov r7.x, l(-1)
                mov r8.yzw, v7.xxyz
              endif 
            else 
              mov r7.x, l(-1)
              mov r8.yzw, v7.xxyz
            endif 
          endif 
          ige r0.z, r7.x, l(0)
          if_nz r0.z
            iadd r0.z, r6.x, l(3)
            or r6.z, r0.z, l(5)
            iadd r7.y, r6.z, l(1)
            or r7.z, r7.y, l(7)
            mul r9.xyzw, r8.zzzz, cb1[r6.z + 15].xyzw
            mad r9.xyzw, r8.yyyy, cb1[r0.z + 15].xyzw, r9.xyzw
            mad r8.xyzw, r8.wwww, cb1[r7.y + 15].xyzw, r9.xyzw
            add r8.xyzw, r8.xyzw, cb1[r7.z + 15].xyzw
            div r8.xyz, r8.xyzx, r8.wwww
            lt r7.yz, l(0.000000, 1.000000, 1.000000, 0.000000), |r8.xxyx|
            or r0.z, r7.z, r7.y
            if_nz r0.z
              mov r6.z, l(0)
            endif 
            if_z r0.z
              mad r0.z, r8.x, l(0.500000), l(0.500000)
              mad r7.y, -r8.y, l(0.500000), l(0.500000)
              ushr r7.z, r7.x, l(5)
              and r7.x, r7.x, l(31)
              dp4 r8.x, cb1[2].xyzw, cb1[r7.z + 5].xyzw
              mul r8.y, r8.x, cb1[4].x
              div r8.y, l(0.500000), r8.y
              add r8.w, -r8.y, l(1.000000)
              max r0.z, r0.z, r8.y
              min r0.z, r8.w, r0.z
              max r7.y, r7.y, r8.y
              min r7.y, r8.w, r7.y
              utof r7.x, r7.x
              add r0.z, r0.z, r7.x
              mul r9.x, r8.x, r0.z
              dp4 r0.z, cb1[1].xyzw, cb1[r7.z + 5].xyzw
              dp2 r7.x, r7.yyyy, r8.xxxx
              add r9.y, r0.z, r7.x
              sample_c_lz r6.z, r9.xyxx, t5.xxxx, s0, r8.z
            endif 
            mul r7.w, r6.z, r7.w
          endif 
          mul r7.xy, r6.ywyy, r7.wwww
          mul r7.z, r7.w, cb1[r6.x + 15].z
          add r5.yzw, r5.yyzw, r7.xxzy
        endif 
        iadd r5.x, r5.x, l(1)
      endloop 
      mov r5.x, r5.y
      mov r5.yz, r5.wwzw
    endif 
  endif 
  mul r0.xyzw, r2.xyzw, r1.xyzw
  mov r5.w, cb0[70].z
  mul r1.xyzw, r0.xyzw, r5.xyzw
  mov_sat r2.xyz, v8.xyzx
  lt r0.w, cb0[13].w, l(0.500000)
  if_nz r0.w
    mad r4.xyz, -r0.xyzx, r5.xyzx, r3.xyzx
    mad r4.xyz, r2.xyzx, r4.xyzx, r1.xyzx
  endif 
  if_z r0.w
    mov_sat r0.w, v8.w
    mul r2.w, r3.w, r3.w
    mad r6.xyz, cb0[5].xyzx, r2.wwww, cb0[3].xyzx
    ge r2.w, cb0[10].z, l(0.000000)
    if_nz r2.w
      mad r7.xyz, cb0[12].xyzx, r6.xyzx, -r1.xyzx
      mad r7.xyz, r0.wwww, r7.xyzx, r1.xyzx
      add r8.xyz, r3.xyzx, -r7.xyzx
      mad r1.xyz, r2.xyzx, r8.xyzx, r7.xyzx
    else 
      mul r2.w, -cb0[11].w, cb0[13].z
      min r2.w, r2.w, l(1.000000)
      lt r3.w, r2.w, l(0.999900)
      if_nz r3.w
        mul r2.w, r2.w, r2.w
        mad r7.xyz, cb0[12].xyzx, r6.xyzx, -r1.xyzx
        mad r7.xyz, r0.wwww, r7.xyzx, r1.xyzx
        add r8.xyz, r3.xyzx, -r7.xyzx
        mad r7.xyz, r2.xyzx, r8.xyzx, r7.xyzx
        mad r8.xyz, -r0.xyzx, r5.xyzx, r3.xyzx
        mad r8.xyz, r2.xyzx, r8.xyzx, r1.xyzx
        mad r9.xyz, cb0[12].xyzx, r6.xyzx, -r8.xyzx
        mad r8.xyz, r0.wwww, r9.xyzx, r8.xyzx
        add r8.xyz, -r7.xyzx, r8.xyzx
        mad r1.xyz, r2.wwww, r8.xyzx, r7.xyzx
      else 
        mad r0.xyz, -r0.xyzx, r5.xyzx, r3.xyzx
        mad r0.xyz, r2.xyzx, r0.xyzx, r1.xyzx
        mad r2.xyz, cb0[12].xyzx, r6.xyzx, -r0.xyzx
        mad r1.xyz, r0.wwww, r2.xyzx, r0.xyzx
      endif 
    endif 
  else 
    mov r1.xyz, r4.xyzx
  endif 
  mov o0.xyzw, r1.xyzw
else 
  mov o0.xyzw, cb0[68].xyzw
endif 
ret 
// Approximately 303 instruction slots used
