// hlsltool.py -I ../112 --auto-fix-vertex-halo --fix-unity-reflection --only-autofixed --no-validate --ignore-other-errors d1ad37a6ea0acf7a-vs_replace.txt
// 3DMigoto: d1ad37a6ea0acf7a | Matched 2 variants of 1 shaders: PlayWay Water/Depth/Water Depth
//
//       Unity headers extracted from Depth.shader
//       Shader "PlayWay Water/Depth/Water Depth" {
//         Properties {
//          _SubtractiveMask ("", 2D) = "black" { }
//          _AdditiveMask ("", 2D) = "black" { }
//          _DisplacedHeightMaps ("", 2D) = "black" { }
//          _WaterTileSize ("Heightmap Tile Size", Vector) = (180,18,600,1800)
//          _SurfaceOffset ("", Vector) = (0,0,0,0)
//          _WaterId ("", Vector) = (128,256,0,0)
//         }
//         SubShader 3/5 {
//           Tags { "CustomType"="Water" }
//           Pass 1/1 {
//             Tags { "CustomType"="Water" }
//             ZTest Less
//             Cull Off
//             GpuProgramID 134849
//             Program "vp" {
//               SubProgram "d3d11 " {
// 1:              GpuProgramIndex 197
// 2:              GpuProgramIndex 200
//               }
//             }
//           }
//         }
//       }
//
//    Unity 5.3 headers extracted from Depth.shader.decompressed:
//      API d3d11
//      Shader model vs_4_0
//      undeciphered1: 201509030 30 0 1
// 2:   Keywords { "_WAVES_GERSTNER" "_BOUNDED_WATER" }
// 1:   Keywords { "_WAVES_GERSTNER" }
//      undeciphered2: 1 0 4 0 0
//      undeciphered3: 1 1 0 0
//      ConstBuffer "$Globals" 1296
//      Float 128 [_DisplacementsScale]
//      Vector 224 [_SurfaceOffset]
//      Vector 256 [_GrAmp0]
//      Vector 272 [_GrAmp1]
//      Vector 288 [_GrAmp2]
//      Vector 304 [_GrAmp3]
//      Vector 320 [_GrAmp4]
//      Vector 336 [_GrFrq0]
//      Vector 352 [_GrFrq1]
//      Vector 368 [_GrFrq2]
//      Vector 384 [_GrFrq3]
//      Vector 400 [_GrFrq4]
//      Vector 416 [_GrOff0]
//      Vector 432 [_GrOff1]
//      Vector 448 [_GrOff2]
//      Vector 464 [_GrOff3]
//      Vector 480 [_GrOff4]
//      Vector 496 [_GrAB0]
//      Vector 512 [_GrAB1]
//      Vector 528 [_GrAB2]
//      Vector 544 [_GrAB3]
//      Vector 560 [_GrAB4]
//      Vector 576 [_GrCD0]
//      Vector 592 [_GrCD1]
//      Vector 608 [_GrCD2]
//      Vector 624 [_GrCD3]
//      Vector 640 [_GrCD4]
//      ConstBuffer "UnityPerCamera" 144
//      Vector 80 [_ProjectionParams]
//      ConstBuffer "UnityPerDraw" 352
//      Matrix 192 [_Object2World]
//      ConstBuffer "UnityPerFrame" 256
//      Matrix 144 [unity_MatrixVP]
//      BindCB "$Globals" 0
//      BindCB "UnityPerCamera" 1
//      BindCB "UnityPerDraw" 2
//      BindCB "UnityPerFrame" 3
//
// Headers extracted with DarkStarSword's extract_unity53_shaders.py
// https://raw.githubusercontent.com/DarkStarSword/3d-fixes/master/extract_unity53_shaders.py

// ---- Created with 3Dmigoto v1.2.38 on Thu Feb 09 12:33:41 2017
cbuffer cb3 : register(b3)
{
  float4 cb3[13];
}

cbuffer cb2 : register(b2)
{
  float4 cb2[16];
}

cbuffer cb1 : register(b1)
{
  float4 cb1[6];
}

cbuffer cb0 : register(b0)
{
  float4 cb0[40];
}




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


void main( 
  float4 v0 : POSITION0,
  out float4 o0 : SV_POSITION0,
  out float4 o1 : TEXCOORD0)
{
  float4 r0,r1,r2,r3,r4,r5,r6;
  uint4 bitmask, uiDest;
  float4 fDest;

float4 stereo = StereoParams.Load(0);
float separation = stereo.x, convergence = stereo.y, eye = stereo.z;

  r0.xyzw = cb2[13].xyzw * v0.yyyy;
  r0.xyzw = cb2[12].xyzw * v0.xxxx + r0.xyzw;
  r0.xyzw = cb2[14].xyzw * v0.zzzz + r0.xyzw;
  r0.xyzw = cb2[15].xyzw * v0.wwww + r0.xyzw;
  r1.xy = cb0[14].xz + r0.xz;
  r2.xyz = float3(0,0,0);
  r1.z = 0;
  while (true) {
    r1.w = cmp((int)r1.z >= 3);
    if (r1.w != 0) break;
    r3.x = dot(cb0[r1.z+31].xy, -r1.xy);
    r3.y = dot(cb0[r1.z+31].zw, -r1.xy);
    r3.z = dot(cb0[r1.z+36].xy, -r1.xy);
    r3.w = dot(cb0[r1.z+36].zw, -r1.xy);
    r3.xyzw = cb0[r1.z+21].xyzw * r3.xyzw + cb0[r1.z+26].xyzw;
    sincos(r3.xyzw, r3.xyzw, r4.xyzw);
    r1.w = dot(r3.xyzw, cb0[r1.z+16].xyzw);
    r2.y = r2.y + r1.w;
    r3.xyzw = cb0[r1.z+31].xyzw * cb0[r1.z+16].xxyy;
    r5.xyzw = cb0[r1.z+36].xzyw * cb0[r1.z+16].zwzw;
    r6.xy = r3.xz;
    r6.zw = r5.xy;
    r1.w = dot(r4.xyzw, r6.xyzw);
    r2.x = r2.x + r1.w;
    r5.xy = r3.yw;
    r1.w = dot(r4.xyzw, r5.xyzw);
    r2.z = r2.z + r1.w;
    r1.z = (int)r1.z + 1;
  }
  r2.xz = -cb0[8].xx * r2.xz;
  r0.xyz = r2.xyz * cb0[14].www + r0.xyz;
  r1.xyzw = cb3[10].xyzw * r0.yyyy;
  r1.xyzw = cb3[9].xyzw * r0.xxxx + r1.xyzw;
  r1.xyzw = cb3[11].xyzw * r0.zzzz + r1.xyzw;
  r0.xyzw = cb3[12].xyzw * r0.wwww + r1.xyzw;

o0.xyzw = r0.xyzw; // Relocated to here with hlsltool.py

// Automatic vertex shader halo fix inserted with DarkStarSword's hlsltool.py:
// hlsltool.py -I ../112 --auto-fix-vertex-halo --fix-unity-reflection --only-autofixed --no-validate --ignore-other-errors d1ad37a6ea0acf7a-vs_replace.txt
if (r0.w != 1.0) { r0.x += separation * (r0.w - convergence); }

  r1.xz = float2(0.5,0.5) * r0.xw;
  r1.y = cb1[5].x * r0.y;
  r1.w = 0.5 * r1.y;
  o1.xy = r1.xw + r1.zz;

  // o0.xyzw = r0.xyzw; // Relocated from here with hlsltool.py

  o1.zw = r0.zw;
  return;
}
