//Geometry VS 5- Fat travel in Order of Ecclesia.
// ---- Created with 3Dmigoto v0.6.181 on Sat Aug 31 00:31:04 2024

cbuffer _Globals : register(b0)
{
  float4x4 World : packoffset(c0);
  float4x4 View : packoffset(c4);
  float4x4 Projection : packoffset(c8);
  float4 Color : packoffset(c12);
  float4 lightColor : packoffset(c13);
  float4 lightVector : packoffset(c14);
  float4 eyePosition : packoffset(c15);
}



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


void main(
  float4 v0 : POSITION0,
  float4 v1 : NORMAL0,
  float4 v2 : COLOR0,
  float2 v3 : TEXCOORD0,
  out float4 o0 : SV_POSITION0,
  out float2 o1 : TEXCOORD0,
  out float4 o2 : COLOR0,
  out float4 o3 : COLOR1,
  out float4 o4 : COLOR2)
{
  float4 r0,r1,r2,r3;
  uint4 bitmask, uiDest;
  float4 fDest;
  
  float4 stereo = StereoParams.Load(0);
  float4 iniparams10 = IniParams.Load(int2(10,0));
  
  r0.x = dot(v0.xyzw, World._m00_m10_m20_m30);
  r0.y = dot(v0.xyzw, World._m01_m11_m21_m31);
  r0.z = dot(v0.xyzw, World._m02_m12_m22_m32);
  r0.w = dot(v0.xyzw, World._m03_m13_m23_m33);
  r1.x = dot(r0.xyzw, View._m00_m10_m20_m30);
  r1.y = dot(r0.xyzw, View._m01_m11_m21_m31);
  r1.z = dot(r0.xyzw, View._m02_m12_m22_m32);
  r1.w = dot(r0.xyzw, View._m03_m13_m23_m33);
  r0.xyzw = eyePosition.xyzw + -r0.xyzw;
  o0.x = dot(r1.xyzw, Projection._m00_m10_m20_m30);
  o0.y = dot(r1.xyzw, Projection._m01_m11_m21_m31);
  o0.z = dot(r1.xyzw, Projection._m02_m12_m22_m32);
  o0.w = dot(r1.xyzw, Projection._m03_m13_m23_m33);
  
  if (o0.w==1 && iniparams10.x==1) {
    //o0.x+=stereo.x*(o0.w-stereo.y*-0.625*(o0.z-1));
	o0.x+=stereo.x*(o0.w+stereo.y-stereo.y*0.5/(o0.z));
  } else if (o0.w==1 && iniparams10.x==2) {
    o0.x+=stereo.x*(o0.w-stereo.y*-4*(o0.z-0.825));
  }
  
  o1.xy = v3.xy;
  o2.xyzw = Color.xyzw * v2.xyzw;
  r1.x = dot(v1.xyz, World._m00_m10_m20);
  r1.y = dot(v1.xyz, World._m01_m11_m21);
  r1.z = dot(v1.xyz, World._m02_m12_m22);
  r1.w = dot(r1.xyz, r1.xyz);
  r1.w = rsqrt(r1.w);
  r1.xyz = r1.xyz * r1.www;
  r1.w = dot(lightVector.xyzw, lightVector.xyzw);
  r1.w = rsqrt(r1.w);
  r2.xyz = lightVector.xyz * r1.www;
  r1.w = dot(r1.xyz, r2.xyz);
  r3.xyz = saturate(r1.www);
  r3.w = 1;
  o3.xyzw = lightColor.xyzw * r3.xyzw;
  r0.w = dot(r0.xyzw, r0.xyzw);
  r0.w = rsqrt(r0.w);
  r0.xyz = r0.xyz * r0.www + r2.xyz;
  r0.w = dot(r0.xyz, r0.xyz);
  r0.w = rsqrt(r0.w);
  r0.xyz = r0.xyz * r0.www;
  r0.x = dot(r1.xyz, r0.xyz);
  o4.xyz = max(float3(0,0,0), r0.xxx);
  o4.w = 1;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 10.1
//
//   using 3Dmigoto v0.6.181 on Sat Aug 31 00:31:04 2024
//
//
// Buffer Definitions:
//
// cbuffer $Globals
// {
//
//   float4x4 World;                    // Offset:    0 Size:    64
//   float4x4 View;                     // Offset:   64 Size:    64
//   float4x4 Projection;               // Offset:  128 Size:    64
//   float4 Color;                      // Offset:  192 Size:    16
//   float4 lightColor;                 // Offset:  208 Size:    16
//   float4 lightVector;                // Offset:  224 Size:    16
//   float4 eyePosition;                // Offset:  240 Size:    16
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// $Globals                          cbuffer      NA          NA    0        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION                 0   xyzw        0     NONE   float   xyzw
// NORMAL                   0   xyzw        1     NONE   float   xyz
// COLOR                    0   xyzw        2     NONE   float   xyzw
// TEXCOORD                 0   xy          3     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
// COLOR                    0   xyzw        2     NONE   float   xyzw
// COLOR                    1   xyzw        3     NONE   float   xyzw
// COLOR                    2   xyzw        4     NONE   float   xyzw
//
vs_4_0
dcl_constantbuffer CB0[16], immediateIndexed
dcl_input v0.xyzw
dcl_input v1.xyz
dcl_input v2.xyzw
dcl_input v3.xy
dcl_output_siv o0.xyzw, position
dcl_output o1.xy
dcl_output o2.xyzw
dcl_output o3.xyzw
dcl_output o4.xyzw
dcl_temps 4
dp4 r0.x, v0.xyzw, cb0[0].xyzw
dp4 r0.y, v0.xyzw, cb0[1].xyzw
dp4 r0.z, v0.xyzw, cb0[2].xyzw
dp4 r0.w, v0.xyzw, cb0[3].xyzw
dp4 r1.x, r0.xyzw, cb0[4].xyzw
dp4 r1.y, r0.xyzw, cb0[5].xyzw
dp4 r1.z, r0.xyzw, cb0[6].xyzw
dp4 r1.w, r0.xyzw, cb0[7].xyzw
add r0.xyzw, -r0.xyzw, cb0[15].xyzw
dp4 o0.x, r1.xyzw, cb0[8].xyzw
dp4 o0.y, r1.xyzw, cb0[9].xyzw
dp4 o0.z, r1.xyzw, cb0[10].xyzw
dp4 o0.w, r1.xyzw, cb0[11].xyzw
mov o1.xy, v3.xyxx
mul o2.xyzw, v2.xyzw, cb0[12].xyzw
dp3 r1.x, v1.xyzx, cb0[0].xyzx
dp3 r1.y, v1.xyzx, cb0[1].xyzx
dp3 r1.z, v1.xyzx, cb0[2].xyzx
dp3 r1.w, r1.xyzx, r1.xyzx
rsq r1.w, r1.w
mul r1.xyz, r1.wwww, r1.xyzx
dp4 r1.w, cb0[14].xyzw, cb0[14].xyzw
rsq r1.w, r1.w
mul r2.xyz, r1.wwww, cb0[14].xyzx
dp3 r1.w, r1.xyzx, r2.xyzx
mov_sat r3.xyz, r1.wwww
mov r3.w, l(1.000000)
mul o3.xyzw, r3.xyzw, cb0[13].xyzw
dp4 r0.w, r0.xyzw, r0.xyzw
rsq r0.w, r0.w
mad r0.xyz, r0.xyzx, r0.wwww, r2.xyzx
dp3 r0.w, r0.xyzx, r0.xyzx
rsq r0.w, r0.w
mul r0.xyz, r0.wwww, r0.xyzx
dp3 r0.x, r1.xyzx, r0.xyzx
max o4.xyz, r0.xxxx, l(0.000000, 0.000000, 0.000000, 0.000000)
mov o4.w, l(1.000000)
ret
// Approximately 38 instruction slots used

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