// border
// ---- Created with geo-11 v0.7.11 on Fri Nov  6 23:18:02 2026

cbuffer _Params : register(b0)
{
  float4x4 wvpMat : packoffset(c0);
  float Time : packoffset(c4);
  float numTilesU : packoffset(c4.y);
  float numTilesV : packoffset(c4.z);
  float animSPeed : packoffset(c4.w);
  float4 animStart : packoffset(c5);
  float animType : packoffset(c6);
  float textureDimensionsX : packoffset(c6.y);
  float textureDimensionsY : packoffset(c6.z);
}



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

void main(
  float4 v0 : POSITION0,
  float2 v1 : TEXCOORD0,
  out float4 o0 : SV_POSITION0,
  out float2 o1 : TEXCOORD0)
{
  float4 r0,r1;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.xyzw = wvpMat._m01_m11_m21_m31 * v0.yyyy;
  r0.xyzw = wvpMat._m00_m10_m20_m30 * v0.xxxx + r0.xyzw;
  r0.xyzw = wvpMat._m02_m12_m22_m32 * v0.zzzz + r0.xyzw;
  o0.xyzw = wvpMat._m03_m13_m23_m33 * v0.wwww + r0.xyzw;
  
  float4 stereo = StereoParams.Load(0);
  float4 depthMultiplier = IniParams.Load(int2(20,0));
  o0.x -= stereo.x * depthMultiplier.z;
  
  r0.x = animStart.x + Time;
  r0.x = max(0, r0.x);
  r0.x = animSPeed * r0.x;
  r0.y = cmp(r0.x >= -r0.x);
  r0.z = frac(abs(r0.x));
  r0.y = r0.y ? r0.z : -r0.z;
  r0.z = min(0.999989986, r0.x);
  r0.x = 0.5 * r0.x;
  r1.xy = cmp(animType == float2(1,2));
  r0.y = r1.x ? r0.z : r0.y;
  r0.z = cmp(r0.x >= -r0.x);
  r0.x = frac(abs(r0.x));
  r0.x = r0.z ? r0.x : -r0.x;
  r0.x = r0.x * 2 + -1;
  r0.z = numTilesU * numTilesV;
  r0.w = 1 / r0.z;
  r1.x = 1 + -r0.w;
  r0.w = 0.5 * r0.w;
  r0.x = abs(r0.x) * r1.x + r0.w;
  r0.x = 1 + -r0.x;
  r0.x = r1.y ? r0.x : r0.y;
  r0.x = r0.z * r0.x;
  r0.x = floor(r0.x);
  r0.y = numTilesU * r0.x;
  r0.y = cmp(r0.y >= -r0.y);
  r0.y = r0.y ? numTilesU : -numTilesU;
  r0.z = 1 / r0.y;
  r0.z = r0.x * r0.z;
  r0.x = r0.x / numTilesU;
  r0.x = floor(r0.x);
  r0.x = v1.y + r0.x;
  r0.x = r0.x / numTilesV;
  o1.y = textureDimensionsY * r0.x;
  r0.x = frac(r0.z);
  r0.x = r0.y * r0.x;
  r0.x = floor(r0.x);
  r0.x = v1.x + r0.x;
  r0.x = r0.x / numTilesU;
  o1.x = textureDimensionsX * r0.x;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 10.1
//
//   using 3Dmigoto v0.7.11 on Fri Nov  6 23:18:02 2026
//
//
// Buffer Definitions:
//
// cbuffer $Params
// {
//
//   float4x4 wvpMat;                   // Offset:    0 Size:    64
//   float Time;                        // Offset:   64 Size:     4
//   float numTilesU;                   // Offset:   68 Size:     4
//   float numTilesV;                   // Offset:   72 Size:     4
//   float animSPeed;                   // Offset:   76 Size:     4
//   float4 animStart;                  // Offset:   80 Size:    16
//   float animType;                    // Offset:   96 Size:     4
//   float textureDimensionsX;          // Offset:  100 Size:     4
//   float textureDimensionsY;          // Offset:  104 Size:     4
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// $Params                           cbuffer      NA          NA    0        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION                 0   xyzw        0     NONE   float   xyzw
// TEXCOORD                 0   xy          1     NONE   float   xy
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION              0   xyzw        0      POS   float   xyzw
// TEXCOORD                 0   xy          1     NONE   float   xy
//
vs_4_0
dcl_constantbuffer CB0[7], immediateIndexed
dcl_input v0.xyzw
dcl_input v1.xy
dcl_output_siv o0.xyzw, position
dcl_output o1.xy
dcl_temps 2
mul r0.xyzw, v0.yyyy, cb0[1].xyzw
mad r0.xyzw, cb0[0].xyzw, v0.xxxx, r0.xyzw
mad r0.xyzw, cb0[2].xyzw, v0.zzzz, r0.xyzw
mad o0.xyzw, cb0[3].xyzw, v0.wwww, r0.xyzw
add r0.x, cb0[4].x, cb0[5].x
max r0.x, r0.x, l(0.000000)
mul r0.x, r0.x, cb0[4].w
ge r0.y, r0.x, -r0.x
frc r0.z, |r0.x|
movc r0.y, r0.y, r0.z, -r0.z
min r0.z, r0.x, l(0.999990)
mul r0.x, r0.x, l(0.500000)
eq r1.xy, cb0[6].xxxx, l(1.000000, 2.000000, 0.000000, 0.000000)
movc r0.y, r1.x, r0.z, r0.y
ge r0.z, r0.x, -r0.x
frc r0.x, |r0.x|
movc r0.x, r0.z, r0.x, -r0.x
mad r0.x, r0.x, l(2.000000), l(-1.000000)
mul r0.z, cb0[4].z, cb0[4].y
div r0.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.z
add r1.x, -r0.w, l(1.000000)
mul r0.w, r0.w, l(0.500000)
mad r0.x, |r0.x|, r1.x, r0.w
add r0.x, -r0.x, l(1.000000)
movc r0.x, r1.y, r0.x, r0.y
mul r0.x, r0.x, r0.z
round_ni r0.x, r0.x
mul r0.y, r0.x, cb0[4].y
ge r0.y, r0.y, -r0.y
movc r0.y, r0.y, cb0[4].y, -cb0[4].y
div r0.z, l(1.000000, 1.000000, 1.000000, 1.000000), r0.y
mul r0.z, r0.z, r0.x
div r0.x, r0.x, cb0[4].y
round_ni r0.x, r0.x
add r0.x, r0.x, v1.y
div r0.x, r0.x, cb0[4].z
mul o1.y, r0.x, cb0[6].z
frc r0.x, r0.z
mul r0.x, r0.x, r0.y
round_ni r0.x, r0.x
add r0.x, r0.x, v1.x
div r0.x, r0.x, cb0[4].y
mul o1.x, r0.x, cb0[6].y
ret
// Approximately 44 instruction slots used

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