//Geometry VS 3. Lighting.
// ---- Created with 3Dmigoto v0.6.181 on Tue Aug 27 18:40:46 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 fogParam : packoffset(c15);
  float4 fogColor : packoffset(c16);
}



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


void main(
  float4 v0 : POSITION0,
  float4 v1 : COLOR0,
  out float4 o0 : SV_POSITION0,
  out float4 o1 : COLOR0,
  out float4 o2 : COLOR1,
  out float o3 : RATIO0)
{
  float4 r0,r1;
  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.x = dot(r1.xyzw, Projection._m02_m12_m22_m32);
  o0.z = r0.x;
  r0.x = r0.x * 0.540540516 + -fogParam.z;
  o0.x = dot(r1.xyzw, Projection._m00_m10_m20_m30);
  o0.y = dot(r1.xyzw, Projection._m01_m11_m21_m31);
  o0.w = dot(r1.xyzw, Projection._m03_m13_m23_m33);
  
  
  
  o1.xyzw = Color.xyzw + v1.xyzw;
  o2.xyzw = fogColor.xyzw;
  r0.y = r0.x / fogParam.y;
  r0.x = cmp(0 < r0.x);
  r0.z = cmp(r0.y < 31);
  r0.y = 0.0322580636 * r0.y;
  
  //o0.x+=stereo.x*(o0.w-stereo.y*-3*(o0.z-0.45));
  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));
  }
  
  //o0.x+=stereo.x*(o0.w-stereo.y/r0.y);
  
  r0.y = r0.z ? r0.y : 1;
  r0.x = r0.x ? r0.y : 0;
  r0.y = cmp(0 != fogParam.x);
  o3.x = r0.x ? r0.y : 0;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 10.1
//
//   using 3Dmigoto v0.6.181 on Tue Aug 27 18:40:46 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 [unused]
//   float4 lightVector;                // Offset:  224 Size:    16 [unused]
//   float4 fogParam;                   // Offset:  240 Size:    16
//   float4 fogColor;                   // Offset:  256 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
// COLOR                    0   xyzw        1     NONE   float   xyzw
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION              0   xyzw        0      POS   float   xyzw
// COLOR                    0   xyzw        1     NONE   float   xyzw
// COLOR                    1   xyzw        2     NONE   float   xyzw
// RATIO                    0   x           3     NONE   float   x
//
vs_4_0
dcl_constantbuffer CB0[17], immediateIndexed
dcl_input v0.xyzw
dcl_input v1.xyzw
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyzw
dcl_output o3.x
dcl_temps 2
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
dp4 r0.x, r1.xyzw, cb0[10].xyzw
mov o0.z, r0.x
mad r0.x, r0.x, l(0.540540516), -cb0[15].z
dp4 o0.x, r1.xyzw, cb0[8].xyzw
dp4 o0.y, r1.xyzw, cb0[9].xyzw
dp4 o0.w, r1.xyzw, cb0[11].xyzw
add o1.xyzw, v1.xyzw, cb0[12].xyzw
mov o2.xyzw, cb0[16].xyzw
div r0.y, r0.x, cb0[15].y
lt r0.x, l(0.000000), r0.x
lt r0.z, r0.y, l(31.000000)
mul r0.y, r0.y, l(0.0322580636)
movc r0.y, r0.z, r0.y, l(1.000000)
and r0.x, r0.y, r0.x
ne r0.y, l(0.000000, 0.000000, 0.000000, 0.000000), cb0[15].x
and o3.x, r0.x, r0.y
ret
// Approximately 25 instruction slots used

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