mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-25 09:08:22 -05:00
138 lines
4.6 KiB
Text
138 lines
4.6 KiB
Text
#include <metal_stdlib>
|
|
using namespace metal;
|
|
struct xlatMtlShaderInput {
|
|
float2 xlv_TEXCOORD0;
|
|
};
|
|
struct xlatMtlShaderOutput {
|
|
half4 _glesFragData_0 [[color(0)]];
|
|
half4 _glesFragData_1 [[color(1)]];
|
|
};
|
|
struct xlatMtlShaderUniform {
|
|
float4 _ZBufferParams;
|
|
float4 _LightPos;
|
|
float4x4 _FrustumRays;
|
|
float4 _CameraPosLocal;
|
|
float4 _CoordTexDim;
|
|
float4 _ScreenTexDim;
|
|
};
|
|
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]]
|
|
, texture2d<half> _CameraDepthTexture [[texture(0)]], sampler _mtlsmp__CameraDepthTexture [[sampler(0)]])
|
|
{
|
|
xlatMtlShaderOutput _mtl_o;
|
|
float4 depth_1;
|
|
float2 coordTemp_2;
|
|
float sampleOnEpipolarLine_3;
|
|
float tmpvar_4;
|
|
tmpvar_4 = clamp ((_mtl_i.xlv_TEXCOORD0.y - (0.5 / _mtl_u._CoordTexDim.y)), 0.0, 1.0);
|
|
sampleOnEpipolarLine_3 = ((_mtl_i.xlv_TEXCOORD0.x - (0.5 / _mtl_u._CoordTexDim.x)) * (_mtl_u._CoordTexDim.x / (_mtl_u._CoordTexDim.x - 1.0)));
|
|
float tmpvar_5;
|
|
tmpvar_5 = clamp (sampleOnEpipolarLine_3, 0.0, 1.0);
|
|
sampleOnEpipolarLine_3 = tmpvar_5;
|
|
int tmpvar_6;
|
|
tmpvar_6 = int(clamp (floor(
|
|
(tmpvar_4 * 4.0)
|
|
), 0.0, 3.0));
|
|
float tmpvar_7;
|
|
tmpvar_7 = (-1.0 + (2.0 * fract(
|
|
(tmpvar_4 * 4.0)
|
|
)));
|
|
float4 tmpvar_8;
|
|
tmpvar_8.xz = float2(-1.0, 1.0);
|
|
tmpvar_8.y = tmpvar_7;
|
|
tmpvar_8.w = -(tmpvar_7);
|
|
float4 tmpvar_9;
|
|
tmpvar_9.yw = float2(-1.0, 1.0);
|
|
tmpvar_9.x = -(tmpvar_7);
|
|
tmpvar_9.z = tmpvar_7;
|
|
bool4 tmpvar_10;
|
|
tmpvar_10 = bool4((int4(tmpvar_6) == int4(0, 1, 2, 3)));
|
|
half4 tmpvar_11;
|
|
tmpvar_11 = half4(tmpvar_10);
|
|
half4 tmpvar_12;
|
|
tmpvar_12 = half4(tmpvar_10);
|
|
float2 tmpvar_13;
|
|
tmpvar_13.x = dot (tmpvar_9, (float4)tmpvar_11);
|
|
tmpvar_13.y = dot (tmpvar_8, (float4)tmpvar_12);
|
|
coordTemp_2 = ((mix (_mtl_u._LightPos.xy,
|
|
-(tmpvar_13)
|
|
, float2(tmpvar_5)) * 0.5) + 0.5);
|
|
float4 tmpvar_14;
|
|
tmpvar_14.zw = float2(0.0, 0.0);
|
|
tmpvar_14.xy = coordTemp_2;
|
|
coordTemp_2 = ((floor(
|
|
(coordTemp_2 * _mtl_u._ScreenTexDim.xy)
|
|
) + 0.5) * _mtl_u._ScreenTexDim.zw);
|
|
half4 tmpvar_15;
|
|
tmpvar_15 = _CameraDepthTexture.sample(_mtlsmp__CameraDepthTexture, (float2)(coordTemp_2));
|
|
float tmpvar_16;
|
|
float z_17;
|
|
z_17 = float(tmpvar_15.x);
|
|
tmpvar_16 = (1.0/(((_mtl_u._ZBufferParams.x * z_17) + _mtl_u._ZBufferParams.y)));
|
|
depth_1 = float4(tmpvar_16);
|
|
float4 v_18;
|
|
v_18.x = _mtl_u._FrustumRays[0].x;
|
|
v_18.y = _mtl_u._FrustumRays[1].x;
|
|
v_18.z = _mtl_u._FrustumRays[2].x;
|
|
v_18.w = _mtl_u._FrustumRays[3].x;
|
|
float4 v_19;
|
|
v_19.x = _mtl_u._FrustumRays[0].y;
|
|
v_19.y = _mtl_u._FrustumRays[1].y;
|
|
v_19.z = _mtl_u._FrustumRays[2].y;
|
|
v_19.w = _mtl_u._FrustumRays[3].y;
|
|
float4 v_20;
|
|
v_20.x = _mtl_u._FrustumRays[0].w;
|
|
v_20.y = _mtl_u._FrustumRays[1].w;
|
|
v_20.z = _mtl_u._FrustumRays[2].w;
|
|
v_20.w = _mtl_u._FrustumRays[3].w;
|
|
float4 v_21;
|
|
v_21.x = _mtl_u._FrustumRays[0].z;
|
|
v_21.y = _mtl_u._FrustumRays[1].z;
|
|
v_21.z = _mtl_u._FrustumRays[2].z;
|
|
v_21.w = _mtl_u._FrustumRays[3].z;
|
|
float3 tmpvar_22;
|
|
tmpvar_22 = mix (mix (v_18.xyz, v_19.xyz, tmpvar_14.xxx), mix (v_20.xyz, v_21.xyz, tmpvar_14.xxx), tmpvar_14.yyy);
|
|
float tmpvar_23;
|
|
tmpvar_23 = sqrt(dot (tmpvar_22, tmpvar_22));
|
|
bool tmpvar_24;
|
|
float3 tmpvar_25;
|
|
tmpvar_25 = (1.0/((tmpvar_22 / tmpvar_23)));
|
|
float3 tmpvar_26;
|
|
tmpvar_26 = (tmpvar_25 * (-0.5 - _mtl_u._CameraPosLocal.xyz));
|
|
float3 tmpvar_27;
|
|
tmpvar_27 = (tmpvar_25 * (0.5 - _mtl_u._CameraPosLocal.xyz));
|
|
float3 tmpvar_28;
|
|
tmpvar_28 = min (tmpvar_27, tmpvar_26);
|
|
float3 tmpvar_29;
|
|
tmpvar_29 = max (tmpvar_27, tmpvar_26);
|
|
float2 tmpvar_30;
|
|
tmpvar_30 = max (tmpvar_28.xx, tmpvar_28.yz);
|
|
float tmpvar_31;
|
|
tmpvar_31 = max (tmpvar_30.x, tmpvar_30.y);
|
|
float2 tmpvar_32;
|
|
tmpvar_32 = min (tmpvar_29.xx, tmpvar_29.yz);
|
|
float tmpvar_33;
|
|
tmpvar_33 = min (tmpvar_32.x, tmpvar_32.y);
|
|
tmpvar_24 = bool(((tmpvar_31 < tmpvar_33) && (tmpvar_33 > 0.0)));
|
|
if (((bool)!(tmpvar_24) || (tmpvar_16 < (tmpvar_31 / tmpvar_23)))) {
|
|
depth_1 = -(float4(tmpvar_16));
|
|
} else {
|
|
depth_1 = min (depth_1, float4((tmpvar_33 / tmpvar_23)));
|
|
};
|
|
_mtl_o._glesFragData_0 = half4(tmpvar_14);
|
|
_mtl_o._glesFragData_1 = half4(depth_1);
|
|
return _mtl_o;
|
|
}
|
|
|
|
|
|
// stats: 65 alu 1 tex 1 flow
|
|
// inputs: 1
|
|
// #0: xlv_TEXCOORD0 (high float) 2x1 [-1]
|
|
// uniforms: 6 (total size: 144)
|
|
// #0: _ZBufferParams (high float) 4x1 [-1] loc 0
|
|
// #1: _LightPos (high float) 4x1 [-1] loc 16
|
|
// #2: _FrustumRays (high float) 4x4 [-1] loc 32
|
|
// #3: _CameraPosLocal (high float) 4x1 [-1] loc 96
|
|
// #4: _CoordTexDim (high float) 4x1 [-1] loc 112
|
|
// #5: _ScreenTexDim (high float) 4x1 [-1] loc 128
|
|
// textures: 1
|
|
// #0: _CameraDepthTexture (low 2d) 0x0 [-1] loc 0
|