// Smoke ***

Texture2D<float4> DownsampledDepthTexture : register(t0);
Texture2D<float4> InputTextureNear : register(t1);
Texture2D<float4> InputTextureFar : register(t2);


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


void main( 
  float4 v0 : SV_Position0,
  out float4 o0 : SV_Target0,
  out float4 o1 : SV_Target1)
{
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.w = 1;
  r1.zw = float2(0,0);
  r2.xy = (int2)v0.xy;
  r3.xyzw = (int4)r2.xyxy + int4(-2,0,-3,0);
  r1.xy = r3.zw;
  r4.xyz = InputTextureNear.Load(r1.xyw).xyz;
  r5.xyz = InputTextureFar.Load(r1.xyz).xyz;
  r1.xy = DownsampledDepthTexture.Load(r1.xyw).xy;
  r4.w = r1.x;
  r5.w = r1.y;
  r2.zw = float2(0,0);
  r1.zw = DownsampledDepthTexture.Load(r2.xyw).xy;
  r6.xyzw = r1.xyxy + -r1.zzww;
  r1.xy = cmp(abs(r6.xz) < abs(r6.yw));
  r6.xyzw = r1.xxxx ? r4.xyzw : r5.xyzw;
  r4.xyzw = r1.yyyy ? r4.xyzw : r5.xyzw;
  r1.x = r6.w + -r1.z;
  r1.y = max(r6.w, r1.z);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r5.w = 1 + -r1.x;
  r5.xyz = r6.xyz * r5.www;
  r5.xyzw = r5.xyzw * float4(0.25,0.25,0.25,0.25) + float4(0,0,0,9.99999997e-007);
  r3.zw = float2(0,0);
  r6.xyz = InputTextureNear.Load(r3.xyw).xyz;
  r7.xyz = InputTextureFar.Load(r3.xyz).xyz;
  r1.xy = DownsampledDepthTexture.Load(r3.xyw).xy;
  r6.w = r1.x;
  r7.w = r1.y;
  r3.xyzw = r1.xyxy + -r1.zzww;
  r1.xy = cmp(abs(r3.xz) < abs(r3.yw));
  r3.xyzw = r1.xxxx ? r6.xyzw : r7.xyzw;
  r6.xyzw = r1.yyyy ? r6.xyzw : r7.xyzw;
  r1.x = r3.w + -r1.z;
  r1.y = max(r3.w, r1.z);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r7.w = 1 + -r1.x;
  r7.xyz = r7.www * r3.xyz;
  r3.xyzw = r7.xyzw * float4(0.5,0.5,0.5,0.5) + r5.xyzw;
  r5.xyzw = (int4)r2.xyxy + int4(1,0,-1,0);
  r7.xy = r5.zw;
  r7.zw = float2(0,0);
  r8.xyz = InputTextureNear.Load(r7.xyw).xyz;
  r9.xyz = InputTextureFar.Load(r7.xyz).xyz;
  r1.xy = DownsampledDepthTexture.Load(r7.xyw).xy;
  r8.w = r1.x;
  r9.w = r1.y;
  r7.xyzw = r1.xyxy + -r1.zzww;
  r1.xy = cmp(abs(r7.xz) < abs(r7.yw));
  r7.xyzw = r1.xxxx ? r8.xyzw : r9.xyzw;
  r8.xyzw = r1.yyyy ? r8.xyzw : r9.xyzw;
  r1.x = r7.w + -r1.z;
  r1.y = max(r7.w, r1.z);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r9.w = 1 + -r1.x;
  r9.xyz = r9.www * r7.xyz;
  r3.xyzw = r9.xyzw * float4(0.75,0.75,0.75,0.75) + r3.xyzw;
  r7.xyz = InputTextureNear.Load(r2.xyw).xyz;
  r9.xyz = InputTextureFar.Load(r2.xyz).xyz;
  r2.xyzw = (int4)r2.xyxy + int4(3,0,2,0);
  r1.x = r1.w + -r1.z;
  r1.x = cmp(-0 < abs(r1.x));
  r7.w = r1.z;
  r9.w = r1.w;
  r7.xyzw = r1.xxxx ? r7.xyzw : r9.xyzw;
  r1.x = r7.w + -r1.z;
  r1.y = max(r7.w, r1.z);
  r0.xyz = r7.xyz;
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r1.x = 1 + -r1.x;
  r0.xyzw = r0.xyzw * r1.xxxx + r3.xyzw;
  r5.zw = float2(0,0);
  r3.xyz = InputTextureNear.Load(r5.xyw).xyz;
  r7.xyz = InputTextureFar.Load(r5.xyz).xyz;
  r1.xy = DownsampledDepthTexture.Load(r5.xyw).xy;
  r3.w = r1.x;
  r7.w = r1.y;
  r5.xyzw = r1.xyxy + -r1.zzww;
  r1.xy = cmp(abs(r5.xz) < abs(r5.yw));
  r5.xyzw = r1.xxxx ? r3.xyzw : r7.xyzw;
  r3.xyzw = r1.yyyy ? r3.xyzw : r7.xyzw;
  r1.x = r5.w + -r1.z;
  r1.y = max(r5.w, r1.z);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r7.w = 1 + -r1.x;
  r7.xyz = r7.www * r5.xyz;
  r0.xyzw = r7.xyzw * float4(0.75,0.75,0.75,0.75) + r0.xyzw;
  r5.xy = r2.zw;
  r5.zw = float2(0,0);
  r7.xyz = InputTextureNear.Load(r5.xyw).xyz;
  r10.xyz = InputTextureFar.Load(r5.xyz).xyz;
  r1.xy = DownsampledDepthTexture.Load(r5.xyw).xy;
  r7.w = r1.x;
  r10.w = r1.y;
  r5.xyzw = r1.xyxy + -r1.zzww;
  r1.xy = cmp(abs(r5.xz) < abs(r5.yw));
  r5.xyzw = r1.xxxx ? r7.xyzw : r10.xyzw;
  r7.xyzw = r1.yyyy ? r7.xyzw : r10.xyzw;
  r1.x = r5.w + -r1.z;
  r1.y = max(r5.w, r1.z);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r10.w = 1 + -r1.x;
  r10.xyz = r10.www * r5.xyz;
  r0.xyzw = r10.xyzw * float4(0.5,0.5,0.5,0.5) + r0.xyzw;
  r2.zw = float2(0,0);
  r5.xyz = InputTextureNear.Load(r2.xyw).xyz;
  r10.xyz = InputTextureFar.Load(r2.xyz).xyz;
  r1.xy = DownsampledDepthTexture.Load(r2.xyw).xy;
  r5.w = r1.x;
  r10.w = r1.y;
  r2.xyzw = r1.xyxy + -r1.zzww;
  r1.xy = cmp(abs(r2.xz) < abs(r2.yw));
  r2.xyzw = r1.xxxx ? r5.xyzw : r10.xyzw;
  r5.xyzw = r1.yyyy ? r5.xyzw : r10.xyzw;
  r1.x = r2.w + -r1.z;
  r1.y = max(r2.w, r1.z);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r10.w = 1 + -r1.x;
  r10.xyz = r10.www * r2.xyz;
  r0.xyzw = r10.xyzw * float4(0.25,0.25,0.25,0.25) + r0.xyzw;
  o0.xyz = r0.xyz / r0.www;
  o0.w = r0.w;
  r0.x = r4.w + -r1.w;
  r0.y = max(r4.w, r1.w);
  r0.x = abs(r0.x) / r0.y;
  r0.x = saturate(r0.x + r0.x);
  r0.w = 1 + -r0.x;
  r0.xyz = r4.xyz * r0.www;
  r0.xyzw = r0.xyzw * float4(0.25,0.25,0.25,0.25) + float4(0,0,0,9.99999997e-007);
  r1.x = r6.w + -r1.w;
  r1.y = max(r6.w, r1.w);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r2.w = 1 + -r1.x;
  r2.xyz = r6.xyz * r2.www;
  r0.xyzw = r2.xyzw * float4(0.5,0.5,0.5,0.5) + r0.xyzw;
  r1.x = r8.w + -r1.w;
  r1.y = max(r8.w, r1.w);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r2.w = 1 + -r1.x;
  r2.xyz = r8.xyz * r2.www;
  r0.xyzw = r2.xyzw * float4(0.75,0.75,0.75,0.75) + r0.xyzw;
  r9.w = 1;
  r0.xyzw = r9.xyzw + r0.xyzw;
  r1.x = r3.w + -r1.w;
  r1.y = max(r3.w, r1.w);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r2.w = 1 + -r1.x;
  r2.xyz = r3.xyz * r2.www;
  r0.xyzw = r2.xyzw * float4(0.75,0.75,0.75,0.75) + r0.xyzw;
  r1.x = r7.w + -r1.w;
  r1.y = max(r7.w, r1.w);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r2.w = 1 + -r1.x;
  r2.xyz = r7.xyz * r2.www;
  r0.xyzw = r2.xyzw * float4(0.5,0.5,0.5,0.5) + r0.xyzw;
  r1.x = r5.w + -r1.w;
  r1.y = max(r5.w, r1.w);
  r1.x = abs(r1.x) / r1.y;
  r1.x = saturate(r1.x + r1.x);
  r1.w = 1 + -r1.x;
  r1.xyz = r5.xyz * r1.www;
  r0.xyzw = r1.xyzw * float4(0.25,0.25,0.25,0.25) + r0.xyzw;
  o1.xyz = r0.xyz / r0.www;
  o1.w = r0.w;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20546
//
//   using 3Dmigoto v1.2.57 on Tue Jun 06 22:36:31 2017
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// DownsampledDepthTexture           texture  float4          2d    0        1
// InputTextureNear                  texture  float4          2d    1        1
// InputTextureFar                   texture  float4          2d    2        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float   xy  
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
// SV_Target                1   xyzw        1   TARGET   float   xyzw
//
ps_5_0
dcl_globalFlags refactoringAllowed
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_input_ps_siv linear noperspective v0.xy, position
dcl_output o0.xyzw
dcl_output o1.xyzw
dcl_temps 11
mov r0.w, l(1.000000)
mov r1.zw, l(0,0,0,0)
ftoi r2.xy, v0.xyxx
iadd r3.xyzw, r2.xyxy, l(-2, 0, -3, 0)
mov r1.xy, r3.zwzz
ld_indexable(texture2d)(float,float,float,float) r4.xyz, r1.xyww, t1.xyzw
ld_indexable(texture2d)(float,float,float,float) r5.xyz, r1.xyzw, t2.xyzw
ld_indexable(texture2d)(float,float,float,float) r1.xy, r1.xyww, t0.xyzw
mov r4.w, r1.x
mov r5.w, r1.y
mov r2.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r1.zw, r2.xyww, t0.zwxy
add r6.xyzw, -r1.zzww, r1.xyxy
lt r1.xy, |r6.xzxx|, |r6.ywyy|
movc r6.xyzw, r1.xxxx, r4.xyzw, r5.xyzw
movc r4.xyzw, r1.yyyy, r4.xyzw, r5.xyzw
add r1.x, -r1.z, r6.w
max r1.y, r1.z, r6.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r5.w, -r1.x, l(1.000000)
mul r5.xyz, r5.wwww, r6.xyzx
mad r5.xyzw, r5.xyzw, l(0.250000, 0.250000, 0.250000, 0.250000), l(0.000000, 0.000000, 0.000000, 0.000001)
mov r3.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r6.xyz, r3.xyww, t1.xyzw
ld_indexable(texture2d)(float,float,float,float) r7.xyz, r3.xyzw, t2.xyzw
ld_indexable(texture2d)(float,float,float,float) r1.xy, r3.xyww, t0.xyzw
mov r6.w, r1.x
mov r7.w, r1.y
add r3.xyzw, -r1.zzww, r1.xyxy
lt r1.xy, |r3.xzxx|, |r3.ywyy|
movc r3.xyzw, r1.xxxx, r6.xyzw, r7.xyzw
movc r6.xyzw, r1.yyyy, r6.xyzw, r7.xyzw
add r1.x, -r1.z, r3.w
max r1.y, r1.z, r3.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r7.w, -r1.x, l(1.000000)
mul r7.xyz, r3.xyzx, r7.wwww
mad r3.xyzw, r7.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000), r5.xyzw
iadd r5.xyzw, r2.xyxy, l(1, 0, -1, 0)
mov r7.xy, r5.zwzz
mov r7.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r8.xyz, r7.xyww, t1.xyzw
ld_indexable(texture2d)(float,float,float,float) r9.xyz, r7.xyzw, t2.xyzw
ld_indexable(texture2d)(float,float,float,float) r1.xy, r7.xyww, t0.xyzw
mov r8.w, r1.x
mov r9.w, r1.y
add r7.xyzw, -r1.zzww, r1.xyxy
lt r1.xy, |r7.xzxx|, |r7.ywyy|
movc r7.xyzw, r1.xxxx, r8.xyzw, r9.xyzw
movc r8.xyzw, r1.yyyy, r8.xyzw, r9.xyzw
add r1.x, -r1.z, r7.w
max r1.y, r1.z, r7.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r9.w, -r1.x, l(1.000000)
mul r9.xyz, r7.xyzx, r9.wwww
mad r3.xyzw, r9.xyzw, l(0.750000, 0.750000, 0.750000, 0.750000), r3.xyzw
ld_indexable(texture2d)(float,float,float,float) r7.xyz, r2.xyww, t1.xyzw
ld_indexable(texture2d)(float,float,float,float) r9.xyz, r2.xyzw, t2.xyzw
iadd r2.xyzw, r2.xyxy, l(3, 0, 2, 0)
add r1.x, -r1.z, r1.w
lt r1.x, l(-0.000000), |r1.x|
mov r7.w, r1.z
mov r9.w, r1.w
movc r7.xyzw, r1.xxxx, r7.xyzw, r9.xyzw
add r1.x, -r1.z, r7.w
max r1.y, r1.z, r7.w
mov r0.xyz, r7.xyzx
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r1.x, -r1.x, l(1.000000)
mad r0.xyzw, r0.xyzw, r1.xxxx, r3.xyzw
mov r5.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r3.xyz, r5.xyww, t1.xyzw
ld_indexable(texture2d)(float,float,float,float) r7.xyz, r5.xyzw, t2.xyzw
ld_indexable(texture2d)(float,float,float,float) r1.xy, r5.xyww, t0.xyzw
mov r3.w, r1.x
mov r7.w, r1.y
add r5.xyzw, -r1.zzww, r1.xyxy
lt r1.xy, |r5.xzxx|, |r5.ywyy|
movc r5.xyzw, r1.xxxx, r3.xyzw, r7.xyzw
movc r3.xyzw, r1.yyyy, r3.xyzw, r7.xyzw
add r1.x, -r1.z, r5.w
max r1.y, r1.z, r5.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r7.w, -r1.x, l(1.000000)
mul r7.xyz, r5.xyzx, r7.wwww
mad r0.xyzw, r7.xyzw, l(0.750000, 0.750000, 0.750000, 0.750000), r0.xyzw
mov r5.xy, r2.zwzz
mov r5.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r7.xyz, r5.xyww, t1.xyzw
ld_indexable(texture2d)(float,float,float,float) r10.xyz, r5.xyzw, t2.xyzw
ld_indexable(texture2d)(float,float,float,float) r1.xy, r5.xyww, t0.xyzw
mov r7.w, r1.x
mov r10.w, r1.y
add r5.xyzw, -r1.zzww, r1.xyxy
lt r1.xy, |r5.xzxx|, |r5.ywyy|
movc r5.xyzw, r1.xxxx, r7.xyzw, r10.xyzw
movc r7.xyzw, r1.yyyy, r7.xyzw, r10.xyzw
add r1.x, -r1.z, r5.w
max r1.y, r1.z, r5.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r10.w, -r1.x, l(1.000000)
mul r10.xyz, r5.xyzx, r10.wwww
mad r0.xyzw, r10.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000), r0.xyzw
mov r2.zw, l(0,0,0,0)
ld_indexable(texture2d)(float,float,float,float) r5.xyz, r2.xyww, t1.xyzw
ld_indexable(texture2d)(float,float,float,float) r10.xyz, r2.xyzw, t2.xyzw
ld_indexable(texture2d)(float,float,float,float) r1.xy, r2.xyww, t0.xyzw
mov r5.w, r1.x
mov r10.w, r1.y
add r2.xyzw, -r1.zzww, r1.xyxy
lt r1.xy, |r2.xzxx|, |r2.ywyy|
movc r2.xyzw, r1.xxxx, r5.xyzw, r10.xyzw
movc r5.xyzw, r1.yyyy, r5.xyzw, r10.xyzw
add r1.x, -r1.z, r2.w
max r1.y, r1.z, r2.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r10.w, -r1.x, l(1.000000)
mul r10.xyz, r2.xyzx, r10.wwww
mad r0.xyzw, r10.xyzw, l(0.250000, 0.250000, 0.250000, 0.250000), r0.xyzw
div o0.xyz, r0.xyzx, r0.wwww
mov o0.w, r0.w
add r0.x, -r1.w, r4.w
max r0.y, r1.w, r4.w
div r0.x, |r0.x|, r0.y
add_sat r0.x, r0.x, r0.x
add r0.w, -r0.x, l(1.000000)
mul r0.xyz, r0.wwww, r4.xyzx
mad r0.xyzw, r0.xyzw, l(0.250000, 0.250000, 0.250000, 0.250000), l(0.000000, 0.000000, 0.000000, 0.000001)
add r1.x, -r1.w, r6.w
max r1.y, r1.w, r6.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r2.w, -r1.x, l(1.000000)
mul r2.xyz, r2.wwww, r6.xyzx
mad r0.xyzw, r2.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000), r0.xyzw
add r1.x, -r1.w, r8.w
max r1.y, r1.w, r8.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r2.w, -r1.x, l(1.000000)
mul r2.xyz, r2.wwww, r8.xyzx
mad r0.xyzw, r2.xyzw, l(0.750000, 0.750000, 0.750000, 0.750000), r0.xyzw
mov r9.w, l(1.000000)
add r0.xyzw, r0.xyzw, r9.xyzw
add r1.x, -r1.w, r3.w
max r1.y, r1.w, r3.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r2.w, -r1.x, l(1.000000)
mul r2.xyz, r2.wwww, r3.xyzx
mad r0.xyzw, r2.xyzw, l(0.750000, 0.750000, 0.750000, 0.750000), r0.xyzw
add r1.x, -r1.w, r7.w
max r1.y, r1.w, r7.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r2.w, -r1.x, l(1.000000)
mul r2.xyz, r2.wwww, r7.xyzx
mad r0.xyzw, r2.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000), r0.xyzw
add r1.x, -r1.w, r5.w
max r1.y, r1.w, r5.w
div r1.x, |r1.x|, r1.y
add_sat r1.x, r1.x, r1.x
add r1.w, -r1.x, l(1.000000)
mul r1.xyz, r1.wwww, r5.xyzx
mad r0.xyzw, r1.xyzw, l(0.250000, 0.250000, 0.250000, 0.250000), r0.xyzw
div o1.xyz, r0.xyzx, r0.wwww
mov o1.w, r0.w
ret 
// Approximately 175 instruction slots used

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