//Screen space reflections PS 2. Radio station.
// ---- Created with 3Dmigoto v0.6.181 on Mon Dec 25 17:51:09 2023
Texture2D<float4> t3 : register(t3);

Texture2D<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s3_s : register(s3);

SamplerState s2_s : register(s2);

SamplerState s1_s : register(s1);

SamplerState s0_s : register(s0);

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

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




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


void main(
  float4 v0 : SV_POSITION0,
  float4 v1 : TEXCOORD0,
  float4 v2 : TEXCOORD1,
  float4 v3 : TEXCOORD2,
  float3 v4 : TEXCOORD3,
  out float4 o0 : SV_TARGET0)
{
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9;
  uint4 bitmask, uiDest;
  float4 fDest;
  
  float4 stereo = StereoParams.Load(0);
  float4 prev = StereoParams.Load(int3(2,0,0));
  
  r0.xyzw = t3.Sample(s3_s, v1.xy).xyzw;
  r1.xyzw = v2.xyzw * r0.xyzw;
  r0.w = cmp(0 < r1.w);
  if (r0.w != 0) {
    
	v3.xyz-=stereo.x*stereo.y*cb2[4].xyz/(cb2[30].x);
	
    r0.w = dot(v3.xyz, v3.xyz);
    r2.x = sqrt(r0.w);
    r0.w = rsqrt(r0.w);
    r2.yzw = v3.xyz * r0.www;
    r3.xy = v0.xy * cb2[7].xy + cb2[7].zw;
    r3.xy = t2.SampleLevel(s2_s, r3.xy, 0).xy;
    r3.xz = cb0[3].xz + r3.xy;
    r3.y = cb0[3].y;
    r0.w = dot(r3.xyz, r3.xyz);
    r0.w = rsqrt(r0.w);
    r3.xyz = r3.xyz * r0.www + -cb0[3].xyz;
    r3.xyz = cb0[2].yyy * r3.xyz + cb0[3].xyz;
    r0.w = dot(r3.xyz, r3.xyz);
    r0.w = rsqrt(r0.w);
    r3.xyz = r3.xyz * r0.www;
    r0.w = saturate(dot(-r2.yzw, r3.xyz));
    r0.w = saturate(-cb0[2].x * r0.w + cb0[2].x);
    r3.w = 0.5 * r2.x;
    r4.x = dot(r2.yzw, r3.xyz);
    r4.x = r4.x + r4.x;
    r3.xyz = r3.xyz * -r4.xxx + r2.yzw;
    r4.x = dot(r3.xyz, cb2[4].xyz);
    r4.y = dot(r3.xyz, cb2[5].xyz);
    r4.z = dot(r3.xyz, cb2[6].xyz);
    r3.w = cb0[8].y * r3.w;
    r4.xyw = r3.www * r4.xyz;
    r3.w = cmp(r4.z < -0.200000003);
    r5.w = 1;
    r5.xyz = v4.xyz;
    r6.xyzw = float4(0,0,1,0);
    r7.x = 0;
    while (true) {
      r7.y = cmp((int)r7.x >= 10);
      if (r7.y != 0) break;
      r5.xyz = r4.xyw * r6.zzz + r5.xyz;
      r8.x = dot(r5.xyzw, cb2[30].xyzw);
      r8.y = dot(r5.xyzw, cb2[31].xyzw);
      r7.y = dot(r5.xyzw, cb2[33].xyzw);
	  
	  r8.x+=stereo.x*(r7.y-stereo.y);
	  
      r7.yz = r8.xy / r7.yy;
      r7.yz = r7.yz * float2(0.5,-0.5) + float2(0.5,0.5);
      r6.xy = r3.ww ? r7.yz : r6.xy;
      r6.w = t0.SampleLevel(s0_s, r6.xy, 0).x;
      r7.y = cmp(r6.w < -r5.z);
      r7.y = r7.y ? 0 : r6.z;
      r7.z = cmp(r6.w < -v4.z);
      r6.z = r7.z ? 1 : r7.y;
      r7.x = (int)r7.x + 1;
    }
    r5.w = cmp(r6.w < -r5.z);
    r5.w = r5.w ? -0.5 : 0.5;
    r7.w = 1;
    r7.xyz = r5.xyz;
    r6.z = r5.w;
    r8.xyz = r6.xyw;
    r8.w = 0;
    while (true) {
      r9.x = cmp((int)r8.w >= 3);
      if (r9.x != 0) break;
      r7.xyz = r4.xyw * r6.zzz + r7.xyz;
      r9.x = dot(r7.xyzw, cb2[30].xyzw);
      r9.y = dot(r7.xyzw, cb2[31].xyzw);
      r9.z = dot(r7.xyzw, cb2[33].xyzw);
	  
	  r9.x+=stereo.x*(r9.z-stereo.y);
	  
      r9.xy = r9.xy / r9.zz;
      r9.xy = r9.xy * float2(0.5,-0.5) + float2(0.5,0.5);
      r8.xy = r3.ww ? r9.xy : r8.xy;
      r8.z = t0.SampleLevel(s0_s, r8.xy, 0).x;
      r9.x = 0.5 * r6.z;
      r9.y = cmp(r8.z < -r7.z);
      r9.x = r9.y ? -r9.x : r9.x;
      r9.y = cmp(r8.z < -v4.z);
      r6.z = r9.y ? r9.x : -r9.x;
      r8.w = (int)r8.w + 1;
    }
    r4.xyw = t1.SampleLevel(s1_s, r8.xy, 0).xyz;
    r3.w = saturate(cb0[1].w * r8.y);
    r3.x = saturate(dot(r3.xyz, r2.yzw));
    r3.x = r3.w * r3.x;
    r3.y = cmp(r8.z < -v4.z);
    r0.w = r3.x * r0.w;
    r3.x = cmp(-0.200000003 < r4.z);
    r3.x = (int)r3.x | (int)r3.y;
    r0.w = r3.x ? 0 : r0.w;
    r3.xyz = r4.xyw + -r0.xyz;
    r0.xyz = r0.www * r3.xyz + r0.xyz;
    r0.xyz = v2.xyz * r0.xyz;
    r3.xyz = cb0[5].xyz * r2.xxx;
    r3.xyz = exp2(r3.xyz);
    r0.w = saturate(dot(-r2.yzw, cb0[0].xyz));
    r2.x = r0.w * r0.w;
    r2.x = r2.x * 0.238732412 + 0.238732412;
    r0.w = cb0[7].w * r0.w + cb0[8].x;
    r0.w = sqrt(r0.w);
    r2.y = r0.w * r0.w;
    r0.w = r2.y * r0.w;
    r2.yzw = cb0[7].xyz / r0.www;
    r2.xyz = cb0[6].xyz * r2.xxx + r2.yzw;
    r2.xyz = -r2.xyz * r3.xyz + r2.xyz;
    r3.xyz = saturate(r0.xyz * cb0[4].xyz + r3.xyz);
    r1.xyz = r0.xyz * r3.xyz + r2.xyz;
  }
  o0.xyzw = r1.xyzw;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v0.6.181 on Mon Dec 25 17:51:09 2023
//
//
// 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   xyzw        2     NONE   float   xyzw
// TEXCOORD                 2   xyz         3     NONE   float   xyz
// TEXCOORD                 3   xyz         4     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[9], immediateIndexed
dcl_constantbuffer CB2[34], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_sampler s3, 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.xyzw
dcl_input_ps linear v3.xyz
dcl_input_ps linear v4.xyz
dcl_output o0.xyzw
dcl_temps 10
sample_indexable(texture2d)(float,float,float,float) r0.xyzw, v1.xyxx, t3.xyzw, s3
mul r1.xyzw, r0.xyzw, v2.xyzw
lt r0.w, l(0.000000), r1.w
if_nz r0.w
  dp3 r0.w, v3.xyzx, v3.xyzx
  sqrt r2.x, r0.w
  rsq r0.w, r0.w
  mul r2.yzw, r0.wwww, v3.xxyz
  mad r3.xy, v0.xyxx, cb2[7].xyxx, cb2[7].zwzz
  sample_l_indexable(texture2d)(float,float,float,float) r3.xy, r3.xyxx, t2.xyzw, s2, l(0.000000)
  add r3.xz, r3.xxyx, cb0[3].xxzx
  mov r3.y, cb0[3].y
  dp3 r0.w, r3.xyzx, r3.xyzx
  rsq r0.w, r0.w
  mad r3.xyz, r3.xyzx, r0.wwww, -cb0[3].xyzx
  mad r3.xyz, cb0[2].yyyy, r3.xyzx, cb0[3].xyzx
  dp3 r0.w, r3.xyzx, r3.xyzx
  rsq r0.w, r0.w
  mul r3.xyz, r0.wwww, r3.xyzx
  dp3_sat r0.w, -r2.yzwy, r3.xyzx
  mad_sat r0.w, -cb0[2].x, r0.w, cb0[2].x
  mul r3.w, r2.x, l(0.500000)
  dp3 r4.x, r2.yzwy, r3.xyzx
  add r4.x, r4.x, r4.x
  mad r3.xyz, r3.xyzx, -r4.xxxx, r2.yzwy
  dp3 r4.x, r3.xyzx, cb2[4].xyzx
  dp3 r4.y, r3.xyzx, cb2[5].xyzx
  dp3 r4.z, r3.xyzx, cb2[6].xyzx
  mul r3.w, r3.w, cb0[8].y
  mul r4.xyw, r4.xyxz, r3.wwww
  lt r3.w, r4.z, l(-0.200000)
  mov r5.w, l(1.000000)
  mov r5.xyz, v4.xyzx
  mov r6.xyzw, l(0,0,1.000000,0)
  mov r7.x, l(0)
  loop
    ige r7.y, r7.x, l(10)
    breakc_nz r7.y
    mad r5.xyz, r4.xywx, r6.zzzz, r5.xyzx
    dp4 r8.x, r5.xyzw, cb2[30].xyzw
    dp4 r8.y, r5.xyzw, cb2[31].xyzw
    dp4 r7.y, r5.xyzw, cb2[33].xyzw
    div r7.yz, r8.xxyx, r7.yyyy
    mad r7.yz, r7.yyzy, l(0.000000, 0.500000, -0.500000, 0.000000), l(0.000000, 0.500000, 0.500000, 0.000000)
    movc r6.xy, r3.wwww, r7.yzyy, r6.xyxx
    sample_l_indexable(texture2d)(float,float,float,float) r6.w, r6.xyxx, t0.yzwx, s0, l(0.000000)
    lt r7.y, r6.w, -r5.z
    movc r7.y, r7.y, l(0), r6.z
    lt r7.z, r6.w, -v4.z
    movc r6.z, r7.z, l(1.000000), r7.y
    iadd r7.x, r7.x, l(1)
  endloop
  lt r5.w, r6.w, -r5.z
  movc r5.w, r5.w, l(-0.500000), l(0.500000)
  mov r7.w, l(1.000000)
  mov r7.xyz, r5.xyzx
  mov r6.z, r5.w
  mov r8.xyz, r6.xywx
  mov r8.w, l(0)
  loop
    ige r9.x, r8.w, l(3)
    breakc_nz r9.x
    mad r7.xyz, r4.xywx, r6.zzzz, r7.xyzx
    dp4 r9.x, r7.xyzw, cb2[30].xyzw
    dp4 r9.y, r7.xyzw, cb2[31].xyzw
    dp4 r9.z, r7.xyzw, cb2[33].xyzw
    div r9.xy, r9.xyxx, r9.zzzz
    mad r9.xy, r9.xyxx, l(0.500000, -0.500000, 0.000000, 0.000000), l(0.500000, 0.500000, 0.000000, 0.000000)
    movc r8.xy, r3.wwww, r9.xyxx, r8.xyxx
    sample_l_indexable(texture2d)(float,float,float,float) r8.z, r8.xyxx, t0.yzxw, s0, l(0.000000)
    mul r9.x, r6.z, l(0.500000)
    lt r9.y, r8.z, -r7.z
    movc r9.x, r9.y, -r9.x, r9.x
    lt r9.y, r8.z, -v4.z
    movc r6.z, r9.y, r9.x, -r9.x
    iadd r8.w, r8.w, l(1)
  endloop
  sample_l_indexable(texture2d)(float,float,float,float) r4.xyw, r8.xyxx, t1.xywz, s1, l(0.000000)
  mul_sat r3.w, r8.y, cb0[1].w
  dp3_sat r3.x, r3.xyzx, r2.yzwy
  mul r3.x, r3.x, r3.w
  lt r3.y, r8.z, -v4.z
  mul r0.w, r0.w, r3.x
  lt r3.x, l(-0.200000), r4.z
  or r3.x, r3.x, r3.y
  movc r0.w, r3.x, l(0), r0.w
  add r3.xyz, -r0.xyzx, r4.xywx
  mad r0.xyz, r0.wwww, r3.xyzx, r0.xyzx
  mul r0.xyz, r0.xyzx, v2.xyzx
  mul r3.xyz, r2.xxxx, cb0[5].xyzx
  exp r3.xyz, r3.xyzx
  dp3_sat r0.w, -r2.yzwy, cb0[0].xyzx
  mul r2.x, r0.w, r0.w
  mad r2.x, r2.x, l(0.238732412), l(0.238732412)
  mad r0.w, cb0[7].w, r0.w, cb0[8].x
  sqrt r0.w, r0.w
  mul r2.y, r0.w, r0.w
  mul r0.w, r0.w, r2.y
  div r2.yzw, cb0[7].xxyz, r0.wwww
  mad r2.xyz, cb0[6].xyzx, r2.xxxx, r2.yzwy
  mad r2.xyz, -r2.xyzx, r3.xyzx, r2.xyzx
  mad_sat r3.xyz, r0.xyzx, cb0[4].xyzx, r3.xyzx
  mad r1.xyz, r0.xyzx, r3.xyzx, r2.xyzx
endif
mov o0.xyzw, r1.xyzw
ret
// Approximately 0 instruction slots used

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