// ---- Created with 3Dmigoto v1.3.11 on Tue Sep 04 18:07:16 2018

cbuffer _Globals : register(b0)
{
  float4 VPtoRTScaleBias : packoffset(c0);
  float4 ShroudTextureInfo : packoffset(c1);
  float3 RegionTextureInfo : packoffset(c2);
  float Region : packoffset(c2.w);
  float2 WorldPositionOffset : packoffset(c3);
}

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 PointWrapSampler_s : register(s0);
SamplerState LinearClampSampler_s : register(s1);
SamplerState PointClampSampler_s : register(s2);
Texture2D<float4> Base : register(t0);
Texture2D<float4> LinearDepth : register(t1);
Texture2D<float4> Base3 : register(t2);
Texture2D<float4> Base6 : register(t3);


// 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;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.xyz = Base.Sample(LinearClampSampler_s, v1.xy).xyz;
  r1.z = LinearDepth.Sample(PointWrapSampler_s, v1.xy).x;
  r0.w = cmp(r1.z < 1);
  if (r0.w != 0) {
    r2.xy = -VPtoRTScaleBias.zw * global_ViewInfo.zw + v0.xy;
    r2.z = global_ViewInfo.w + -r2.y;
    r2.xy = r2.xz / global_ViewInfo.zw;
    r1.xy = r2.xy * float2(2,2) + float2(-1,-1);
    r1.xyz = v2.xyz * r1.xyz;
    r1.yw = global_View._m10_m12 * r1.yy;
    r1.xy = r1.xx * global_View._m00_m02 + r1.yw;
    r1.xy = r1.zz * global_View._m20_m22 + r1.xy;
    //r1.xy = global_ViewPos.xz + r1.xy;
    

float4 s = StereoParams.Load(0);
float4 r20, r25;
r20.xyz = global_ViewPos.xyz + r1.xyw;
r20.w = 1.0;
r25 = mul(global_ViewProjection, r20);  
r20 = mul(inverse(global_ViewProjection), r25);
r1.xy = r20.xy;  



    r0.w = cmp(0 < ShroudTextureInfo.w);
    if (r0.w != 0) {
      r1.zw = -WorldPositionOffset.xy + r1.xy;
      r1.zw = r1.zw / ShroudTextureInfo.zz;
      r1.zw = r1.zw / ShroudTextureInfo.xy;
      r0.w = Base3.SampleLevel(LinearClampSampler_s, r1.zw, 0).x;
      r0.xyz = r0.xyz * r0.www;
    }
    r1.xy = -WorldPositionOffset.xy + r1.xy;
    r1.xy = r1.xy / RegionTextureInfo.zz;
    r1.xy = r1.xy / RegionTextureInfo.xy;
    r0.w = Base6.SampleLevel(PointClampSampler_s, r1.xy, 0).x;
    r0.w = r0.w * 255 + -Region;
    r0.w = min(1, abs(r0.w));
    r0.w = 1 + -r0.w;
    r1.xyz = r0.xyz * r0.www;
  } else {
    r0.w = 1 + -ShroudTextureInfo.w;
    r1.xyz = r0.xyz * r0.www;
  }
  o0.xyz = r1.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
//   float4 ShroudTextureInfo;          // Offset:   16 Size:    16
//   float3 RegionTextureInfo;          // Offset:   32 Size:    12
//   float Region;                      // Offset:   44 Size:     4
//   float2 WorldPositionOffset;        // Offset:   48 Size:     8
//
// }
//
// cbuffer PerView
// {
//
//   row_major float4x4 global_View;    // Offset:    0 Size:    64
//   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
//   float4 global_ScaleAndBias;        // Offset:  224 Size:    16 [unused]
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// PointWrapSampler                  sampler      NA          NA    0        1
// LinearClampSampler                sampler      NA          NA    1        1
// PointClampSampler                 sampler      NA          NA    2        1
// Base                              texture  float4          2d    0        1
// LinearDepth                       texture  float4          2d    1        1
// Base3                             texture  float4          2d    2        1
// Base6                             texture  float4          2d    3        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   xy  
// 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[4], immediateIndexed
dcl_constantbuffer cb12[14], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, 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_input_ps_siv linear noperspective v0.xy, position
dcl_input_ps linear v1.xy
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 3
sample_indexable(texture2d)(float,float,float,float) r0.xyz, v1.xyxx, t0.xyzw, s1
sample_indexable(texture2d)(float,float,float,float) r1.z, v1.xyxx, t1.yzxw, s0
lt r0.w, r1.z, l(1.000000)
if_nz r0.w
  mad r2.xy, -cb0[0].zwzz, cb12[13].zwzz, v0.xyxx
  add r2.z, -r2.y, cb12[13].w
  div r2.xy, r2.xzxx, cb12[13].zwzz
  mad r1.xy, r2.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000)
  mul r1.xyz, r1.xyzx, v2.xyzx
  mul r1.yw, r1.yyyy, cb12[1].xxxz
  mad r1.xy, r1.xxxx, cb12[0].xzxx, r1.ywyy
  mad r1.xy, r1.zzzz, cb12[2].xzxx, r1.xyxx
  add r1.xy, r1.xyxx, cb12[12].xzxx
  lt r0.w, l(0.000000), cb0[1].w
  if_nz r0.w
    add r1.zw, r1.xxxy, -cb0[3].xxxy
    div r1.zw, r1.zzzw, cb0[1].zzzz
    div r1.zw, r1.zzzw, cb0[1].xxxy
    sample_l_indexable(texture2d)(float,float,float,float) r0.w, r1.zwzz, t2.yzwx, s1, l(0.000000)
    mul r0.xyz, r0.wwww, r0.xyzx
  endif 
  add r1.xy, r1.xyxx, -cb0[3].xyxx
  div r1.xy, r1.xyxx, cb0[2].zzzz
  div r1.xy, r1.xyxx, cb0[2].xyxx
  sample_l_indexable(texture2d)(float,float,float,float) r0.w, r1.xyxx, t3.yzwx, s2, l(0.000000)
  mad r0.w, r0.w, l(255.000000), -cb0[2].w
  min r0.w, |r0.w|, l(1.000000)
  add r0.w, -r0.w, l(1.000000)
  mul r1.xyz, r0.wwww, r0.xyzx
else 
  add r0.w, -cb0[1].w, l(1.000000)
  mul r1.xyz, r0.wwww, r0.xyzx
endif 
mov o0.xyz, r1.xyzx
mov o0.w, l(1.000000)
ret 
// Approximately 36 instruction slots used

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