//shadows advanded
// ---- Created with 3Dmigoto v0.6.164 on Fri Oct 23 08:32:45 2026

cbuffer ShadowApplyConstants : register(b10)
{
  row_major float4x4 g_xLightClipSpaceToCameraClipSpace : packoffset(c0);
  row_major float4x4 g_xCameraViewSpaceToLightClipSpace : packoffset(c4);
  row_major float4x4 g_xCameraViewSpaceToLightViewSpace : packoffset(c8);
  row_major float4x4 g_xCameraViewSpaceToWorldSpace : packoffset(c12);
  row_major float4x4 g_xUVXForm : packoffset(c16);
  float4 g_xLightPos : packoffset(c20);
  float4 g_xShadowDirection : packoffset(c21);
  float4 g_xSelfShadowBias : packoffset(c22);
  float4 g_xShadowTextureSize : packoffset(c23);
  float g_fTwoOverScreenWidth : packoffset(c24);
  float g_fTwoOverScreenHeight : packoffset(c24.y);
  float g_fCameraTanHalfHorizFOV : packoffset(c24.z);
  float g_fCameraTanHalfVertFOV : packoffset(c24.w);
  bool g_bUseNoise : packoffset(c25);
  float g_fShadowFilterTextureScale : packoffset(c25.y);
  float g_fShadowFilterSize : packoffset(c25.z);
  float g_fShadowStrength : packoffset(c25.w);
  bool g_bCreatingShadowMask : packoffset(c26);
  float g_fShadowFrustumNearPlaneDistance : packoffset(c26.y);
  float g_fOneOverShadowFrustumPlaneSeparation : packoffset(c26.z);
}

SamplerState g_xFilteredWrap_s : register(s4);
SamplerComparisonState g_ShadowCmpSam_s : register(s6);
Texture2D<float4> g_xKernelRotationTexture : register(t50);
Texture2D<float4> g_xNormalDepthTexture : register(t51);
Texture2D<float4> g_xShadowMapTexture : register(t52);


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


void main(
  float4 v0 : SV_Position0,
  out float4 o0 : SV_Target0)
{
  const float4 icb[] = { { -0.326212, -0.405805, 0, 0},
                              { -0.840144, -0.073580, 0, 0},
                              { -0.695914, 0.457137, 0, 0},
                              { -0.203345, 0.620716, 0, 0},
                              { 0.962340, -0.194983, 0, 0},
                              { 0.473434, -0.480026, 0, 0},
                              { 0.519456, 0.767022, 0, 0},
                              { 0.185461, -0.893124, 0, 0},
                              { 0.507431, 0.064425, 0, 0},
                              { 0.896420, 0.412458, 0, 0},
                              { -0.321940, -0.932615, 0, 0},
                              { -0.791559, -0.597705, 0, 0} };
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.xy = (int2)v0.xy;
  r0.zw = float2(0,0);
  r0.xyz = g_xNormalDepthTexture.Load(r0.xyz).xyz;
  r0.w = dot(r0.xy, r0.xy);
  r0.w = 1 + -r0.w;
  r0.w = sqrt(abs(r0.w));
  r1.x = cmp(0 < r0.z);
  r1.z = r1.x ? r0.w : -r0.w;
  r2.xy = g_fCameraTanHalfHorizFOV * abs(r0.zz);
  r2.zw = v0.xy * g_fTwoOverScreenWidth + float2(-1,-1);
  
float4 s = StereoParams.Load(0);  
float4 testeo = IniParams.Load(int2(90,0));  
r2.z -= s.x * (1 - s.y / abs(r0.w));  
  
  r2.xy = r2.xy * r2.zw;
  r3.xyzw = g_xCameraViewSpaceToLightClipSpace._m10_m11_m12_m13 * r2.yyyy;
  r3.xyzw = r2.xxxx * g_xCameraViewSpaceToLightClipSpace._m00_m01_m02_m03 + r3.xyzw;
  r3.xyzw = abs(r0.zzzz) * g_xCameraViewSpaceToLightClipSpace._m20_m21_m22_m23 + r3.xyzw;
  r3.xyzw = g_xCameraViewSpaceToLightClipSpace._m30_m31_m32_m33 + r3.xyzw;
  r4.x = dot(g_xUVXForm._m00_m01_m02_m03, r3.xyzw);
  r4.y = dot(g_xUVXForm._m10_m11_m12_m13, r3.xyzw);
  r4.z = dot(g_xUVXForm._m20_m21_m22_m23, r3.xyzw);
  r0.w = dot(g_xUVXForm._m30_m31_m32_m33, r3.xyzw);
  r3.xyz = r4.xyz / r0.www;
  r4.xyz = cmp(r3.xyz < float3(0,0,0));
  r0.w = (int)r4.y | (int)r4.x;
  r0.w = (int)r4.z | (int)r0.w;
  if (r0.w != 0) discard;
  r4.xyz = float3(1,1,1) + -r3.xyz;
  r4.xyz = cmp(r4.xyz < float3(0,0,0));
  r0.w = (int)r4.y | (int)r4.x;
  r0.w = (int)r4.z | (int)r0.w;
  if (r0.w != 0) discard;
  r0.w = g_xCameraViewSpaceToLightViewSpace._m12 * r2.y;
  r0.w = r2.x * g_xCameraViewSpaceToLightViewSpace._m02 + r0.w;
  r0.z = abs(r0.z) * g_xCameraViewSpaceToLightViewSpace._m22 + r0.w;
  r0.z = g_xCameraViewSpaceToLightViewSpace._m32 + r0.z;
  r0.z = -g_bCreatingShadowMask + r0.z;
  r0.w = g_bCreatingShadowMask * r0.z;
  r1.xy = r0.xy;
  r0.x = saturate(dot(g_xShadowDirection.xyz, r1.xyz));
  r0.y = 1 + -r0.x;
  r0.y = r0.y * g_xSelfShadowBias.x + g_xSelfShadowBias.y;
  r0.y = r3.z * g_xSelfShadowBias.z + r0.y;
  r1.z = r3.z + -r0.y;
  r0.x = r0.x + r0.x;
  r0.x = min(1, r0.x);
  r0.y = saturate(r0.w * 2 + -1);
  r0.y = r0.y * 2 + g_bUseNoise;
  r0.y = max(0.200000003, r0.y);
  r2.x = g_bUseNoise * r0.y;
  if (g_bUseNoise != 0) {
    r3.w = 1 + -r3.y;
    r0.yw = float2(16,16) * r3.xw;
    r0.yw = g_xKernelRotationTexture.Sample(g_xFilteredWrap_s, r0.yw).yz;
    r0.yw = r0.yw * float2(2,2) + float2(-1,-1);
    r0.yw = r0.yw * r2.xx;
    r3.zw = float2(64,64) * r3.xw;
    r3.zw = g_xKernelRotationTexture.Sample(g_xFilteredWrap_s, r3.zw).yz;
    r3.zw = r3.zw * float2(2,2) + float2(-1,-1);
    r3.zw = r3.zw * r2.xx;
    r3.zw = float2(0.330000013,0.330000013) * r3.zw;
    r2.xy = r0.yw * float2(0.660000026,0.660000026) + r3.zw;
  } else {
    r2.y = 0;
  }
  r2.z = -r2.x;
  r1.xy = r3.xy * float2(1,-1) + float2(1.40129846e-45,1);
  r3.z = 0;
  r0.yw = float2(0,0);
  while (true) {
    r1.w = cmp((int)r0.w >= 12);
    if (r1.w != 0) break;
    r3.x = dot(icb[r0.w+0].xy, r2.xy);
    r3.y = dot(icb[r0.w+0].xy, r2.yz);
    r3.xyw = r3.xyz + r1.xyz;
    r4.xyzw = g_xShadowTextureSize.yxxx * r3.yxxx + float4(0.5,0.5,0.5,0.5);
    r3.xy = floor(r4.wx);
    r4.xyzw = r4.xyzw + -r3.yxxx;
    r3.xy = g_xShadowTextureSize.zw * r3.xy;
    r5.xyzw = g_xShadowMapTexture.GatherCmp(g_ShadowCmpSam_s, r3.xy, r3.w, int2(-1,-1)).xyzw;
    r6.xyzw = float4(1,1,2,3) + -r4.xyzw;
    r7.xyzw = r6.yzyz * r5.wzxy;
    r4.yz = r7.xz + r7.yw;
    r7.xyzw = g_xShadowMapTexture.GatherCmp(g_ShadowCmpSam_s, r3.xy, r3.w, int2(1,-1)).xyzw;
    r8.xyz = float3(1,1,2) + r4.www;
    r1.w = r8.z * r7.x;
    r5.zw = r7.zy * r4.ww;
    r7.xy = r7.wx * r8.yy + r5.zw;
    r2.w = r7.x * r6.x;
    r2.w = r6.x * r4.y + r2.w;
    r4.y = r7.y * r4.x;
    r4.y = r4.x * r4.z + r4.y;
    r7.xyzw = g_xShadowMapTexture.GatherCmp(g_ShadowCmpSam_s, r3.xy, r3.w, int2(-1,1)).xyzw;
    r9.xyzw = r7.wzxy * r6.yzyz;
    r6.yz = r9.xz + r9.yw;
    r2.w = r6.x * r6.y + r2.w;
    r4.y = r4.x * r6.z + r4.y;
    r4.z = -r4.w * 2 + 2;
    r5.y = r6.w * r5.y;
    r5.x = r5.x * r4.z + r5.y;
    r5.y = r7.z * r6.w;
    r4.z = r7.w * r4.z + r5.y;
    r7.xyzw = g_xShadowMapTexture.GatherCmp(g_ShadowCmpSam_s, r3.xy, r3.w, int2(1,1)).xyzw;
    r3.x = r7.w * r8.z;
    r3.yw = r7.zy * r4.ww;
    r5.yz = r7.wx * r8.xy + r3.yw;
    r7.x = r6.x * r5.y + r2.w;
    r7.y = r4.x * r5.z + r4.y;
    r1.w = r5.w * 2 + r1.w;
    r1.w = r6.x * r1.w;
    r7.z = r6.x * r5.x + r1.w;
    r1.w = r3.y * 2 + r3.x;
    r1.w = r4.x * r1.w;
    r7.w = r4.x * r4.z + r1.w;
    r1.w = dot(r7.xyzw, float4(1,1,1,1));
    r0.y = r1.w * 0.0666666701 + r0.y;
    r0.w = (int)r0.w + 1;
  }
  r0.y = g_bUseNoise * r0.y;
  r0.z = -r0.z * g_bCreatingShadowMask + 1;
  r0.y = 0.0833333358 * r0.y;
  r0.z = saturate(r0.y * r0.z);
  r0.x = r0.z * r0.x;
  o0.w = saturate(g_bCreatingShadowMask ? r0.y : r0.x);
  o0.xyz = float3(0,0,0);
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.27.952.3022
//
//   using 3Dmigoto v0.6.164 on Fri Oct 23 08:32:45 2026
//
//
// Buffer Definitions:
//
// cbuffer ShadowApplyConstants
// {
//
//   row_major float4x4 g_xLightClipSpaceToCameraClipSpace;// Offset:    0 Size:    64 [unused]
//   row_major float4x4 g_xCameraViewSpaceToLightClipSpace;// Offset:   64 Size:    64
//   row_major float4x4 g_xCameraViewSpaceToLightViewSpace;// Offset:  128 Size:    64
//   row_major float4x4 g_xCameraViewSpaceToWorldSpace;// Offset:  192 Size:    64 [unused]
//   row_major float4x4 g_xUVXForm;     // Offset:  256 Size:    64
//   float4 g_xLightPos;                // Offset:  320 Size:    16 [unused]
//   float4 g_xShadowDirection;         // Offset:  336 Size:    16
//   float4 g_xSelfShadowBias;          // Offset:  352 Size:    16
//   float4 g_xShadowTextureSize;       // Offset:  368 Size:    16
//   float g_fTwoOverScreenWidth;       // Offset:  384 Size:     4
//   float g_fTwoOverScreenHeight;      // Offset:  388 Size:     4
//   float g_fCameraTanHalfHorizFOV;    // Offset:  392 Size:     4
//   float g_fCameraTanHalfVertFOV;     // Offset:  396 Size:     4
//   bool g_bUseNoise;                  // Offset:  400 Size:     4
//   float g_fShadowFilterTextureScale; // Offset:  404 Size:     4
//   float g_fShadowFilterSize;         // Offset:  408 Size:     4
//   float g_fShadowStrength;           // Offset:  412 Size:     4
//   bool g_bCreatingShadowMask;        // Offset:  416 Size:     4
//   float g_fShadowFrustumNearPlaneDistance;// Offset:  420 Size:     4
//   float g_fOneOverShadowFrustumPlaneSeparation;// Offset:  424 Size:     4
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// g_xFilteredWrap                   sampler      NA          NA    4        1
// g_ShadowCmpSam                  sampler_c      NA          NA    6        1
// g_xKernelRotationTexture          texture  float4          2d   50        1
// g_xNormalDepthTexture             texture  float4          2d   51        1
// g_xShadowMapTexture               texture  float4          2d   52        1
// ShadowApplyConstants              cbuffer      NA          NA   10        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float   xy
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
//
ps_5_0
dcl_globalFlags refactoringAllowed
dcl_immediateConstantBuffer { { -0.326212, -0.405805, 0, 0},
                              { -0.840144, -0.073580, 0, 0},
                              { -0.695914, 0.457137, 0, 0},
                              { -0.203345, 0.620716, 0, 0},
                              { 0.962340, -0.194983, 0, 0},
                              { 0.473434, -0.480026, 0, 0},
                              { 0.519456, 0.767022, 0, 0},
                              { 0.185461, -0.893124, 0, 0},
                              { 0.507431, 0.064425, 0, 0},
                              { 0.896420, 0.412458, 0, 0},
                              { -0.321940, -0.932615, 0, 0},
                              { -0.791559, -0.597705, 0, 0} }
dcl_constantbuffer CB10[27], immediateIndexed
dcl_sampler s4, mode_default
dcl_sampler s6, mode_comparison
dcl_resource_texture2d (float,float,float,float) t50
dcl_resource_texture2d (float,float,float,float) t51
dcl_resource_texture2d (float,float,float,float) t52
dcl_input_ps_siv linear noperspective v0.xy, position
dcl_output o0.xyzw
dcl_temps 10
ftoi r0.xy, v0.xyxx
mov r0.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r0.xyz, r0.xyzw, t51.xyzw
dp2 r0.w, r0.xyxx, r0.xyxx
add r0.w, -r0.w, l(1.000000)
sqrt r0.w, |r0.w|
lt r1.x, l(0.000000), r0.z
movc r1.z, r1.x, r0.w, -r0.w
mul r2.xy, |r0.zzzz|, cb10[24].zwzz
mad r2.zw, v0.xxxy, cb10[24].xxxy, l(0.000000, 0.000000, -1.000000, -1.000000)
mul r2.xy, r2.zwzz, r2.xyxx
mul r3.xyzw, r2.yyyy, cb10[5].xyzw
mad r3.xyzw, r2.xxxx, cb10[4].xyzw, r3.xyzw
mad r3.xyzw, |r0.zzzz|, cb10[6].xyzw, r3.xyzw
add r3.xyzw, r3.xyzw, cb10[7].xyzw
dp4 r4.x, cb10[16].xyzw, r3.xyzw
dp4 r4.y, cb10[17].xyzw, r3.xyzw
dp4 r4.z, cb10[18].xyzw, r3.xyzw
dp4 r0.w, cb10[19].xyzw, r3.xyzw
div r3.xyz, r4.xyzx, r0.wwww
lt r4.xyz, r3.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
or r0.w, r4.y, r4.x
or r0.w, r4.z, r0.w
discard_nz r0.w
add r4.xyz, -r3.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
lt r4.xyz, r4.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
or r0.w, r4.y, r4.x
or r0.w, r4.z, r0.w
discard_nz r0.w
mul r0.w, r2.y, cb10[9].z
mad r0.w, r2.x, cb10[8].z, r0.w
mad r0.z, |r0.z|, cb10[10].z, r0.w
add r0.z, r0.z, cb10[11].z
add r0.z, r0.z, -cb10[26].y
mul r0.w, r0.z, cb10[26].z
mov r1.xy, r0.xyxx
dp3_sat r0.x, cb10[21].xyzx, r1.xyzx
add r0.y, -r0.x, l(1.000000)
mad r0.y, r0.y, cb10[22].x, cb10[22].y
mad r0.y, r3.z, cb10[22].z, r0.y
add r1.z, -r0.y, r3.z
add r0.x, r0.x, r0.x
min r0.x, r0.x, l(1.000000)
mad_sat r0.y, r0.w, l(2.000000), l(-1.000000)
mad r0.y, r0.y, l(2.000000), cb10[25].z
max r0.y, r0.y, l(0.200000)
mul r2.x, r0.y, cb10[25].y
if_nz cb10[25].x
  add r3.w, -r3.y, l(1.000000)
  mul r0.yw, r3.xxxw, l(0.000000, 16.000000, 0.000000, 16.000000)
  sample_indexable(texture2d)(float,float,float,float) r0.yw, r0.ywyy, t50.xywz, s4
  mad r0.yw, r0.yyyw, l(0.000000, 2.000000, 0.000000, 2.000000), l(0.000000, -1.000000, 0.000000, -1.000000)
  mul r0.yw, r2.xxxx, r0.yyyw
  mul r3.zw, r3.xxxw, l(0.000000, 0.000000, 64.000000, 64.000000)
  sample_indexable(texture2d)(float,float,float,float) r3.zw, r3.zwzz, t50.xwyz, s4
  mad r3.zw, r3.zzzw, l(0.000000, 0.000000, 2.000000, 2.000000), l(0.000000, 0.000000, -1.000000, -1.000000)
  mul r3.zw, r2.xxxx, r3.zzzw
  mul r3.zw, r3.zzzw, l(0.000000, 0.000000, 0.330000, 0.330000)
  mad r2.xy, r0.ywyy, l(0.660000, 0.660000, 0.000000, 0.000000), r3.zwzz
else
  mov r2.y, l(0)
endif
mov r2.z, -r2.x
mad r1.xy, r3.xyxx, l(1.000000, -1.000000, 0.000000, 0.000000), l(1.401298464E-45, 1.000000, 0.000000, 0.000000)
mov r3.z, l(0)
mov r0.yw, l(0,0,0,0)
loop
  ige r1.w, r0.w, l(12)
  breakc_nz r1.w
  dp2 r3.x, icb[r0.w + 0].xyxx, r2.xyxx
  dp2 r3.y, icb[r0.w + 0].xyxx, r2.yzyy
  add r3.xyw, r1.xyxz, r3.xyxz
  mad r4.xyzw, cb10[23].yxxx, r3.yxxx, l(0.500000, 0.500000, 0.500000, 0.500000)
  round_ni r3.xy, r4.wxww
  add r4.xyzw, -r3.yxxx, r4.xyzw
  mul r3.xy, r3.xyxx, cb10[23].zwzz
  gather4_c_aoffimmi_indexable(-1,-1,0)(texture2d)(float,float,float,float) r5.xyzw, r3.xyxx, t52.xyzw, s6.x, r3.w
  add r6.xyzw, -r4.xyzw, l(1.000000, 1.000000, 2.000000, 3.000000)
  mul r7.xyzw, r5.wzxy, r6.yzyz
  add r4.yz, r7.yywy, r7.xxzx
  gather4_c_aoffimmi_indexable(1,-1,0)(texture2d)(float,float,float,float) r7.xyzw, r3.xyxx, t52.xyzw, s6.x, r3.w
  add r8.xyz, r4.wwww, l(1.000000, 1.000000, 2.000000, 0.000000)
  mul r1.w, r7.x, r8.z
  mul r5.zw, r4.wwww, r7.zzzy
  mad r7.xy, r7.wxww, r8.yyyy, r5.zwzz
  mul r2.w, r6.x, r7.x
  mad r2.w, r6.x, r4.y, r2.w
  mul r4.y, r4.x, r7.y
  mad r4.y, r4.x, r4.z, r4.y
  gather4_c_aoffimmi_indexable(-1,1,0)(texture2d)(float,float,float,float) r7.xyzw, r3.xyxx, t52.xyzw, s6.x, r3.w
  mul r9.xyzw, r6.yzyz, r7.wzxy
  add r6.yz, r9.yywy, r9.xxzx
  mad r2.w, r6.x, r6.y, r2.w
  mad r4.y, r4.x, r6.z, r4.y
  mad r4.z, -r4.w, l(2.000000), l(2.000000)
  mul r5.y, r5.y, r6.w
  mad r5.x, r5.x, r4.z, r5.y
  mul r5.y, r6.w, r7.z
  mad r4.z, r7.w, r4.z, r5.y
  gather4_c_aoffimmi_indexable(1,1,0)(texture2d)(float,float,float,float) r7.xyzw, r3.xyxx, t52.xyzw, s6.x, r3.w
  mul r3.x, r8.z, r7.w
  mul r3.yw, r4.wwww, r7.zzzy
  mad r5.yz, r7.wwxw, r8.xxyx, r3.yywy
  mad r7.x, r6.x, r5.y, r2.w
  mad r7.y, r4.x, r5.z, r4.y
  mad r1.w, r5.w, l(2.000000), r1.w
  mul r1.w, r1.w, r6.x
  mad r7.z, r6.x, r5.x, r1.w
  mad r1.w, r3.y, l(2.000000), r3.x
  mul r1.w, r1.w, r4.x
  mad r7.w, r4.x, r4.z, r1.w
  dp4 r1.w, r7.xyzw, l(1.000000, 1.000000, 1.000000, 1.000000)
  mad r0.y, r1.w, l(0.0666666701), r0.y
  iadd r0.w, r0.w, l(1)
endloop
mul r0.y, r0.y, cb10[25].w
mad r0.z, -r0.z, cb10[26].z, l(1.000000)
mul r0.y, r0.y, l(0.0833333358)
mul_sat r0.z, r0.z, r0.y
mul r0.x, r0.x, r0.z
movc_sat o0.w, cb10[26].x, r0.y, r0.x
mov o0.xyz, l(0,0,0,0)
ret
// Approximately 123 instruction slots used

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