#version 310 es #define FORCE_EARLY_Z layout(early_fragment_tests) in #define ATTRIBUTE_LOCATION(x) #define FRAGMENT_OUTPUT_LOCATION(x) #define FRAGMENT_OUTPUT_LOCATION_INDEXED(x, y) #define UBO_BINDING(packing, x) layout(packing, binding = x) #define SAMPLER_BINDING(x) layout(binding = x) #define SSBO_BINDING(x) layout(binding = x) #define VARYING_LOCATION(x) #extension GL_EXT_geometry_point_size : enable #extension GL_ANDROID_extension_pack_es31a : enable #extension GL_EXT_texture_buffer : enable precision highp float; precision highp int; precision highp sampler2DArray; precision highp usamplerBuffer; precision highp sampler2DMS; precision highp image2DArray; #define float2 vec2 #define float3 vec3 #define float4 vec4 #define uint2 uvec2 #define uint3 uvec3 #define uint4 uvec4 #define int2 ivec2 #define int3 ivec3 #define int4 ivec4 #define frac fract #define lerp mix //Pixel Shader for TEV stages //2 TEV stages, 3 texgens, 1 IND stages int idot(int3 x, int3 y) { int3 tmp = x * y; return tmp.x + tmp.y + tmp.z; } int idot(int4 x, int4 y) { int4 tmp = x * y; return tmp.x + tmp.y + tmp.z + tmp.w; } int iround(float x) { return int (round(x)); } int2 iround(float2 x) { return int2(round(x)); } int3 iround(float3 x) { return int3(round(x)); } int4 iround(float4 x) { return int4(round(x)); } SAMPLER_BINDING(0) uniform sampler2DArray samp[8]; UBO_BINDING(std140, 1) uniform PSBlock { int4 color[4]; int4 k[4]; int4 alphaRef; float4 texdim[8]; int4 czbias[2]; int4 cindscale[2]; int4 cindmtx[6]; int4 cfogcolor; int4 cfogi; float4 cfogf[2]; float4 czslope; float4 cefbscale; }; struct VS_OUTPUT { float4 pos; float4 colors_0; float4 colors_1; float3 tex0; float3 tex1; float3 tex2; float4 clipPos; float clipDist0; float clipDist1; }; FRAGMENT_OUTPUT_LOCATION(0) out vec4 ocol0; VARYING_LOCATION(0) in VertexData { float4 pos; float4 colors_0; float4 colors_1; float3 tex0; float3 tex1; float3 tex2; float4 clipPos; float clipDist0; float clipDist1; }; void main() { float3 uv0 = tex0; float3 uv1 = tex1; float3 uv2 = tex2; float4 rawpos = gl_FragCoord; int4 c0 = color[1], c1 = color[2], c2 = color[3], prev = color[0]; int4 rastemp = int4(0, 0, 0, 0), textemp = int4(0, 0, 0, 0), konsttemp = int4(0, 0, 0, 0); int3 comp16 = int3(1, 256, 0), comp24 = int3(1, 256, 256*256); int alphabump=0; int3 tevcoord=int3(0, 0, 0); int2 wrappedcoord=int2(0,0), tempcoord=int2(0,0); int4 tevin_a=int4(0,0,0,0),tevin_b=int4(0,0,0,0),tevin_c=int4(0,0,0,0),tevin_d=int4(0,0,0,0); float4 col0 = colors_0; float4 col1 = colors_1; int2 fixpoint_uv0 = int2((uv0.z == 0.0 ? uv0.xy : uv0.xy / uv0.z) * texdim[0].zw); int2 fixpoint_uv1 = int2((uv1.z == 0.0 ? uv1.xy : uv1.xy / uv1.z) * texdim[1].zw); int2 fixpoint_uv2 = int2((uv2.z == 0.0 ? uv2.xy : uv2.xy / uv2.z) * texdim[2].zw); tempcoord = fixpoint_uv1 >> cindscale[0].xy; int3 iindtex0 = iround(255.0 * texture(samp[1], float3(float2(tempcoord).xy * texdim[1].xy, 0.0))).abg; // TEV stage 0 // indirect op int3 iindtevcrd0 = iindtex0 & 255; iindtevcrd0.xyz += int3(-128, -128, -128); int2 indtevtrans0 = int2(idot(cindmtx[0].xyz, iindtevcrd0), idot(cindmtx[1].xyz, iindtevcrd0)) >> 3; if (cindmtx[0].w >= 0) indtevtrans0 >>= cindmtx[0].w; else indtevtrans0 <<= (-cindmtx[0].w); wrappedcoord.x = fixpoint_uv2.x; wrappedcoord.y = fixpoint_uv2.y; tevcoord.xy = wrappedcoord + indtevtrans0; tevcoord.xy = (tevcoord.xy << 8) >> 8; rastemp = iround(col0 * 255.0).rgba; textemp = iround(255.0 * texture(samp[2], float3(float2(tevcoord.xy).xy * texdim[2].xy, 0.0))).rgba; tevin_a = int4(int3(0,0,0), 0)&int4(255, 255, 255, 255); tevin_b = int4(c0.aaa, textemp.a)&int4(255, 255, 255, 255); tevin_c = int4(textemp.rgb, rastemp.a)&int4(255, 255, 255, 255); tevin_d = int4(int3(0,0,0), 0); // color combine prev.rgb = clamp((((tevin_d.rgb)) + (((((tevin_a.rgb<<8) + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(0,0,0), int3(255,255,255)); // alpha combine prev.a = clamp((((tevin_d.a)) + (((((tevin_a.a<<8) + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))))>>8)), 0, 255); // TEV stage 1 // indirect op int2 indtevtrans1 = int2(0, 0); wrappedcoord.x = fixpoint_uv0.x; wrappedcoord.y = fixpoint_uv0.y; tevcoord.xy = wrappedcoord + indtevtrans1; tevcoord.xy = (tevcoord.xy << 8) >> 8; textemp = iround(255.0 * texture(samp[0], float3(float2(tevcoord.xy).xy * texdim[0].xy, 0.0))).rgba; tevin_a = int4(int3(0,0,0), textemp.a)&int4(255, 255, 255, 255); tevin_b = int4(int3(0,0,0), textemp.a)&int4(255, 255, 255, 255); tevin_c = int4(int3(0,0,0), prev.a)&int4(255, 255, 255, 255); tevin_d = int4(prev.rgb, 0); // color combine prev.rgb = clamp((((tevin_d.rgb)) + (((((tevin_a.rgb<<8) + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(-1024,-1024,-1024), int3(1023,1023,1023)); // alpha combine prev.a = clamp((((tevin_d.a)) + (((((tevin_a.a<<8) + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))))>>8)), -1024, 1023); prev = prev & 255; int zCoord = int(rawpos.z * 16777216.0); zCoord = clamp(zCoord, 0, 0xFFFFFF); ocol0.rgb = float3(prev.rgb) / 255.0; ocol0.a = float(prev.a >> 2) / 63.0; } Compile failed.