//Skybox PS 2.
// ---- Created with 3Dmigoto v1.3.16 on Sun Dec 25 10:52:08 2022

cbuffer RenderView : register(b0)
{
  float4x4 uProjectionMatrix : packoffset(c0);
  float4x4 uModelViewMatrix : packoffset(c4);
  float4x4 uInverseProjectionMatrix : packoffset(c8);
  float4x4 uPrevProjection : packoffset(c12);
  float4x4 uInverseModelViewMatrix : packoffset(c16);
  float4x4 uPrevModelView : packoffset(c20);
  float4x4 uRotationMatrix : packoffset(c24);
  float4x4 uInverseRotationMatrix : packoffset(c28);
  float4x4 uTransposedRotationMatrix : packoffset(c32);
  float4x4 uClipMatrix : packoffset(c36);
  float4x4 uInverseClipMatrix : packoffset(c40);
  float4x4 uPrevClipMatrix : packoffset(c44);
  float4x4 uNormalMatrix : packoffset(c48);
  float3 uViewOrigin : packoffset(c52);
  float uViewWidth : packoffset(c52.w);
  float uViewHeight : packoffset(c53);
  float uZNear : packoffset(c53.y);
  float uZFar : packoffset(c53.z);
  float2 uInvFocalCoords : packoffset(c54);
  float4 uResolutionScale : packoffset(c55);
  float4 uScreenBounds : packoffset(c56);
  float4 uFrustumCorners[4] : packoffset(c57);
}

cbuffer WorldFog : register(b1)
{
  float4 uFogColor : packoffset(c0);
}

cbuffer QuakeSkyParams : register(b2)
{
  float uSpeedScale : packoffset(c0);
  float uSkyFogFactor : packoffset(c0.y);
  float uSkyAlpha : packoffset(c0.z);
}

SamplerState uSampletQuakeImage_s : register(s0);
Texture2D<float4> uTex_tQuakeImage : register(t0);


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


void main(
  float4 v0 : SV_Position0,
  float3 v1 : POSITION0,
  float4 v2 : POSITION1,
  float4 v3 : POSITION2,
  out float4 o0 : SV_Target0)
{
  float4 r0,r1,r2,r3;
  uint4 bitmask, uiDest;
  float4 fDest;
  
  float4 stereo = StereoParams.Load(0);
  
  r0.x = v0.x / uViewWidth;
  r0.y = v0.y / uViewHeight;
  r0.zw = uScreenBounds.xy * uResolutionScale.zw;
  r0.xy = r0.xy * uResolutionScale.zw + -r0.zw;
  r0.z = 1 + -r0.y;
  r0.xy = r0.xz * float2(2,2) + float2(-1,-1);
  r0.xy = uInvFocalCoords.xy * r0.xy;
  r0.xy = -v1.zz * r0.xy;
  
  r0.x+=stereo.x*(v1.z+stereo.y*0.2)/uProjectionMatrix._m00;
  
  r0.yzw = uInverseModelViewMatrix._m01_m11_m21 * r0.yyy;
  r0.xyz = uInverseModelViewMatrix._m00_m10_m20 * r0.xxx + r0.yzw;
  r0.xyz = uInverseModelViewMatrix._m02_m12_m22 * v1.zzz + r0.xyz;
  r0.xyz = uInverseModelViewMatrix._m03_m13_m23 + r0.xyz;
  r0.xyz = -uViewOrigin.xyz + r0.xyz;
  r0.w = 3 * r0.z;
  r0.z = dot(r0.xyw, r0.xyw);
  r0.z = sqrt(r0.z);
  r0.z = 378 / r0.z;
  r0.xyzw = r0.xyxy * r0.zzzz + uSpeedScale;
  r1.xyzw = r0.zwzw * float4(0.0078125,0.0078125,0.0078125,0.0078125) + float4(0.0078125,0,-0.0078125,0);
  r2.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r1.xy).xyzw;
  r1.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r1.zw).xyzw;
  r1.x = r2.w + r1.w;
  r2.xyzw = r0.zwzw * float4(0.0078125,0.0078125,0.0078125,0.0078125) + float4(0,0.0078125,0,-0.0078125);
  r3.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.xy).xyzw;
  r2.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.zw).xyzw;
  r1.x = r3.w + r1.x;
  r1.x = r1.x + r2.w;
  r2.xyzw = r0.zwzw * float4(0.0078125,0.0078125,0.0078125,0.0078125) + float4(0.0078125,0.0078125,-0.0078125,-0.0078125);
  r3.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.xy).xyzw;
  r2.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.zw).xyzw;
  r1.x = r3.w + r1.x;
  r1.x = r1.x + r2.w;
  r2.xyzw = r0.zwzw * float4(0.0078125,0.0078125,0.0078125,0.0078125) + float4(0.0078125,-0.0078125,-0.0078125,0.0078125);
  r3.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.xy).xyzw;
  r2.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.zw).xyzw;
  r1.x = r3.w + r1.x;
  r1.x = r1.x + r2.w;
  r2.xyzw = r0.zwzw * float4(0.0078125,0.0078125,0.0078125,0.0078125) + float4(0.015625,0,-0.015625,0);
  r3.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.xy).xyzw;
  r2.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.zw).xyzw;
  r1.x = r3.w + r1.x;
  r1.x = r1.x + r2.w;
  r2.xyzw = r0.zwzw * float4(0.0078125,0.0078125,0.0078125,0.0078125) + float4(0,0.015625,0,-0.015625);
  r3.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.xy).xyzw;
  r2.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.zw).xyzw;
  r1.x = r3.w + r1.x;
  r1.x = r1.x + r2.w;
  r2.xyzw = r0.zwzw * float4(0.0078125,0.0078125,0.0078125,0.0078125) + float4(0.015625,0.015625,-0.015625,-0.015625);
  r3.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.xy).xyzw;
  r2.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.zw).xyzw;
  r1.x = r3.w + r1.x;
  r1.x = r1.x + r2.w;
  r2.xyzw = r0.xyzw * float4(0.0078125,0.0078125,0.0078125,0.0078125) + float4(0.015625,-0.015625,-0.015625,0.015625);
  r0.xy = float2(0.0078125,0.0078125) * r0.zw;
  r0.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r0.xy).xyzw;
  r3.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.xy).xyzw;
  r2.xyzw = uTex_tQuakeImage.Sample(uSampletQuakeImage_s, r2.zw).xyzw;
  r1.x = r3.w + r1.x;
  r1.x = r1.x + r2.w;
  r0.w = r1.x * r0.w;
  o0.w = 0.0625 * r0.w;
  r1.xyz = uSkyAlpha * r0.xyz;
  r0.xyz = -r0.xyz * uSkyAlpha + uFogColor.xyz;
  o0.xyz = uSkyFogFactor * r0.xyz + r1.xyz;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 10.1
//
//   using 3Dmigoto v1.3.16 on Sun Dec 25 10:52:08 2022
//
//
// Buffer Definitions:
//
// cbuffer RenderView
// {
//
//   float4x4 uProjectionMatrix;        // Offset:    0 Size:    64 [unused]
//   float4x4 uModelViewMatrix;         // Offset:   64 Size:    64 [unused]
//   float4x4 uInverseProjectionMatrix; // Offset:  128 Size:    64 [unused]
//   float4x4 uPrevProjection;          // Offset:  192 Size:    64 [unused]
//   float4x4 uInverseModelViewMatrix;  // Offset:  256 Size:    64
//   float4x4 uPrevModelView;           // Offset:  320 Size:    64 [unused]
//   float4x4 uRotationMatrix;          // Offset:  384 Size:    64 [unused]
//   float4x4 uInverseRotationMatrix;   // Offset:  448 Size:    64 [unused]
//   float4x4 uTransposedRotationMatrix;// Offset:  512 Size:    64 [unused]
//   float4x4 uClipMatrix;              // Offset:  576 Size:    64 [unused]
//   float4x4 uInverseClipMatrix;       // Offset:  640 Size:    64 [unused]
//   float4x4 uPrevClipMatrix;          // Offset:  704 Size:    64 [unused]
//   float4x4 uNormalMatrix;            // Offset:  768 Size:    64 [unused]
//   float3 uViewOrigin;                // Offset:  832 Size:    12
//   float uViewWidth;                  // Offset:  844 Size:     4
//   float uViewHeight;                 // Offset:  848 Size:     4
//   float uZNear;                      // Offset:  852 Size:     4 [unused]
//   float uZFar;                       // Offset:  856 Size:     4 [unused]
//   float2 uInvFocalCoords;            // Offset:  864 Size:     8
//   float4 uResolutionScale;           // Offset:  880 Size:    16
//   float4 uScreenBounds;              // Offset:  896 Size:    16
//   float4 uFrustumCorners[4];         // Offset:  912 Size:    64 [unused]
//
// }
//
// cbuffer WorldFog
// {
//
//   float4 uFogColor;                  // Offset:    0 Size:    16
//
// }
//
// cbuffer QuakeSkyParams
// {
//
//   float uSpeedScale;                 // Offset:    0 Size:     4
//   float uSkyFogFactor;               // Offset:    4 Size:     4
//   float uSkyAlpha;                   // Offset:    8 Size:     4
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// uSampletQuakeImage                sampler      NA          NA    0        1
// uTex_tQuakeImage                  texture  float4          2d    0        1
// RenderView                        cbuffer      NA          NA    0        1
// WorldFog                          cbuffer      NA          NA    1        1
// QuakeSkyParams                    cbuffer      NA          NA    2        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float   xy
// POSITION                 0   xyz         1     NONE   float     z
// POSITION                 1   xyzw        2     NONE   float
// POSITION                 2   xyzw        3     NONE   float
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
//
ps_4_0
dcl_constantbuffer CB0[57], immediateIndexed
dcl_constantbuffer CB1[1], immediateIndexed
dcl_constantbuffer CB2[1], immediateIndexed
dcl_sampler s0, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_input_ps_siv linear noperspective v0.xy, position
dcl_input_ps linear v1.z
dcl_output o0.xyzw
dcl_temps 4
div r0.x, v0.x, cb0[52].w
div r0.y, v0.y, cb0[53].x
mul r0.zw, cb0[55].zzzw, cb0[56].xxxy
mad r0.xy, r0.xyxx, cb0[55].zwzz, -r0.zwzz
add r0.z, -r0.y, l(1.000000)
mad r0.xy, r0.xzxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000)
mul r0.xy, r0.xyxx, cb0[54].xyxx
mul r0.xy, r0.xyxx, -v1.zzzz
mul r0.yzw, r0.yyyy, cb0[17].xxyz
mad r0.xyz, cb0[16].xyzx, r0.xxxx, r0.yzwy
mad r0.xyz, cb0[18].xyzx, v1.zzzz, r0.xyzx
add r0.xyz, r0.xyzx, cb0[19].xyzx
add r0.xyz, r0.xyzx, -cb0[52].xyzx
mul r0.w, r0.z, l(3.000000)
dp3 r0.z, r0.xywx, r0.xywx
sqrt r0.z, r0.z
div r0.z, l(378.000000), r0.z
mad r0.xyzw, r0.xyxy, r0.zzzz, cb2[0].xxxx
mad r1.xyzw, r0.zwzw, l(0.00781250000, 0.00781250000, 0.00781250000, 0.00781250000), l(0.00781250000, 0.000000, -0.00781250000, 0.000000)
sample r2.xyzw, r1.xyxx, t0.xyzw, s0
sample r1.xyzw, r1.zwzz, t0.xyzw, s0
add r1.x, r1.w, r2.w
mad r2.xyzw, r0.zwzw, l(0.00781250000, 0.00781250000, 0.00781250000, 0.00781250000), l(0.000000, 0.00781250000, 0.000000, -0.00781250000)
sample r3.xyzw, r2.xyxx, t0.xyzw, s0
sample r2.xyzw, r2.zwzz, t0.xyzw, s0
add r1.x, r1.x, r3.w
add r1.x, r2.w, r1.x
mad r2.xyzw, r0.zwzw, l(0.00781250000, 0.00781250000, 0.00781250000, 0.00781250000), l(0.00781250000, 0.00781250000, -0.00781250000, -0.00781250000)
sample r3.xyzw, r2.xyxx, t0.xyzw, s0
sample r2.xyzw, r2.zwzz, t0.xyzw, s0
add r1.x, r1.x, r3.w
add r1.x, r2.w, r1.x
mad r2.xyzw, r0.zwzw, l(0.00781250000, 0.00781250000, 0.00781250000, 0.00781250000), l(0.00781250000, -0.00781250000, -0.00781250000, 0.00781250000)
sample r3.xyzw, r2.xyxx, t0.xyzw, s0
sample r2.xyzw, r2.zwzz, t0.xyzw, s0
add r1.x, r1.x, r3.w
add r1.x, r2.w, r1.x
mad r2.xyzw, r0.zwzw, l(0.00781250000, 0.00781250000, 0.00781250000, 0.00781250000), l(0.015625, 0.000000, -0.015625, 0.000000)
sample r3.xyzw, r2.xyxx, t0.xyzw, s0
sample r2.xyzw, r2.zwzz, t0.xyzw, s0
add r1.x, r1.x, r3.w
add r1.x, r2.w, r1.x
mad r2.xyzw, r0.zwzw, l(0.00781250000, 0.00781250000, 0.00781250000, 0.00781250000), l(0.000000, 0.015625, 0.000000, -0.015625)
sample r3.xyzw, r2.xyxx, t0.xyzw, s0
sample r2.xyzw, r2.zwzz, t0.xyzw, s0
add r1.x, r1.x, r3.w
add r1.x, r2.w, r1.x
mad r2.xyzw, r0.zwzw, l(0.00781250000, 0.00781250000, 0.00781250000, 0.00781250000), l(0.015625, 0.015625, -0.015625, -0.015625)
sample r3.xyzw, r2.xyxx, t0.xyzw, s0
sample r2.xyzw, r2.zwzz, t0.xyzw, s0
add r1.x, r1.x, r3.w
add r1.x, r2.w, r1.x
mad r2.xyzw, r0.xyzw, l(0.00781250000, 0.00781250000, 0.00781250000, 0.00781250000), l(0.015625, -0.015625, -0.015625, 0.015625)
mul r0.xy, r0.zwzz, l(0.00781250000, 0.00781250000, 0.000000, 0.000000)
sample r0.xyzw, r0.xyxx, t0.xyzw, s0
sample r3.xyzw, r2.xyxx, t0.xyzw, s0
sample r2.xyzw, r2.zwzz, t0.xyzw, s0
add r1.x, r1.x, r3.w
add r1.x, r2.w, r1.x
mul r0.w, r0.w, r1.x
mul o0.w, r0.w, l(0.062500)
mul r1.xyz, r0.xyzx, cb2[0].zzzz
mad r0.xyz, -r0.xyzx, cb2[0].zzzz, cb1[0].xyzx
mad o0.xyz, cb2[0].yyyy, r0.xyzx, r1.xyzx
ret
// Approximately 65 instruction slots used

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