//fix shadows 3
// ---- Created with 3Dmigoto v1.3.14 on Wed Feb 13 17:07:02 2019
cbuffer cb4 : register(b4)
{
  float4 cb4[15];
}

cbuffer cb3 : register(b3)
{
  float4 cb3[1];
}

cbuffer cb2 : register(b2)
{
  float4 cb2[21];
}

cbuffer cb1 : register(b1)
{
  float4 cb1[6];
}

cbuffer cb0 : register(b0)
{
  float4 cb0[1];
}




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


void main(
  float4 v0 : POSITION0,
  uint v1 : SV_InstanceID0,
  float3 v2 : NORMAL0,
  float4 v3 : TEXCOORD0,
  out float4 o0 : SV_POSITION0)
{
// Needs manual fix for instruction:
// unknown dcl_: dcl_input_sgv v1.x, instance_id
  float4 r0,r1,r2;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.x = (int)v1.x + asint(cb3[0].x);
  r0.x = (uint)r0.x << 3;
  r1.xyzw = cb4[r0.x+1].xyzw * v0.yyyy;
  r1.xyzw = cb4[r0.x+0].xyzw * v0.xxxx + r1.xyzw;
  r1.xyzw = cb4[r0.x+2].xyzw * v0.zzzz + r1.xyzw;
  r1.xyzw = cb4[r0.x+3].xyzw * v0.wwww + r1.xyzw;
  r0.y = cmp(cb1[5].z != 0.000000);
  if (r0.y != 0) {
    r2.x = dot(v2.xyz, cb4[r0.x+4].xyz);
    r2.y = dot(v2.xyz, cb4[r0.x+5].xyz);
    r2.z = dot(v2.xyz, cb4[r0.x+6].xyz);
    r0.x = dot(r2.xyz, r2.xyz);
    r0.x = rsqrt(r0.x);
    r0.xyz = r2.xyz * r0.xxx;
    r2.xyz = -r1.xyz * cb0[0].www + cb0[0].xyz;
    r0.w = dot(r2.xyz, r2.xyz);
    r0.w = rsqrt(r0.w);
    r2.xyz = r2.xyz * r0.www;
    r0.w = dot(r0.xyz, r2.xyz);
    r0.w = -r0.w * r0.w + 1;
    r0.w = sqrt(r0.w);
    r0.w = cb1[5].z * r0.w;
    r1.xyz = -r0.xyz * r0.www + r1.xyz;
  }
  r0.xyzw = cb2[18].xyzw * r1.yyyy;
  r0.xyzw = cb2[17].xyzw * r1.xxxx + r0.xyzw;
  r0.xyzw = cb2[19].xyzw * r1.zzzz + r0.xyzw;
  r0.xyzw = cb2[20].xyzw * r1.wwww + r0.xyzw;
  r1.x = cb1[5].x / r0.w;
  r1.x = min(0, r1.x);
  r1.x = max(-1, r1.x);
  r0.z = r1.x + r0.z;
  r1.x = min(r0.z, r0.w);
  r1.x = r1.x + -r0.z;
  o0.z = cb1[5].y * r1.x + r0.z;
  o0.xyw = r0.xyw;


  float4 stereo = StereoParams.Load(0);
  float4 ini = IniParams.Load(0);
  float4 tex_filter = IniParams.Load(int2(2,0)).x;
  float SWITCH = IniParams.Load(int2(3,0)).z;
  
if (r0.w!=1.0)
{
if (tex_filter.x == 2)
  {
  o0.x-=stereo.x*(o0.w-stereo.y);
  }
}


  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v1.3.14 on Wed Feb 13 17:07:02 2019
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION                 0   xyzw        0     NONE   float   xyzw
// SV_InstanceID            0   x           1   INSTID    uint   x
// NORMAL                   0   xyz         2     NONE   float   xyz
// TEXCOORD                 0   xyzw        3     NONE   float
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION              0   xyzw        0      POS   float   xyzw
//
vs_4_0
dcl_constantbuffer cb0[1], immediateIndexed
dcl_constantbuffer cb1[6], immediateIndexed
dcl_constantbuffer cb2[21], immediateIndexed
dcl_constantbuffer cb3[1], immediateIndexed
dcl_constantbuffer cb4[15], dynamicIndexed
dcl_input v0.xyzw
dcl_input_sgv v1.x, instance_id
dcl_input v2.xyz
dcl_output_siv o0.xyzw, position
dcl_temps 3
iadd r0.x, v1.x, cb3[0].x
ishl r0.x, r0.x, l(3)
mul r1.xyzw, v0.yyyy, cb4[r0.x + 1].xyzw
mad r1.xyzw, cb4[r0.x + 0].xyzw, v0.xxxx, r1.xyzw
mad r1.xyzw, cb4[r0.x + 2].xyzw, v0.zzzz, r1.xyzw
mad r1.xyzw, cb4[r0.x + 3].xyzw, v0.wwww, r1.xyzw
ne r0.y, cb1[5].z, l(0.000000)
if_nz r0.y
  dp3 r2.x, v2.xyzx, cb4[r0.x + 4].xyzx
  dp3 r2.y, v2.xyzx, cb4[r0.x + 5].xyzx
  dp3 r2.z, v2.xyzx, cb4[r0.x + 6].xyzx
  dp3 r0.x, r2.xyzx, r2.xyzx
  rsq r0.x, r0.x
  mul r0.xyz, r0.xxxx, r2.xyzx
  mad r2.xyz, -r1.xyzx, cb0[0].wwww, cb0[0].xyzx
  dp3 r0.w, r2.xyzx, r2.xyzx
  rsq r0.w, r0.w
  mul r2.xyz, r0.wwww, r2.xyzx
  dp3 r0.w, r0.xyzx, r2.xyzx
  mad r0.w, -r0.w, r0.w, l(1.000000)
  sqrt r0.w, r0.w
  mul r0.w, r0.w, cb1[5].z
  mad r1.xyz, -r0.xyzx, r0.wwww, r1.xyzx
endif
mul r0.xyzw, r1.yyyy, cb2[18].xyzw
mad r0.xyzw, cb2[17].xyzw, r1.xxxx, r0.xyzw
mad r0.xyzw, cb2[19].xyzw, r1.zzzz, r0.xyzw
mad r0.xyzw, cb2[20].xyzw, r1.wwww, r0.xyzw
div r1.x, cb1[5].x, r0.w
min r1.x, r1.x, l(0.000000)
max r1.x, r1.x, l(-1.000000)
add r0.z, r0.z, r1.x
min r1.x, r0.w, r0.z
add r1.x, -r0.z, r1.x
mad o0.z, cb1[5].y, r1.x, r0.z
mov o0.xyw, r0.xyxw
ret
// Approximately 0 instruction slots used

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