//AoE3
// ---- Created with 3Dmigoto v1.2.56 on Fri Sep 15 00:18:01 2017

cbuffer _Globals : register(b0)
{
  float4 VPtoRTScaleBias : packoffset(c0);
  float4 SightProperties : packoffset(c1);
  float2 WorldPositionOffset : packoffset(c2);
  float2 AiGridWorldPositionOffset : packoffset(c2.z);
  float3 SightSneakTextureInfo : packoffset(c3);
  float3 HeightTextureInfo : packoffset(c4);
  float2 Weights : packoffset(c5);
}

cbuffer PerView : register(b12)
{
  row_major float4x4 global_View : packoffset(c0);
  row_major float4x4 global_Projection : packoffset(c4);
  row_major float4x4 global_ViewProjection : packoffset(c8);
  float4 global_ViewPos : packoffset(c12);
  float4 global_ViewInfo : packoffset(c13);
  float4 global_ScaleAndBias : packoffset(c14);
}

SamplerState LinearClampSampler_s : register(s0);
SamplerState PointWrapSampler_s : register(s1);
Texture2D<float4> Base : register(t0);
Texture2D<float4> LinearDepth : register(t1);
Texture2D<float4> Base4 : register(t2);
Texture2D<float4> Base5 : register(t3);
Texture2D<float4> Base7 : register(t4);


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

void main( 
  float4 v0 : SV_Position0,
  float2 v1 : TexCoord0,
  float3 v2 : TexCoord1,
  out float4 o0 : SV_Target0)
{
  float4 r0,r1,r2,r3,r4,r5;
  uint4 bitmask, uiDest;
  float4 fDest;
 
  
  r0.xyz = Base.Sample(LinearClampSampler_s, v1.xy).xyz;
  r0.w = LinearDepth.Sample(PointWrapSampler_s, v1.xy).x;
  r1.x = cmp(r0.w < 1);
  if (r1.x != 0) {
    r1.xyz = r0.www * v2.xyz + global_ViewPos.xyz;
	
//r1 is a world coord.  Needs correcting in Proj space
//CORRECT WORLD COORD
float4 s = StereoParams.Load(0);
float4 r25;
r1.w = 1;
r25 = mul(global_ViewProjection, r1);  
r25.x -= s.x * (r25.w - s.y); 
r1 = mul(inverse(global_ViewProjection), r25); 
	
    // r2.xyzw = -WorldPositionOffset.xyzw + r1.xzxz;
r2.xy = -WorldPositionOffset.xy + r1.xz;
r2.zw = -AiGridWorldPositionOffset.xy + r1.xz;	
	
    r2.xy = r2.xy / SightSneakTextureInfo.zz;
    r2.xy = r2.xy / SightSneakTextureInfo.xy;
    r2.zw = r2.zw / HeightTextureInfo.zz;
    r2.zw = r2.zw / HeightTextureInfo.xy;
    r2.zw = Base7.SampleLevel(LinearClampSampler_s, r2.zw, 0).xy;
    r0.w = r2.z + -r1.y;
    r0.w = min(1, abs(r0.w));
    r0.w = -0.200000003 + r0.w;
    r0.w = saturate(r0.w + r0.w);
    r1.y = r0.w * -2 + 3;
    r0.w = r0.w * r0.w;
    r0.w = -r1.y * r0.w + 1;
    r1.yw = cmp(float2(0,0) < Weights.xy);
    if (r1.y != 0) {
      r3.xyz = Base4.SampleLevel(LinearClampSampler_s, r2.xy, 0).xyw;
      r3.xy = ceil(r3.yx);
      r1.y = r3.x + -r3.y;
      r2.z = saturate(dot(r0.xyz, float3(0.300000012,0.589999974,0.109999999)));
      r2.z = log2(r2.z);
      r2.z = 0.699999988 * r2.z;
      r2.z = exp2(r2.z);
      r3.x = 1 + -SightProperties.w;
      r4.xyz = r2.zzz * float3(0.699999988,0.699999988,0.699999988) + -r0.xyz;
      r3.xyw = r3.xxx * r4.xyz + r0.xyz;
      r4.xyzw = float4(1.5,1.5,1.5,1.5) * r1.xzxz;
      r4.xyzw = frac(r4.xyzw);
      r1.xz = cmp(float2(0.5,0.5) >= r4.zw);
      r1.xz = r1.xz ? float2(1,1) : 0;
      r4.xyzw = cmp(r4.xyzw >= float4(0.25,0.25,0.75,0.75));
      r4.xy = r4.xy ? float2(1,1) : 0;
      r1.xz = r4.xy * r1.xz;
      r1.x = r1.x + r1.z;
      r4.xy = r4.zw ? float2(-1,-1) : float2(-0,-0);
      r1.x = r4.x + r1.x;
      r1.x = saturate(r1.x + r4.y);
      r1.z = SightProperties.w * 0.225000009 + 0.075000003;
      r4.xyz = SightProperties.xyz + -r0.xyz;
      r4.xyz = r1.zzz * r4.xyz + r0.xyz;
      r5.xyz = float3(0.400000006,0.800000012,0.200000003) + -r0.xyz;
      r5.xyz = r5.xyz * float3(0.400000006,0.400000006,0.400000006) + r0.xyz;
      r1.x = r1.y * r1.x;
      r5.xyz = r5.xyz + -r4.xyz;
      r1.xyz = r1.xxx * r5.xyz + r4.xyz;
      r1.xyz = r1.xyz + -r0.xyz;
      r1.xyz = r0.www * r1.xyz + r0.xyz;
      r2.z = cmp(r3.z >= 0.430000007);
      r2.z = r2.z ? 1.000000 : 0;
      r4.x = cmp(0.569999993 >= r3.z);
      r4.x = r4.x ? 1.000000 : 0;
      r2.z = r4.x * r2.z;
      r4.x = saturate(2.32558131 * r3.z);
      r4.y = r4.x * -2 + 3;
      r4.x = r4.x * r4.x;
      r4.x = r4.y * r4.x;
      r4.y = -0.670000017 + r3.z;
      r4.y = saturate(-9.99999809 * r4.y);
      r4.z = r4.y * -2 + 3;
      r4.y = r4.y * r4.y;
      r4.y = r4.z * r4.y;
      r4.x = saturate(r4.x * r4.y + -r2.z);
      r1.xyz = r1.xyz + -r3.xyw;
      r1.xyz = r3.zzz * r1.xyz + r3.xyw;
      r3.x = r4.x * r0.w;
      r3.x = 0.5 * r3.x;
      r1.xyz = r3.xxx * -r1.xyz + r1.xyz;
      r2.z = r2.z * r0.w;
      r2.z = 0.699999988 * r2.z;
      r3.xyz = SightProperties.xyz + -r1.xyz;
      r1.xyz = r2.zzz * r3.xyz + r1.xyz;
      r1.xyz = r1.xyz + -r0.xyz;
      r0.xyz = Weights.xxx * r1.xyz + r0.xyz;
    }
    if (r1.w != 0) {
      r1.x = Base5.SampleLevel(LinearClampSampler_s, r2.xy, 0).x;
      r1.y = r1.x + r1.x;
      r1.y = saturate(r1.y);
      r1.z = r1.y * r2.w;
      r2.xyz = float3(0.800000012,0.100000001,0.100000001) + -r0.xyz;
      r3.xyz = r2.xyz * float3(0.400000006,0.400000006,0.400000006) + r0.xyz;
      r2.xyz = r2.xyz * float3(0.150000006,0.150000006,0.150000006) + r0.xyz;
      r1.x = saturate(r1.x * 2 + -1);
      r1.x = -0.400000006 + r1.x;
      r1.x = saturate(4.99999952 * r1.x);
      r1.w = r1.x * -2 + 3;
      r1.x = r1.x * r1.x;
      r1.x = r1.w * r1.x;
      r3.xyz = r3.xyz + -r2.xyz;
      r2.xyz = r1.xxx * r3.xyz + r2.xyz;
      r2.xyz = r2.xyz + -r0.xyz;
      r2.xyz = r2.xyz * r0.www;
      r1.x = cmp(r1.z >= 0.430000007);
      r1.w = cmp(0.569999993 >= r1.z);
      r1.xw = r1.xw ? float2(1,1) : 0;
      r1.x = r1.x * r1.w;
      r1.w = saturate(2.32558131 * r1.z);
      r3.x = r1.w * -2 + 3;
      r1.w = r1.w * r1.w;
      r1.w = r3.x * r1.w;
      r1.y = r1.y * r2.w + -0.670000017;
      r1.y = saturate(-9.99999809 * r1.y);
      r2.w = r1.y * -2 + 3;
      r1.y = r1.y * r1.y;
      r1.y = r2.w * r1.y;
      r1.y = saturate(r1.w * r1.y + -r1.x);
      r2.xyz = r1.zzz * r2.xyz + r0.xyz;
      r1.y = r1.y * r0.w;
      r1.y = 0.5 * r1.y;
      r1.yzw = r1.yyy * -r2.xyz + r2.xyz;
      r0.w = r1.x * r0.w;
      r0.w = 0.699999988 * r0.w;
      r2.xyz = float3(0.800000012,0.100000001,0.100000001) + -r1.yzw;
      r1.xyz = r0.www * r2.xyz + r1.yzw;
      r1.xyz = r1.xyz + -r0.xyz;
      r0.xyz = Weights.yyy * r1.xyz + r0.xyz;
    }
  }
  o0.xyz = r0.xyz;
  o0.w = 1;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Original ASM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 6.3.9600.16384
//
//
// Buffer Definitions: 
//
// cbuffer $Globals
// {
//
//   float4 VPtoRTScaleBias;            // Offset:    0 Size:    16 [unused]
//   float4 SightProperties;            // Offset:   16 Size:    16
//   float2 WorldPositionOffset;        // Offset:   32 Size:     8
//   float2 AiGridWorldPositionOffset;  // Offset:   40 Size:     8
//   float3 SightSneakTextureInfo;      // Offset:   48 Size:    12
//   float3 HeightTextureInfo;          // Offset:   64 Size:    12
//   float2 Weights;                    // Offset:   80 Size:     8
//
// }
//
// cbuffer PerView
// {
//
//   row_major float4x4 global_View;    // Offset:    0 Size:    64 [unused]
//   row_major float4x4 global_Projection;// Offset:   64 Size:    64 [unused]
//   row_major float4x4 global_ViewProjection;// Offset:  128 Size:    64 [unused]
//   float4 global_ViewPos;             // Offset:  192 Size:    16
//   float4 global_ViewInfo;            // Offset:  208 Size:    16 [unused]
//   float4 global_ScaleAndBias;        // Offset:  224 Size:    16 [unused]
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// LinearClampSampler                sampler      NA          NA    0        1
// PointWrapSampler                  sampler      NA          NA    1        1
// Base                              texture  float4          2d    0        1
// LinearDepth                       texture  float4          2d    1        1
// Base4                             texture  float4          2d    2        1
// Base5                             texture  float4          2d    3        1
// Base7                             texture  float4          2d    4        1
// $Globals                          cbuffer      NA          NA    0        1
// PerView                           cbuffer      NA          NA   12        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float       
// TexCoord                 0   xy          1     NONE   float   xy  
// TexCoord                 1   xyz         2     NONE   float   xyz 
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
//
ps_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer cb0[6], immediateIndexed
dcl_constantbuffer cb12[13], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texture2d (float,float,float,float) t2
dcl_resource_texture2d (float,float,float,float) t3
dcl_resource_texture2d (float,float,float,float) t4
dcl_input_ps linear v1.xy
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 6
sample_indexable(texture2d)(float,float,float,float) r0.xyz, v1.xyxx, t0.xyzw, s0
sample_indexable(texture2d)(float,float,float,float) r0.w, v1.xyxx, t1.yzwx, s1
lt r1.x, r0.w, l(1.000000)
if_nz r1.x
  mad r1.xyz, r0.wwww, v2.xyzx, cb12[12].xyzx
  add r2.xyzw, r1.xzxz, -cb0[2].xyzw
  div r2.xy, r2.xyxx, cb0[3].zzzz
  div r2.xy, r2.xyxx, cb0[3].xyxx
  div r2.zw, r2.zzzw, cb0[4].zzzz
  div r2.zw, r2.zzzw, cb0[4].xxxy
  sample_l_indexable(texture2d)(float,float,float,float) r2.zw, r2.zwzz, t4.zwxy, s0, l(0.000000)
  add r0.w, -r1.y, r2.z
  min r0.w, |r0.w|, l(1.000000)
  add r0.w, r0.w, l(-0.200000)
  add_sat r0.w, r0.w, r0.w
  mad r1.y, r0.w, l(-2.000000), l(3.000000)
  mul r0.w, r0.w, r0.w
  mad r0.w, -r1.y, r0.w, l(1.000000)
  lt r1.yw, l(0.000000, 0.000000, 0.000000, 0.000000), cb0[5].xxxy
  if_nz r1.y
    sample_l_indexable(texture2d)(float,float,float,float) r3.xyz, r2.xyxx, t2.xywz, s0, l(0.000000)
    round_pi r3.xy, r3.yxyy
    add r1.y, -r3.y, r3.x
    dp3_sat r2.z, r0.xyzx, l(0.300000, 0.590000, 0.110000, 0.000000)
    log r2.z, r2.z
    mul r2.z, r2.z, l(0.700000)
    exp r2.z, r2.z
    add r3.x, -cb0[1].w, l(1.000000)
    mad r4.xyz, r2.zzzz, l(0.700000, 0.700000, 0.700000, 0.000000), -r0.xyzx
    mad r3.xyw, r3.xxxx, r4.xyxz, r0.xyxz
    mul r4.xyzw, r1.xzxz, l(1.500000, 1.500000, 1.500000, 1.500000)
    frc r4.xyzw, r4.xyzw
    ge r1.xz, l(0.500000, 0.000000, 0.500000, 0.000000), r4.zzwz
    and r1.xz, r1.xxzx, l(0x3f800000, 0, 0x3f800000, 0)
    ge r4.xyzw, r4.xyzw, l(0.250000, 0.250000, 0.750000, 0.750000)
    and r4.xy, r4.xyxx, l(0x3f800000, 0x3f800000, 0, 0)
    mul r1.xz, r1.xxzx, r4.xxyx
    add r1.x, r1.z, r1.x
    movc r4.xy, r4.zwzz, l(-1.000000,-1.000000,0,0), l(-0.000000,-0.000000,0,0)
    add r1.x, r1.x, r4.x
    add_sat r1.x, r4.y, r1.x
    mad r1.z, cb0[1].w, l(0.225000), l(0.075000)
    add r4.xyz, -r0.xyzx, cb0[1].xyzx
    mad r4.xyz, r1.zzzz, r4.xyzx, r0.xyzx
    add r5.xyz, -r0.xyzx, l(0.400000, 0.800000, 0.200000, 0.000000)
    mad r5.xyz, r5.xyzx, l(0.400000, 0.400000, 0.400000, 0.000000), r0.xyzx
    mul r1.x, r1.x, r1.y
    add r5.xyz, -r4.xyzx, r5.xyzx
    mad r1.xyz, r1.xxxx, r5.xyzx, r4.xyzx
    add r1.xyz, -r0.xyzx, r1.xyzx
    mad r1.xyz, r0.wwww, r1.xyzx, r0.xyzx
    ge r2.z, r3.z, l(0.430000)
    and r2.z, r2.z, l(0x3f800000)
    ge r4.x, l(0.570000), r3.z
    and r4.x, r4.x, l(0x3f800000)
    mul r2.z, r2.z, r4.x
    mul_sat r4.x, r3.z, l(2.325581)
    mad r4.y, r4.x, l(-2.000000), l(3.000000)
    mul r4.x, r4.x, r4.x
    mul r4.x, r4.x, r4.y
    add r4.y, r3.z, l(-0.670000)
    mul_sat r4.y, r4.y, l(-9.999998)
    mad r4.z, r4.y, l(-2.000000), l(3.000000)
    mul r4.y, r4.y, r4.y
    mul r4.y, r4.y, r4.z
    mad_sat r4.x, r4.x, r4.y, -r2.z
    add r1.xyz, -r3.xywx, r1.xyzx
    mad r1.xyz, r3.zzzz, r1.xyzx, r3.xywx
    mul r3.x, r0.w, r4.x
    mul r3.x, r3.x, l(0.500000)
    mad r1.xyz, r3.xxxx, -r1.xyzx, r1.xyzx
    mul r2.z, r0.w, r2.z
    mul r2.z, r2.z, l(0.700000)
    add r3.xyz, -r1.xyzx, cb0[1].xyzx
    mad r1.xyz, r2.zzzz, r3.xyzx, r1.xyzx
    add r1.xyz, -r0.xyzx, r1.xyzx
    mad r0.xyz, cb0[5].xxxx, r1.xyzx, r0.xyzx
  endif 
  if_nz r1.w
    sample_l_indexable(texture2d)(float,float,float,float) r1.x, r2.xyxx, t3.xyzw, s0, l(0.000000)
    add r1.y, r1.x, r1.x
    mov_sat r1.y, r1.y
    mul r1.z, r2.w, r1.y
    add r2.xyz, -r0.xyzx, l(0.800000, 0.100000, 0.100000, 0.000000)
    mad r3.xyz, r2.xyzx, l(0.400000, 0.400000, 0.400000, 0.000000), r0.xyzx
    mad r2.xyz, r2.xyzx, l(0.150000, 0.150000, 0.150000, 0.000000), r0.xyzx
    mad_sat r1.x, r1.x, l(2.000000), l(-1.000000)
    add r1.x, r1.x, l(-0.400000)
    mul_sat r1.x, r1.x, l(5.000000)
    mad r1.w, r1.x, l(-2.000000), l(3.000000)
    mul r1.x, r1.x, r1.x
    mul r1.x, r1.x, r1.w
    add r3.xyz, -r2.xyzx, r3.xyzx
    mad r2.xyz, r1.xxxx, r3.xyzx, r2.xyzx
    add r2.xyz, -r0.xyzx, r2.xyzx
    mul r2.xyz, r0.wwww, r2.xyzx
    ge r1.x, r1.z, l(0.430000)
    ge r1.w, l(0.570000), r1.z
    and r1.xw, r1.xxxw, l(0x3f800000, 0, 0, 0x3f800000)
    mul r1.x, r1.w, r1.x
    mul_sat r1.w, r1.z, l(2.325581)
    mad r3.x, r1.w, l(-2.000000), l(3.000000)
    mul r1.w, r1.w, r1.w
    mul r1.w, r1.w, r3.x
    mad r1.y, r1.y, r2.w, l(-0.670000)
    mul_sat r1.y, r1.y, l(-9.999998)
    mad r2.w, r1.y, l(-2.000000), l(3.000000)
    mul r1.y, r1.y, r1.y
    mul r1.y, r1.y, r2.w
    mad_sat r1.y, r1.w, r1.y, -r1.x
    mad r2.xyz, r1.zzzz, r2.xyzx, r0.xyzx
    mul r1.y, r0.w, r1.y
    mul r1.y, r1.y, l(0.500000)
    mad r1.yzw, r1.yyyy, -r2.xxyz, r2.xxyz
    mul r0.w, r0.w, r1.x
    mul r0.w, r0.w, l(0.700000)
    add r2.xyz, -r1.yzwy, l(0.800000, 0.100000, 0.100000, 0.000000)
    mad r1.xyz, r0.wwww, r2.xyzx, r1.yzwy
    add r1.xyz, -r0.xyzx, r1.xyzx
    mad r0.xyz, cb0[5].yyyy, r1.xyzx, r0.xyzx
  endif 
endif 
mov o0.xyz, r0.xyzx
mov o0.w, l(1.000000)
ret 
// Approximately 125 instruction slots used

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


/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HLSL errors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
F:\SteamLibrary\SteamApps\common\Divinity Original Sin 2\bin\ShaderCache\623a463cb6a7ecd2-ps_replace.txt(54,16-39): error X3018: invalid subscript 'xyzw'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
