//shadow high med shader --- or somewhat ^^


//NEW
cbuffer PER_FRAME : register(b13)
{
  row_major float4x4 g_VS_ViewProjMatr : packoffset(c0);
  float4 g_VS_ScreenSize : packoffset(c7);
  float4 g_VS_NearFarClipDist : packoffset(c9);
}


cbuffer PER_BATCH : register(b0)
{
  float4 g_WorldViewPos : packoffset(c0);
  float4 g_GeneralParams : packoffset(c1);
  float4 vWBasisX : packoffset(c2);
  float4 vWBasisY : packoffset(c3);
  float4 vWBasisZ : packoffset(c4);
  row_major float4x4 g_mLightShadowProj : packoffset(c5);
  float4 irreg_kernel_2d[8] : packoffset(c9);
  float4 PS_NearFarClipDist : packoffset(c17);
  float4 g_vLightPos : packoffset(c18);
  float4 PS_ScreenSize : packoffset(c19);
}

cbuffer PER_INSTANCE : register(b1)
{
  row_major float4x4 CompMatrix : packoffset(c0);
}

cbuffer PER_FRAME : register(b2)
{
  float4 g_PS_ProjRatio : packoffset(c223);
}

SamplerState _tex0_s : register(s0);
SamplerState _tex2_s : register(s2);
SamplerState _tex7_s : register(s7);
SamplerComparisonState SAMPLER_STATE_depthMapSampler_s : register(s1);
Texture2D<float4> _tex0 : register(t0);
Texture2D<float4> ShadowMap : register(t1);
Texture2D<float4> _tex2 : register(t2);
Texture2D<float4> _tex7 : register(t7);


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

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

  r0.x = _tex0.Sample(_tex0_s, v1.xy).x;

    //Fix
  float4 stereo = StereoParams.Load(0);
  matrix vp = g_VS_ViewProjMatr;
  matrix ivp = inverse(vp);
  float4 tmp = mul(vp, v2 * r0.x);
  tmp.x -= stereo.x * (tmp.w - stereo.y);
  v2 = mul(ivp, tmp) / r0.x;


  r1.xyz = v2.xyz * r0.xxx;
  r1.w = 1;
  r2.x = dot(g_mLightShadowProj._m00_m01_m02_m03, r1.xyzw);
  r2.y = dot(g_mLightShadowProj._m10_m11_m12_m13, r1.xyzw);
  r0.y = dot(g_mLightShadowProj._m20_m21_m22_m23, r1.xyzw);
  r0.z = dot(g_mLightShadowProj._m30_m31_m32_m33, r1.xyzw);
  r1.xyzw = r2.xyxy / r0.zzzz;
  r0.y = -g_GeneralParams.w + r0.y;
  r0.zw = float2(1000,0.001953125) * g_GeneralParams.xx;
  r2.xy = r1.zw * r0.zz;
  r2.xy = _tex7.Sample(_tex7_s, r2.xy).xy;
  r2.xyz = r2.yxx * r0.www;
  r2.w = -r2.x;
  r3.xyzw = irreg_kernel_2d[0].yyzz * r2.xzzw;
  r3.xyzw = r2.zwxz * irreg_kernel_2d[0].xxww + r3.xyzw;
  r3.xyzw = r3.xyzw + r1.zwzw;
  r4.x = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r3.xy, r0.y).x;
  r4.y = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r3.zw, r0.y).x;
  r3.xyzw = irreg_kernel_2d[1].yyzz * r2.xzzw;
  r3.xyzw = r2.zwxz * irreg_kernel_2d[1].xxww + r3.xyzw;
  r3.xyzw = r3.xyzw + r1.zwzw;
  r4.z = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r3.xy, r0.y).x;
  r4.w = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r3.zw, r0.y).x;
  r0.z = dot(r4.xyzw, float4(0.125,0.125,0.125,0.125));
  r3.xyzw = irreg_kernel_2d[2].yyzz * r2.xzzw;
  r3.xyzw = r2.zwxz * irreg_kernel_2d[2].xxww + r3.xyzw;
  r3.xyzw = r3.xyzw + r1.zwzw;
  r4.x = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r3.xy, r0.y).x;
  r4.y = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r3.zw, r0.y).x;
  r3.xyzw = irreg_kernel_2d[3].yyzz * r2.xyzw;
  r2.xyzw = r2.zwxz * irreg_kernel_2d[3].xxww + r3.xyzw;
  r1.xyzw = r2.xyzw + r1.xyzw;
  r4.z = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r1.xy, r0.y).x;
  r4.w = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r1.zw, r0.y).x;
  r0.y = dot(r4.xyzw, float4(0.125,0.125,0.125,0.125));
  r0.y = r0.z + r0.y;
  r0.z = _tex2.Sample(_tex2_s, v1.xy).w;
  r0.z = 3.99609375 * r0.z;
  r0.z = floor(r0.z);
  r0.z = (int)r0.z;
  r0.z = cmp((int)r0.z != 1);
  if (r0.z != 0) {
    r1.xyz = r0.xxx * v2.xyz + g_WorldViewPos.xyz;
    r1.w = 1;
    r2.x = dot(CompMatrix._m00_m01_m02_m03, r1.xyzw);
    r2.y = dot(CompMatrix._m10_m11_m12_m13, r1.xyzw);
    r2.z = dot(CompMatrix._m20_m21_m22_m23, r1.xyzw);
    r2.w = dot(CompMatrix._m30_m31_m32_m33, r1.xyzw);
    r3.xyz = g_vLightPos.xyz + -r1.xyz;
    r0.z = dot(r3.xyz, r3.xyz);
    r0.z = rsqrt(r0.z);
    r1.xyz = r3.xyz * r0.zzz + r1.xyz;
    r1.w = 1;
    r3.x = dot(CompMatrix._m00_m01_m02_m03, r1.xyzw);
    r3.y = dot(CompMatrix._m10_m11_m12_m13, r1.xyzw);
    r3.z = dot(CompMatrix._m20_m21_m22_m23, r1.xyzw);
    r3.w = dot(CompMatrix._m30_m31_m32_m33, r1.xyzw);
    r1.xyzw = r3.xyzw + -r2.xyzw;
    r3.xyzw = float4(0.00150000001,0.00150000001,0.00150000001,0.00150000001) * r1.xyzw;
    r1.xyzw = r1.xyzw * float4(0.00150000001,0.00150000001,0.00150000001,0.00150000001) + r2.xyzw;
    r2.xyzw = r3.xyzw;
    r4.xyzw = r1.xyzw;
    r0.zw = float2(1,0);
    while (true) {
      r5.x = cmp((int)r0.w >= 16);
      if (r5.x != 0) break;
      r5.xyz = r4.xyz / r4.www;
      r6.xy = r5.xy * float2(0.5,0.5) + float2(0.5,0.5);
      r5.x = 1 + -r6.y;
      r5.y = cmp(r6.x < 0);
      r5.w = cmp(1 < r6.x);
      r5.y = (int)r5.w | (int)r5.y;
      r5.w = cmp(r5.x < 0);
      r5.y = (int)r5.w | (int)r5.y;
      r5.x = cmp(1 < r5.x);
      r5.x = (int)r5.x | (int)r5.y;
      if (r5.x != 0) {
        break;
      }
      r6.z = 1 + -r6.y;
      r5.x = _tex0.SampleLevel(_tex0_s, r6.xz, 0).x;
      r5.y = -g_PS_ProjRatio.x + r5.z;
      r5.y = g_PS_ProjRatio.y / r5.y;
      r5.y = r5.y * PS_NearFarClipDist.y + -0.00999999978;
      r5.z = r5.x * PS_NearFarClipDist.y + -r5.y;
      r5.x = -r5.x * PS_NearFarClipDist.y + r5.y;
      r5.x = -0.0299999993 + r5.x;
      r5.x = max(0, r5.x);
      r5.x = 0.333333343 * r5.x;
      r5.x = max(r5.z, r5.x);
      r5.x = -r5.x * 200 + 1;
      r5.x = 1 + -r5.x;
      r0.z = min(r5.x, r0.z);
      r4.xyzw = r4.xyzw + r2.xyzw;
      r2.xyzw = float4(1.04999995,1.04999995,1.04999995,1.04999995) * r2.xyzw;
      r0.w = (int)r0.w + 1;
    }
    r0.x = saturate(r0.x * PS_NearFarClipDist.y + -2);
    r0.w = 1 + -r0.z;
    r0.x = r0.x * r0.w + r0.z;
    r0.y = min(r0.x, r0.y);
  }
  o0.xyzw = float4(1,1,1,1) + -r0.yyyy;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.30.960.8229
//
//   using 3Dmigoto v1.3.6 on Tue Mar 20 19:08:22 2018
//
//
// Note: shader requires additional functionality:
//       Early depth-stencil
//
//
// Buffer Definitions:
//
// cbuffer PER_BATCH
// {
//
//   float4 g_WorldViewPos;             // Offset:    0 Size:    16
//   float4 g_GeneralParams;            // Offset:   16 Size:    16
//   float4 vWBasisX;                   // Offset:   32 Size:    16 [unused]
//   float4 vWBasisY;                   // Offset:   48 Size:    16 [unused]
//   float4 vWBasisZ;                   // Offset:   64 Size:    16 [unused]
//   row_major float4x4 g_mLightShadowProj;// Offset:   80 Size:    64
//   float4 irreg_kernel_2d[8];         // Offset:  144 Size:   128
//   float4 PS_NearFarClipDist;         // Offset:  272 Size:    16
//   float4 g_vLightPos;                // Offset:  288 Size:    16
//   float4 PS_ScreenSize;              // Offset:  304 Size:    16 [unused]
//
// }
//
// cbuffer PER_INSTANCE
// {
//
//   row_major float4x4 CompMatrix;     // Offset:    0 Size:    64
//
// }
//
// cbuffer PER_FRAME
// {
//
//   float4 g_PS_ProjRatio;             // Offset: 3568 Size:    16
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// _tex0                             sampler      NA          NA    0        1
// SAMPLER_STATE_depthMapSampler   sampler_c      NA          NA    1        1
// _tex2                             sampler      NA          NA    2        1
// _tex7                             sampler      NA          NA    7        1
// _tex0                             texture  float4          2d    0        1
// ShadowMap                         texture  float4          2d    1        1
// _tex2                             texture  float4          2d    2        1
// _tex7                             texture  float4          2d    7        1
// PER_BATCH                         cbuffer      NA          NA    0        1
// PER_INSTANCE                      cbuffer      NA          NA    1        1
// PER_FRAME                         cbuffer      NA          NA    2        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION              0   xyzw        0      POS   float
// TEXCOORD                 0   xyzw        1     NONE   float   xy
// TEXCOORD                 1   xyzw        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 | forceEarlyDepthStencil
dcl_constantbuffer cb0[19], immediateIndexed
dcl_constantbuffer cb1[4], immediateIndexed
dcl_constantbuffer cb2[224], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_comparison
dcl_sampler s2, mode_default
dcl_sampler s7, 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) t7
dcl_input_ps linear v1.xy
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 7
sample_indexable(texture2d)(float,float,float,float) r0.x, v1.xyxx, t0.xyzw, s0
mul r1.xyz, r0.xxxx, v2.xyzx
mov r1.w, l(1.000000)
dp4 r2.x, cb0[5].xyzw, r1.xyzw
dp4 r2.y, cb0[6].xyzw, r1.xyzw
dp4 r0.y, cb0[7].xyzw, r1.xyzw
dp4 r0.z, cb0[8].xyzw, r1.xyzw
div r1.xyzw, r2.xyxy, r0.zzzz
add r0.y, r0.y, -cb0[1].w
mul r0.zw, cb0[1].xxxx, l(0.000000, 0.000000, 1000.000000, 0.00195312500)
mul r2.xy, r0.zzzz, r1.zwzz
sample_indexable(texture2d)(float,float,float,float) r2.xy, r2.xyxx, t7.xyzw, s7
mul r2.xyz, r0.wwww, r2.yxxy
mov r2.w, -r2.x
mul r3.xyzw, r2.xzzw, cb0[9].yyzz
mad r3.xyzw, r2.zwxz, cb0[9].xxww, r3.xyzw
add r3.xyzw, r1.zwzw, r3.xyzw
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.x, r3.xyxx, t1.xxxx, s1, r0.y
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.y, r3.zwzz, t1.xxxx, s1, r0.y
mul r3.xyzw, r2.xzzw, cb0[10].yyzz
mad r3.xyzw, r2.zwxz, cb0[10].xxww, r3.xyzw
add r3.xyzw, r1.zwzw, r3.xyzw
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.z, r3.xyxx, t1.xxxx, s1, r0.y
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.w, r3.zwzz, t1.xxxx, s1, r0.y
dp4 r0.z, r4.xyzw, l(0.125000, 0.125000, 0.125000, 0.125000)
mul r3.xyzw, r2.xzzw, cb0[11].yyzz
mad r3.xyzw, r2.zwxz, cb0[11].xxww, r3.xyzw
add r3.xyzw, r1.zwzw, r3.xyzw
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.x, r3.xyxx, t1.xxxx, s1, r0.y
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.y, r3.zwzz, t1.xxxx, s1, r0.y
mul r3.xyzw, r2.xyzw, cb0[12].yyzz
mad r2.xyzw, r2.zwxz, cb0[12].xxww, r3.xyzw
add r1.xyzw, r1.xyzw, r2.xyzw
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.z, r1.xyxx, t1.xxxx, s1, r0.y
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.w, r1.zwzz, t1.xxxx, s1, r0.y
dp4 r0.y, r4.xyzw, l(0.125000, 0.125000, 0.125000, 0.125000)
add r0.y, r0.y, r0.z
sample_indexable(texture2d)(float,float,float,float) r0.z, v1.xyxx, t2.xywz, s2
mul r0.z, r0.z, l(3.99609375)
round_ni r0.z, r0.z
ftoi r0.z, r0.z
ine r0.z, r0.z, l(1)
if_nz r0.z
  mad r1.xyz, r0.xxxx, v2.xyzx, cb0[0].xyzx
  mov r1.w, l(1.000000)
  dp4 r2.x, cb1[0].xyzw, r1.xyzw
  dp4 r2.y, cb1[1].xyzw, r1.xyzw
  dp4 r2.z, cb1[2].xyzw, r1.xyzw
  dp4 r2.w, cb1[3].xyzw, r1.xyzw
  add r3.xyz, -r1.xyzx, cb0[18].xyzx
  dp3 r0.z, r3.xyzx, r3.xyzx
  rsq r0.z, r0.z
  mad r1.xyz, r3.xyzx, r0.zzzz, r1.xyzx
  mov r1.w, l(1.000000)
  dp4 r3.x, cb1[0].xyzw, r1.xyzw
  dp4 r3.y, cb1[1].xyzw, r1.xyzw
  dp4 r3.z, cb1[2].xyzw, r1.xyzw
  dp4 r3.w, cb1[3].xyzw, r1.xyzw
  add r1.xyzw, -r2.xyzw, r3.xyzw
  mul r3.xyzw, r1.xyzw, l(0.001500, 0.001500, 0.001500, 0.001500)
  mad r1.xyzw, r1.xyzw, l(0.001500, 0.001500, 0.001500, 0.001500), r2.xyzw
  mov r2.xyzw, r3.xyzw
  mov r4.xyzw, r1.xyzw
  mov r0.zw, l(0,0,1.000000,0)
  loop
    ige r5.x, r0.w, l(16)
    breakc_nz r5.x
    div r5.xyz, r4.xyzx, r4.wwww
    mad r6.xy, r5.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000), l(0.500000, 0.500000, 0.000000, 0.000000)
    add r5.x, -r6.y, l(1.000000)
    lt r5.y, r6.x, l(0.000000)
    lt r5.w, l(1.000000), r6.x
    or r5.y, r5.w, r5.y
    lt r5.w, r5.x, l(0.000000)
    or r5.y, r5.w, r5.y
    lt r5.x, l(1.000000), r5.x
    or r5.x, r5.x, r5.y
    if_nz r5.x
      break
    endif
    add r6.z, -r6.y, l(1.000000)
    sample_l_indexable(texture2d)(float,float,float,float) r5.x, r6.xzxx, t0.xyzw, s0, l(0.000000)
    add r5.y, r5.z, -cb2[223].x
    div r5.y, cb2[223].y, r5.y
    mad r5.y, r5.y, cb0[17].y, l(-0.010000)
    mad r5.z, r5.x, cb0[17].y, -r5.y
    mad r5.x, -r5.x, cb0[17].y, r5.y
    add r5.x, r5.x, l(-0.030000)
    max r5.x, r5.x, l(0.000000)
    mul r5.x, r5.x, l(0.333333343)
    max r5.x, r5.x, r5.z
    mad r5.x, -r5.x, l(200.000000), l(1.000000)
    add r5.x, -r5.x, l(1.000000)
    min r0.z, r0.z, r5.x
    add r4.xyzw, r2.xyzw, r4.xyzw
    mul r2.xyzw, r2.xyzw, l(1.050000, 1.050000, 1.050000, 1.050000)
    iadd r0.w, r0.w, l(1)
  endloop
  mad_sat r0.x, r0.x, cb0[17].y, l(-2.000000)
  add r0.w, -r0.z, l(1.000000)
  mad r0.x, r0.x, r0.w, r0.z
  min r0.y, r0.y, r0.x
endif
add o0.xyzw, -r0.yyyy, l(1.000000, 1.000000, 1.000000, 1.000000)
ret
// Approximately 105 instruction slots used

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