//shadows
// ---- Created with 3Dmigoto v0.6.164 on Thu Aug  7 09:27:14 2025

cbuffer _Globals : register(b0)
{
  row_major float4x4 g_SMapTM[4] : packoffset(c101);
  float4 g_DbgColor : packoffset(c117);
  float4 g_FilterTaps[8] : packoffset(c118);
  float4 g_FadingParams : packoffset(c126);
  float4 g_CSMRangesSqr : packoffset(c127);
  float2 g_SMapSize : packoffset(c128);
  float4 g_CameraOrigin : packoffset(c129);
}

cbuffer cb13 : register(b13)
{
  float4 cb13[100];
}

cbuffer cb10 : register(b10)
{
  float4 cb10[100];
}

SamplerState TMU0_Sampler_sampler_s : register(s0);
SamplerComparisonState TMU1_SMSampler_sampler_s : register(s1);
Texture2D<float4> TMU0_Sampler : register(t0);
Texture2D<float4> TMU1_SMSampler : register(t1);


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


void main(
  float4 v0 : SV_Position0,
  float4 v1 : TEXCOORD0,
  float4 v2 : TEXCOORD1,
  float4 v3 : TEXCOORD2,
  float4 v4 : TEXCOORD3,
  float4 v5 : TEXCOORD4,
  float4 v6 : TEXCOORD5,
  out float4 o0 : SV_Target0)
{
  float4 r0,r1,r2,r3,r4,r5,r10;
  uint4 bitmask, uiDest;
  float4 fDest;
 
  r0.x = TMU0_Sampler.Sample(TMU0_Sampler_sampler_s, v1.xy).x;
  r0.yzw = v2.xyz * r0.xxx;
  r1.xyz = v2.xyz * r0.xxx + g_CameraOrigin.xyz;
  

 

//float4 s = StereoParams.Load(0);
//float4 testeo = IniParams.Load(int2(90,0));  
//float fov = sqrt(cb13[0].x*cb13[0].x+cb13[0].y*cb13[0].y+cb13[0].z*cb13[0].z);
//r1.x += s.x * r0.x  * (cb13[6].x * -cb13[5].y/fov);
//r1.y += s.x * r0.x  * (cb13[6].y * -cb13[5].y/fov);
//r1.z += s.x * r0.x  * (cb13[6].z * -cb13[5].y/fov); 
//

float4 s = StereoParams.Load(0);
float4 testeo = IniParams.Load(int2(90,0));  
float fov = sqrt(cb13[0].x*cb13[0].x+cb13[0].y*cb13[0].y+cb13[0].z*cb13[0].z);
r1.x += s.x * (r0.x - (s.y * cb13[5].w))  * (cb13[6].x * -cb13[5].y/fov);
r1.y += s.x * (r0.x - (s.y * cb13[5].w))  * (cb13[6].y * -cb13[5].y/fov);
r1.z += s.x * (r0.x - (s.y * cb13[5].w))  * (cb13[6].z * -cb13[5].y/fov);   
  
  
  r2.xyzw = v4.xyzw * r1.yyyy;
  r2.xyzw = r1.xxxx * v3.xyzw + r2.xyzw;
  r1.xyzw = r1.zzzz * v5.xyzw + r2.xyzw;
  r1.xyzw = v6.xyzw + r1.xyzw;
  
  
  r0.x = dot(v0.xy, float2(8.10000038,5.69999981));
  r0.y = dot(r0.yzw, r0.yzw);
  r0.y = saturate(r0.y * g_FadingParams.x + g_FadingParams.y);
  r0.y = r0.y * g_FadingParams.z + g_FadingParams.w;
  sincos(r0.x, r0.x, r2.x);
  r3.xyzw = ddx_coarse(r1.xyzy);
  r4.xyzw = ddy_coarse(r1.yxyz);
  r0.zw = r4.yw * r3.yw;
  r5.xy = r3.xz * r4.xz + -r0.zw;
  r0.z = 1 / r5.x;
  r0.w = r4.y * r3.z;
  r5.z = r3.x * r4.w + -r0.w;
  r0.zw = r5.yz * r0.zz;
  r0.zw = max(float2(-0.25,-0.25), r0.zw);
  r0.zw = min(float2(0.25,0.25), r0.zw);
  r2.y = r0.x;
  r2.xy = r2.xy * r1.ww;
  r0.x = 0;
  r1.w = 0;
   
  while (true) {
    r2.z = cmp((int)r1.w >= 4);
    if (r2.z != 0) break;
    r2.z = (uint)r1.w << 1;
    r3.xy = g_FilterTaps[r2.z].xy * r2.yx;
    r2.w = dot(r3.xy, r0.zw);
    r3.xy = g_FilterTaps[r2.z].xy * r2.yx + r1.xy;
    r2.z = r2.w + r1.z;
    r2.z = TMU1_SMSampler.SampleCmpLevelZero(TMU1_SMSampler_sampler_s, r3.xy, r2.z).x;
    r2.z = r2.z + r0.x;
    r2.w = mad((int)r1.w, 2, 1);
    r3.xy = g_FilterTaps[r2.w].xy * r2.xy;
    r3.x = dot(r3.xy, r0.zw);
    r3.yz = g_FilterTaps[r2.w].xy * r2.xy + r1.xy;
    r2.w = r3.x + r1.z;
    r2.w = TMU1_SMSampler.SampleCmpLevelZero(TMU1_SMSampler_sampler_s, r3.yz, r2.w).x;
    r0.x = r2.z + r2.w;
    r1.w = (int)r1.w + 1;
  }


  
  o0.xyzw = r0.xxxx * float4(0.125,0.125,0.125,0.125) + r0.yyyy;
  

  
  return;
}

