|
#version 400
|
|
|
|
#define FORCE_EARLY_Z layout(early_fragment_tests) in
|
|
#extension GL_ARB_shader_image_load_store : enable
|
|
|
|
#extension GL_ARB_shading_language_420pack : enable
|
|
|
|
#define SAMPLER_BINDING(x) layout(binding = x)
|
|
#extension GL_ARB_shader_storage_buffer_object : enable
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#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
|
|
//1 TEV stages, 0 texgens, 0 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)); }
|
|
|
|
int itrunc(float x) { return int (trunc(x)); }
|
|
int2 itrunc(float2 x) { return int2(trunc(x)); }
|
|
int3 itrunc(float3 x) { return int3(trunc(x)); }
|
|
int4 itrunc(float4 x) { return int4(trunc(x)); }
|
|
|
|
SAMPLER_BINDING(0) uniform sampler2DArray samp[8];
|
|
|
|
layout(std140, binding = 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;
|
|
float4 clipPos;
|
|
};
|
|
FORCE_EARLY_Z;
|
|
out vec4 ocol0;
|
|
// The interface block qualifier is duplicated to its member due to Apple OS X bug 24983074
|
|
in VertexData {
|
|
centroid in float4 pos;
|
|
centroid in float4 colors_0;
|
|
centroid in float4 colors_1;
|
|
centroid in float4 clipPos;
|
|
};
|
|
void main()
|
|
{
|
|
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(0, 0);
|
|
|
|
|
|
// TEV stage 0
|
|
rastemp = iround(col0 * 255.0).rgba;
|
|
textemp = int4(255, 255, 255, 255);
|
|
tevin_a = int4(int3(0,0,0), 0)&int4(255, 255, 255, 255);
|
|
tevin_b = int4(int3(0,0,0), 0)&int4(255, 255, 255, 255);
|
|
tevin_c = int4(int3(0,0,0), 0)&int4(255, 255, 255, 255);
|
|
tevin_d = int4(rastemp.rgb, rastemp.a);
|
|
// 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)))) + 128)>>8)), 0, 255);
|
|
prev = prev & 255;
|
|
int zCoord = int(rawpos.z * 16777216.0);
|
|
zCoord = clamp(zCoord, 0, 0xFFFFFF);
|
|
ocol0 = float4(prev) / 255.0;
|
|
}
|
|
Fragment shader failed to compile with the following errors:
|
|
ERROR: 1:49: error(#335) Input variables, output variables, and uniform variables can only be in in blocks, out blocks, and uniform blocks
|
|
ERROR: 1:66: error(#143) Undeclared identifier: colors_0
|
|
ERROR: 1:66: error(#160) Cannot convert from: "float" to: "highp 4-component vector of vec4"
|
|
ERROR: 1:67: error(#143) Undeclared identifier: colors_1
|
|
ERROR: 1:67: error(#160) Cannot convert from: "float" to: "highp 4-component vector of vec4"
|
|
ERROR: error(#273) 5 compilation errors. No code generated
|
|
|