//Shadows - med ShaderQualiti


//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_GeneralParams : packoffset(c0);
  float4 vWBasisX : packoffset(c1);
  float4 vWBasisY : packoffset(c2);
  float4 vWBasisZ : packoffset(c3);
  row_major float4x4 g_mLightShadowProj : packoffset(c4);
  float4 irreg_kernel_2d[8] : packoffset(c8);
  float4 PS_NearFarClipDist : packoffset(c16);
  float4 PS_ScreenSize : packoffset(c17);
}

SamplerState _tex0_s : register(s0);
SamplerState _tex7_s : register(s7);
SamplerComparisonState SAMPLER_STATE_depthMapSampler_s : register(s1);
Texture2D<float4> _tex0 : register(t0);
Texture2D<float4> ShadowMap : register(t1);
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;
  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;


  r0.xyz = v2.xyz * r0.xxx;
  r0.w = 1;
  r1.x = dot(g_mLightShadowProj._m00_m01_m02_m03, r0.xyzw);
  r1.y = dot(g_mLightShadowProj._m10_m11_m12_m13, r0.xyzw);
  r1.z = dot(g_mLightShadowProj._m30_m31_m32_m33, r0.xyzw);
  r0.x = dot(g_mLightShadowProj._m20_m21_m22_m23, r0.xyzw);
  r0.x = -g_GeneralParams.w + r0.x;
  r1.xyzw = r1.xyxy / r1.zzzz;
  r0.yz = float2(1000,0.001953125) * g_GeneralParams.xx;
  r0.yw = r1.zw * r0.yy;
  r0.yw = _tex7.Sample(_tex7_s, r0.yw).xy;
  r2.xyz = r0.wyy * r0.zzz;
  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.x).x;
  r4.y = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r3.zw, r0.x).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.x).x;
  r4.w = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r3.zw, r0.x).x;
  r0.y = 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.x).x;
  r4.y = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r3.zw, r0.x).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.x).x;
  r4.w = ShadowMap.SampleCmpLevelZero(SAMPLER_STATE_depthMapSampler_s, r1.zw, r0.x).x;
  r0.x = dot(r4.xyzw, float4(0.125,0.125,0.125,0.125));
  r0.x = r0.y + r0.x;
  o0.xyzw = float4(1,1,1,1) + -r0.xxxx;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.30.960.8229
//
//   using 3Dmigoto v1.3.6 on Tue Mar 20 18:22:13 2018
//
//
// Note: shader requires additional functionality:
//       Early depth-stencil
//
//
// Buffer Definitions:
//
// cbuffer PER_BATCH
// {
//
//   float4 g_GeneralParams;            // Offset:    0 Size:    16
//   float4 vWBasisX;                   // Offset:   16 Size:    16 [unused]
//   float4 vWBasisY;                   // Offset:   32 Size:    16 [unused]
//   float4 vWBasisZ;                   // Offset:   48 Size:    16 [unused]
//   row_major float4x4 g_mLightShadowProj;// Offset:   64 Size:    64
//   float4 irreg_kernel_2d[8];         // Offset:  128 Size:   128
//   float4 PS_NearFarClipDist;         // Offset:  256 Size:    16 [unused]
//   float4 PS_ScreenSize;              // Offset:  272 Size:    16 [unused]
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// _tex0                             sampler      NA          NA    0        1
// SAMPLER_STATE_depthMapSampler   sampler_c      NA          NA    1        1
// _tex7                             sampler      NA          NA    7        1
// _tex0                             texture  float4          2d    0        1
// ShadowMap                         texture  float4          2d    1        1
// _tex7                             texture  float4          2d    7        1
// PER_BATCH                         cbuffer      NA          NA    0        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[12], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_comparison
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) t7
dcl_input_ps linear v1.xy
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 5
sample_indexable(texture2d)(float,float,float,float) r0.x, v1.xyxx, t0.xyzw, s0
mul r0.xyz, r0.xxxx, v2.xyzx
mov r0.w, l(1.000000)
dp4 r1.x, cb0[4].xyzw, r0.xyzw
dp4 r1.y, cb0[5].xyzw, r0.xyzw
dp4 r1.z, cb0[7].xyzw, r0.xyzw
dp4 r0.x, cb0[6].xyzw, r0.xyzw
add r0.x, r0.x, -cb0[0].w
div r1.xyzw, r1.xyxy, r1.zzzz
mul r0.yz, cb0[0].xxxx, l(0.000000, 1000.000000, 0.00195312500, 0.000000)
mul r0.yw, r0.yyyy, r1.zzzw
sample_indexable(texture2d)(float,float,float,float) r0.yw, r0.ywyy, t7.zxwy, s7
mul r2.xyz, r0.zzzz, r0.wyyw
mov r2.w, -r2.x
mul r3.xyzw, r2.xzzw, cb0[8].yyzz
mad r3.xyzw, r2.zwxz, cb0[8].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.x
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.y, r3.zwzz, t1.xxxx, s1, r0.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.z, r3.xyxx, t1.xxxx, s1, r0.x
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.w, r3.zwzz, t1.xxxx, s1, r0.x
dp4 r0.y, r4.xyzw, l(0.125000, 0.125000, 0.125000, 0.125000)
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.x, r3.xyxx, t1.xxxx, s1, r0.x
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.y, r3.zwzz, t1.xxxx, s1, r0.x
mul r3.xyzw, r2.xyzw, cb0[11].yyzz
mad r2.xyzw, r2.zwxz, cb0[11].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.x
sample_c_lz_indexable(texture2d)(float,float,float,float) r4.w, r1.zwzz, t1.xxxx, s1, r0.x
dp4 r0.x, r4.xyzw, l(0.125000, 0.125000, 0.125000, 0.125000)
add r0.x, r0.x, r0.y
add o0.xyzw, -r0.xxxx, l(1.000000, 1.000000, 1.000000, 1.000000)
ret
// Approximately 39 instruction slots used

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