// Decal
Texture2D<float4> t4 : register(t4);

Texture2D<float4> t3 : register(t3);

Texture2D<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s0_s : register(s0);

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

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

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




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


void main(
  float4 v0 : SV_POSITION0,
  float4 v1 : TEXCOORD0,
  float2 v2 : TEXCOORD1,
  uint v3 : SV_IsFrontFace0,
  out float4 o0 : SV_Target0)
{
  float4 r0,r1,r2,r3,r4;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.xy = v2.xy / v1.ww;
  r1.xy = (int2)v0.xy;
  r1.zw = float2(0,0);
  r2.z = t1.Load(r1.xyw).x;
  r2.xy = r2.zz * r0.xy;
  r2.w = 1;
  
  //Fix
  float4 stereo = StereoParams.Load(0);
  r2.x += stereo.x * (r2.z - stereo.y) * cb2[21].x;
  
  r0.x = dot(cb0[4].xyzw, r2.xyzw);
  r0.y = dot(cb0[5].xyzw, r2.xyzw);
  r0.zw = t0.Sample(s0_s, r0.xy).xw;
  r2.x = 1 + -cb3[0].y;
  r2.x = 0.5 * r2.x;
  r0.xy = r0.xy * cb3[0].yy + r2.xx;
  r0.x = t0.Sample(s0_s, r0.xy).y;
  r0.y = cb3[1].x * r0.w;
  r0.y = r0.z * cb3[0].w + r0.y;
  r0.x = cb3[0].z * r0.x;
  r0.xzw = cb3[1].yzw * r0.xxx;
  r0.xyz = r0.yyy * cb3[2].xyz + r0.xzw;
  r0.w = r0.x + r0.y;
  r0.w = r0.w + r0.z;
  r0.w = cmp(9.99999975e-005 < r0.w);
  if (r0.w != 0) {
    r0.w = t4.Load(r1.xyw).w;
    r0.w = cmp(r0.w >= 0.5);
    r2.x = t2.Load(r1.xyw).w;
    r1.xyzw = t3.Load(r1.xyz).xyzw;
    r2.x = 255 * r2.x;
    r2.y = r1.w * 768 + r2.x;
    r2.x = r1.z;
    r1.zw = r2.xy * float2(2,0.00195503421) + float2(-1,-1);
    r1.zw = max(float2(-1,-1), r1.zw);
    r1.zw = min(float2(1,1), r1.zw);
    r2.xyz = float3(1,1,1) + -abs(r1.zwz);
    r3.z = r2.x + -abs(r1.w);
    r2.x = cmp(r3.z < 0);
    r4.xy = cmp(r1.zw >= float2(0,0));
    r4.xy = r4.xy ? float2(1,1) : float2(-1,-1);
    r2.yz = r4.xy * r2.yz;
    r3.xy = r2.xx ? r2.yz : r1.zw;
    r1.xy = r1.xy * float2(2,2) + float2(-1,-1);
    r1.xy = r1.xy * abs(r1.xy);
    r2.z = cb2[5].x;
    r2.x = cb2[6].x;
    r2.y = cb2[4].x;
    r4.xyz = r2.xyz * r3.yzx;
    r2.xyz = r2.zxy * r3.zxy + -r4.xyz;
    r1.z = dot(r2.xyz, r2.xyz);
    r1.z = max(1.17549435e-038, r1.z);
    r1.z = sqrt(r1.z);
    r2.xyz = r2.xyz / r1.zzz;
    r4.xyz = r2.zxy * r3.yzx;
    r4.xyz = r2.yzx * r3.zxy + -r4.xyz;
    r4.xyz = r4.xyz * r1.yyy;
    r2.xyz = r2.xyz * r1.xxx + r4.xyz;
    r1.x = -r1.x * r1.x + 1;
    r1.x = -r1.y * r1.y + r1.x;
    r1.x = max(0, r1.x);
    r1.x = sqrt(r1.x);
    r1.xyz = r1.xxx * r3.xyz + r2.xyz;
    r1.x = dot(r1.xyz, r1.xyz);
    r1.x = rsqrt(r1.x);
    r1.x = r1.y * r1.x + -cb3[2].w;
    r1.x = saturate(cb3[3].x * r1.x);
    r1.w = r0.w ? 0 : r1.x;
    r2.xyz = cb0[56].xyz * cb0[56].www;
    r2.xyz = cb3[0].xxx * r2.xyz;
    r0.xyz = r2.xyz * r0.xyz;
  } else {
    r1.w = 0;
  }
  r1.xyz = r1.www * r0.xyz;
  o0.xyzw = r1.xyzw;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v1.3.8 on Sun Apr 22 08:42:47 2018
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION              0   xyzw        0      POS   float   xy
// TEXCOORD                 0   xyzw        1     NONE   float      w
// TEXCOORD                 1   xy          2     NONE   float   xy
// SV_IsFrontFace           0   x           3    FFACE    uint
//
//
// 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[74], immediateIndexed
dcl_constantbuffer cb3[4], immediateIndexed
dcl_constantbuffer cb2[53], 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_input_ps_siv linear noperspective v0.xy, position
dcl_input_ps linear v1.w
dcl_input_ps linear v2.xy
dcl_output o0.xyzw
dcl_temps 5
div r0.xy, v2.xyxx, v1.wwww
ftoi r1.xy, v0.xyxx
mov r1.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r2.z, r1.xyww, t1.yzxw
mul r2.xy, r0.xyxx, r2.zzzz
mov r2.w, l(1.000000)
dp4 r0.x, cb0[4].xyzw, r2.xyzw
dp4 r0.y, cb0[5].xyzw, r2.xyzw
sample_indexable(texture2d)(float,float,float,float) r0.zw, r0.xyxx, t0.yzxw, s0
add r2.x, -cb3[0].y, l(1.000000)
mul r2.x, r2.x, l(0.500000)
mad r0.xy, r0.xyxx, cb3[0].yyyy, r2.xxxx
sample_indexable(texture2d)(float,float,float,float) r0.x, r0.xyxx, t0.yxzw, s0
mul r0.y, r0.w, cb3[1].x
mad r0.y, r0.z, cb3[0].w, r0.y
mul r0.x, r0.x, cb3[0].z
mul r0.xzw, r0.xxxx, cb3[1].yyzw
mad r0.xyz, r0.yyyy, cb3[2].xyzx, r0.xzwx
add r0.w, r0.y, r0.x
add r0.w, r0.z, r0.w
lt r0.w, l(0.000100), r0.w
if_nz r0.w
  ld_indexable(texture2d)(float,float,float,float) r0.w, r1.xyww, t4.xyzw
  ge r0.w, r0.w, l(0.500000)
  ld_indexable(texture2d)(float,float,float,float) r2.x, r1.xyww, t2.wxyz
  ld_indexable(texture2d)(float,float,float,float) r1.xyzw, r1.xyzw, t3.xyzw
  mul r2.x, r2.x, l(255.000000)
  mad r2.y, r1.w, l(768.000000), r2.x
  mov r2.x, r1.z
  mad r1.zw, r2.xxxy, l(0.000000, 0.000000, 2.000000, 0.00195503421), l(0.000000, 0.000000, -1.000000, -1.000000)
  max r1.zw, r1.zzzw, l(0.000000, 0.000000, -1.000000, -1.000000)
  min r1.zw, r1.zzzw, l(0.000000, 0.000000, 1.000000, 1.000000)
  add r2.xyz, -|r1.zwzz|, l(1.000000, 1.000000, 1.000000, 0.000000)
  add r3.z, -|r1.w|, r2.x
  lt r2.x, r3.z, l(0.000000)
  ge r4.xy, r1.zwzz, l(0.000000, 0.000000, 0.000000, 0.000000)
  movc r4.xy, r4.xyxx, l(1.000000,1.000000,0,0), l(-1.000000,-1.000000,0,0)
  mul r2.yz, r2.yyzy, r4.xxyx
  movc r3.xy, r2.xxxx, r2.yzyy, r1.zwzz
  mad r1.xy, r1.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000)
  mul r1.xy, |r1.xyxx|, r1.xyxx
  mov r2.z, cb2[5].x
  mov r2.x, cb2[6].x
  mov r2.y, cb2[4].x
  mul r4.xyz, r3.yzxy, r2.xyzx
  mad r2.xyz, r2.zxyz, r3.zxyz, -r4.xyzx
  dp3 r1.z, r2.xyzx, r2.xyzx
  max r1.z, r1.z, l(1.175494351E-038)
  sqrt r1.z, r1.z
  div r2.xyz, r2.xyzx, r1.zzzz
  mul r4.xyz, r3.yzxy, r2.zxyz
  mad r4.xyz, r2.yzxy, r3.zxyz, -r4.xyzx
  mul r4.xyz, r1.yyyy, r4.xyzx
  mad r2.xyz, r2.xyzx, r1.xxxx, r4.xyzx
  mad r1.x, -r1.x, r1.x, l(1.000000)
  mad r1.x, -r1.y, r1.y, r1.x
  max r1.x, r1.x, l(0.000000)
  sqrt r1.x, r1.x
  mad r1.xyz, r1.xxxx, r3.xyzx, r2.xyzx
  dp3 r1.x, r1.xyzx, r1.xyzx
  rsq r1.x, r1.x
  mad r1.x, r1.y, r1.x, -cb3[2].w
  mul_sat r1.x, r1.x, cb3[3].x
  movc r1.w, r0.w, l(0), r1.x
  mul r2.xyz, cb0[56].wwww, cb0[56].xyzx
  mul r2.xyz, r2.xyzx, cb3[0].xxxx
  mul r0.xyz, r0.xyzx, r2.xyzx
else
  mov r1.w, l(0)
endif
mul r1.xyz, r0.xyzx, r1.wwww
mov o0.xyzw, r1.xyzw
ret
// Approximately 0 instruction slots used

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