Huh, looks like there are a bunch of FastBlur shader compiler errors written out when I run the app, so there’s some kind of bug in the Metal conversion that doesn’t show up in OpenGL2.0
Initialize engine version: 5.5.0f3 (38b4efef76f0)
Compilation failed:
program_source:38:1: error: use of undeclared identifier ‘phase0_Input1_2’; did you mean ‘phase0_Input0_2’?
phase0_Input1_2[0] = TEXCOORD1;
^~~~~~~~~~~~~~~
phase0_Input0_2
program_source:37:7: note: ‘phase0_Input0_2’ declared here
half4 phase0_Input0_2[3];
^
program_source:38:22: error: use of undeclared identifier ‘TEXCOORD1’; did you mean ‘Mtl_FragmentIn::TEXCOORD1’?
phase0_Input1_2[0] = TEXCOORD1;
^~~~~~~~~
Mtl_FragmentIn::TEXCOORD1
program_source:17:11: note: ‘Mtl_FragmentIn::TEXCOORD1’ declared here
half4 TEXCOORD1 [[ user(TEXCOORD1) ]] ;
^
program_source:38:22: error: invalid use of non-static data member ‘TEXCOORD1’
phase0_Input1_2[0] = TEXCOORD1;
^~~~~~~~~
program_source:39:1: error: use of undeclared identifier ‘phase0_Input1_2’; did you mean ‘phase0_Input0_2’?
phase0_Input1_2[1] = TEXCOORD2;
^~~~~~~~~~~~~~~
phase0_Input0_2
program_source:37:7: note: ‘phase0_Input0_2’ declared here
half4 phase0_Input0_2[3];
^
program_source:39:22: error: use of undeclared identifier ‘TEXCOORD2’
phase0_Input1_2[1] = TEXCOORD2;
^
program_source:40:1: error: use of undeclared identifier ‘phase0_Input1_2’; did you mean ‘phase0_Input0_2’?
phase0_Input1_2[2] = TEXCOORD3;
^~~~~~~~~~~~~~~
phase0_Input0_2
program_source:37:7: note: ‘phase0_Input0_2’ declared here
half4 phase0_Input0_2[3];
^
program_source:40:22: error: use of undeclared identifier ‘TEXCOORD3’
phase0_Input1_2[2] = TEXCOORD3;
^
#include <metal_stdlib>
#include <metal_texture>
using namespace metal;
constant float4 ImmCB_0_0_0[7] =
{
float4(0.0205000006, 0.0, 0.0, 0.0),
float4(0.0855000019, 0.0, 0.0, 0.0),
float4(0.231999993, 0.0, 0.0, 0.0),
float4(0.324000001, 0.0, 0.0, 1.0),
float4(0.231999993, 0.0, 0.0, 0.0),
float4(0.0855000019, 0.0, 0.0, 0.0),
float4(0.0205000006, 0.0, 0.0, 0.0)
};
struct Mtl_FragmentIn
{
half2 TEXCOORD0 [[ user(TEXCOORD0) ]] ;
half4 TEXCOORD1 [[ user(TEXCOORD1) ]] ;
};
struct Mtl_FragmentOut
{
half4 SV_Target0 [[ color(0) ]];
};
fragment Mtl_FragmentOut xlatMtlMain(
texture2d<half, access::sample > _MainTex [[ texture (0) ]] ,
sampler sampler_MainTex [[ sampler (0) ]] ,
Mtl_FragmentIn input [[ stage_in ]])
{
Mtl_FragmentOut output;
half4 u_xlat16_0;
half4 u_xlat16_1;
int u_xlati2;
half4 u_xlat16_3;
half4 u_xlat16_4;
bool u_xlatb7;
half4 phase0_Input0_2[3];
phase0_Input1_2[0] = TEXCOORD1;
phase0_Input1_2[1] = TEXCOORD2;
phase0_Input1_2[2] = TEXCOORD3;
u_xlat16_0 = _MainTex.sample(sampler_MainTex, float2(input.TEXCOORD0.xy));
u_xlat16_0 = half4(float4(u_xlat16_0) * float4(0.324000001, 0.324000001, 0.324000001, 1.0));
u_xlat16_1 = u_xlat16_0;
u_xlati2 = 0x0;
while(true){
u_xlatb7 = u_xlati2>=0x3;
if(u_xlatb7){break;}
u_xlat16_3 = _MainTex.sample(sampler_MainTex, float2(phase0_Input0_2[u_xlati2].xy));
u_xlat16_4 = _MainTex.sample(sampler_MainTex, float2(phase0_Input0_2[u_xlati2].zw));
u_xlat16_3 = half4(u_xlat16_3 + u_xlat16_4);
u_xlat16_1 = half4(float4(u_xlat16_3) * ImmCB_0_0_0[u_xlati2].xxxw + float4(u_xlat16_1));
u_xlati2 = u_xlati2 + 0x1;
}
output.SV_Target0 = u_xlat16_1;
return output;
}
Compilation failed:
program_source:38:1: error: use of undeclared identifier ‘phase0_Input1_2’; did you mean ‘phase0_Input0_2’?
phase0_Input1_2[0] = TEXCOORD1;
^~~~~~~~~~~~~~~
phase0_Input0_2
program_source:37:7: note: ‘phase0_Input0_2’ declared here
half4 phase0_Input0_2[3];
^
program_source:38:22: error: use of undeclared identifier ‘TEXCOORD1’; did you mean ‘Mtl_FragmentIn::TEXCOORD1’?
phase0_Input1_2[0] = TEXCOORD1;
^~~~~~~~~
Mtl_FragmentIn::TEXCOORD1
program_source:17:11: note: ‘Mtl_FragmentIn::TEXCOORD1’ declared here
half4 TEXCOORD1 [[ user(TEXCOORD1) ]] ;
^
program_source:38:22: error: invalid use of non-static data member ‘TEXCOORD1’
phase0_Input1_2[0] = TEXCOORD1;
^~~~~~~~~
program_source:39:1: error: use of undeclared identifier ‘phase0_Input1_2’; did you mean ‘phase0_Input0_2’?
phase0_Input1_2[1] = TEXCOORD2;
^~~~~~~~~~~~~~~
phase0_Input0_2
program_source:37:7: note: ‘phase0_Input0_2’ declared here
half4 phase0_Input0_2[3];
^
program_source:39:22: error: use of undeclared identifier ‘TEXCOORD2’
phase0_Input1_2[1] = TEXCOORD2;
^
program_source:40:1: error: use of undeclared identifier ‘phase0_Input1_2’; did you mean ‘phase0_Input0_2’?
phase0_Input1_2[2] = TEXCOORD3;
^~~~~~~~~~~~~~~
phase0_Input0_2
program_source:37:7: note: ‘phase0_Input0_2’ declared here
half4 phase0_Input0_2[3];
^
program_source:40:22: error: use of undeclared identifier ‘TEXCOORD3’
phase0_Input1_2[2] = TEXCOORD3;
^
#include <metal_stdlib>
#include <metal_texture>
using namespace metal;
constant float4 ImmCB_0_0_0[7] =
{
float4(0.0205000006, 0.0, 0.0, 0.0),
float4(0.0855000019, 0.0, 0.0, 0.0),
float4(0.231999993, 0.0, 0.0, 0.0),
float4(0.324000001, 0.0, 0.0, 1.0),
float4(0.231999993, 0.0, 0.0, 0.0),
float4(0.0855000019, 0.0, 0.0, 0.0),
float4(0.0205000006, 0.0, 0.0, 0.0)
};
struct Mtl_FragmentIn
{
half2 TEXCOORD0 [[ user(TEXCOORD0) ]] ;
half4 TEXCOORD1 [[ user(TEXCOORD1) ]] ;
};
struct Mtl_FragmentOut
{
half4 SV_Target0 [[ color(0) ]];
};
fragment Mtl_FragmentOut xlatMtlMain(
texture2d<half, access::sample > _MainTex [[ texture (0) ]] ,
sampler sampler_MainTex [[ sampler (0) ]] ,
Mtl_FragmentIn input [[ stage_in ]])
{
Mtl_FragmentOut output;
half4 u_xlat16_0;
half4 u_xlat16_1;
int u_xlati2;
half4 u_xlat16_3;
half4 u_xlat16_4;
bool u_xlatb7;
half4 phase0_Input0_2[3];
phase0_Input1_2[0] = TEXCOORD1;
phase0_Input1_2[1] = TEXCOORD2;
phase0_Input1_2[2] = TEXCOORD3;
u_xlat16_0 = _MainTex.sample(sampler_MainTex, float2(input.TEXCOORD0.xy));
u_xlat16_0 = half4(float4(u_xlat16_0) * float4(0.324000001, 0.324000001, 0.324000001, 1.0));
u_xlat16_1 = u_xlat16_0;
u_xlati2 = 0x0;
while(true){
u_xlatb7 = u_xlati2>=0x3;
if(u_xlatb7){break;}
u_xlat16_3 = _MainTex.sample(sampler_MainTex, float2(phase0_Input0_2[u_xlati2].xy));
u_xlat16_4 = _MainTex.sample(sampler_MainTex, float2(phase0_Input0_2[u_xlati2].zw));
u_xlat16_3 = half4(u_xlat16_3 + u_xlat16_4);
u_xlat16_1 = half4(float4(u_xlat16_3) * ImmCB_0_0_0[u_xlati2].xxxw + float4(u_xlat16_1));
u_xlati2 = u_xlati2 + 0x1;
}
output.SV_Target0 = u_xlat16_1;
return output;
}
WARNING: Shader Unsupported: ‘Hidden/FastBlur’ - Pass ‘’ has no fragment shader
WARNING: Shader Unsupported: ‘Hidden/FastBlur’ - Setting to default shader.