mirror of
https://github.com/cemu-project/cemu_graphic_packs.git
synced 2024-11-27 03:54:15 +01:00
077f4f8f27
Since I wanted to make sure that I didn't broke the shaders after converting the shaders to Vulkan, we need to check if all the shaders weren't broken. Since we're talking about like 400 shaders checking all of them is pretty much impossible and even then, So, the obvious solution was to automate the checking. Not as simple as you'd think, because in 300 of our shaders we use preset variables which without replacing the value like Cemu does, will make the shader error regardless. So I also implemented some functionality that would read the preset values and types out of the rules.txt file and replace them in the shaders using that information. And then we use Khronos' glslang to compile the shaders, using both OpenGL and Vulkan. The result was that glslang found quite a few errors in some of the shaders, which I fixed in this commit. I'm considering adding this rules.txt parsing and automated shader compilation testing to the build process. Also, I fixed Clarity's name and description since Monochromia isn't available anymore and Xenoblade's resolution pack had a lot of weird blank lines before their #version declaration, which my converter didn't like.
139 lines
5.3 KiB
Plaintext
139 lines
5.3 KiB
Plaintext
#version 420
|
|
#extension GL_ARB_texture_gather : enable
|
|
#extension GL_ARB_shading_language_packing : enable
|
|
// shader 9bc5e526132c9534
|
|
// selection fill *dumped*
|
|
uniform ivec4 uf_remappedVS[11];
|
|
uniform vec2 uf_windowSpaceToClipSpaceTransform;
|
|
uniform float uf_alphaTestRef;
|
|
layout(location = 0) in uvec4 attrDataSem0;
|
|
layout(location = 1) in uvec4 attrDataSem1;
|
|
out gl_PerVertex
|
|
{
|
|
vec4 gl_Position;
|
|
float gl_PointSize;
|
|
};
|
|
layout(location = 0) out vec4 passParameterSem0;
|
|
int clampFI32(int v)
|
|
{
|
|
if( v == 0x7FFFFFFF )
|
|
return floatBitsToInt(1.0);
|
|
else if( v == 0xFFFFFFFF )
|
|
return floatBitsToInt(0.0);
|
|
return floatBitsToInt(clamp(intBitsToFloat(v), 0.0, 1.0));
|
|
}
|
|
float mul_nonIEEE(float a, float b){ return min(a*b,min(abs(a)*3.40282347E+38F,abs(b)*3.40282347E+38F)); }
|
|
void main()
|
|
{
|
|
vec4 R0f = vec4(0.0);
|
|
vec4 R1f = vec4(0.0);
|
|
vec4 R2f = vec4(0.0);
|
|
vec4 R123f = vec4(0.0);
|
|
vec4 R127f = vec4(0.0);
|
|
uvec4 attrDecoder;
|
|
float backupReg0f, backupReg1f, backupReg2f, backupReg3f, backupReg4f;
|
|
vec4 PV0f = vec4(0.0), PV1f = vec4(0.0);
|
|
float PS0f = 0.0, PS1f = 0.0;
|
|
vec4 tempf = vec4(0.0);
|
|
float tempResultf;
|
|
int tempResulti;
|
|
ivec4 ARi = ivec4(0);
|
|
bool predResult = true;
|
|
vec3 cubeMapSTM;
|
|
int cubeMapFaceId;
|
|
R0f = floatBitsToInt(ivec4(gl_VertexID, 0, 0, gl_InstanceID));
|
|
attrDecoder.xyz = attrDataSem1.xyz;
|
|
attrDecoder.xyz = (attrDecoder.xyz>>24)|((attrDecoder.xyz>>8)&0xFF00)|((attrDecoder.xyz<<8)&0xFF0000)|((attrDecoder.xyz<<24));
|
|
attrDecoder.w = 0;
|
|
R2f = vec4(intBitsToFloat(int(attrDecoder.x)), intBitsToFloat(int(attrDecoder.y)), intBitsToFloat(int(attrDecoder.z)), intBitsToFloat(floatBitsToInt(1.0)));
|
|
attrDecoder = attrDataSem0;
|
|
attrDecoder = (attrDecoder>>24)|((attrDecoder>>8)&0xFF00)|((attrDecoder<<8)&0xFF0000)|((attrDecoder<<24));
|
|
R1f = vec4(intBitsToFloat(int(attrDecoder.x)), intBitsToFloat(int(attrDecoder.y)), intBitsToFloat(int(attrDecoder.z)), intBitsToFloat(int(attrDecoder.w)));
|
|
// 0
|
|
PV0f.x = intBitsToFloat(uf_remappedVS[0].w) * 1.0;
|
|
PV0f.y = intBitsToFloat(uf_remappedVS[0].z) * 1.0;
|
|
PV0f.z = intBitsToFloat(uf_remappedVS[0].y) * 1.0;
|
|
PV0f.w = intBitsToFloat(uf_remappedVS[0].x) * 1.0;
|
|
// 1
|
|
R123f.x = (R2f.y * intBitsToFloat(uf_remappedVS[1].w) + PV0f.x);
|
|
PV1f.x = R123f.x;
|
|
R123f.y = (R2f.y * intBitsToFloat(uf_remappedVS[1].z) + PV0f.y);
|
|
PV1f.y = R123f.y;
|
|
R123f.z = (R2f.y * intBitsToFloat(uf_remappedVS[1].y) + PV0f.z);
|
|
PV1f.z = R123f.z;
|
|
R123f.w = (R2f.y * intBitsToFloat(uf_remappedVS[1].x) + PV0f.w);
|
|
PV1f.w = R123f.w;
|
|
// 2
|
|
R123f.x = (R2f.x * intBitsToFloat(uf_remappedVS[2].w) + PV1f.x);
|
|
PV0f.x = R123f.x;
|
|
R127f.y = (R2f.x * intBitsToFloat(uf_remappedVS[2].z) + PV1f.y);
|
|
R127f.z = (R2f.x * intBitsToFloat(uf_remappedVS[2].y) + PV1f.z);
|
|
R127f.w = (R2f.x * intBitsToFloat(uf_remappedVS[2].x) + PV1f.w);
|
|
// 3
|
|
PV1f.x = PV0f.x * intBitsToFloat(uf_remappedVS[3].w);
|
|
PV1f.y = PV0f.x * intBitsToFloat(uf_remappedVS[3].z);
|
|
PV1f.z = PV0f.x * intBitsToFloat(uf_remappedVS[3].y);
|
|
PV1f.w = PV0f.x * intBitsToFloat(uf_remappedVS[3].x);
|
|
// 4
|
|
R123f.x = (R127f.y * intBitsToFloat(uf_remappedVS[4].w) + PV1f.x);
|
|
PV0f.x = R123f.x;
|
|
R123f.y = (R127f.y * intBitsToFloat(uf_remappedVS[4].z) + PV1f.y);
|
|
PV0f.y = R123f.y;
|
|
R123f.z = (R127f.y * intBitsToFloat(uf_remappedVS[4].y) + PV1f.z);
|
|
PV0f.z = R123f.z;
|
|
R123f.w = (R127f.y * intBitsToFloat(uf_remappedVS[4].x) + PV1f.w);
|
|
PV0f.w = R123f.w;
|
|
// 5
|
|
R123f.x = (R127f.z * intBitsToFloat(uf_remappedVS[5].w) + PV0f.x);
|
|
PV1f.x = R123f.x;
|
|
R123f.y = (R127f.z * intBitsToFloat(uf_remappedVS[5].z) + PV0f.y);
|
|
PV1f.y = R123f.y;
|
|
R123f.z = (R127f.z * intBitsToFloat(uf_remappedVS[5].y) + PV0f.z);
|
|
PV1f.z = R123f.z;
|
|
R123f.w = (R127f.z * intBitsToFloat(uf_remappedVS[5].x) + PV0f.w);
|
|
PV1f.w = R123f.w;
|
|
// 6
|
|
backupReg0f = R127f.w;
|
|
R123f.x = (R127f.w * intBitsToFloat(uf_remappedVS[6].w) + PV1f.x);
|
|
PV0f.x = R123f.x;
|
|
R127f.y = (R127f.w * intBitsToFloat(uf_remappedVS[6].z) + PV1f.y);
|
|
R127f.z = (R127f.w * intBitsToFloat(uf_remappedVS[6].y) + PV1f.z);
|
|
R127f.w = (backupReg0f * intBitsToFloat(uf_remappedVS[6].x) + PV1f.w);
|
|
// 7
|
|
PV1f.x = PV0f.x * intBitsToFloat(uf_remappedVS[7].w);
|
|
PV1f.y = PV0f.x * intBitsToFloat(uf_remappedVS[7].z);
|
|
PV1f.z = PV0f.x * intBitsToFloat(uf_remappedVS[7].y);
|
|
PV1f.w = PV0f.x * intBitsToFloat(uf_remappedVS[7].x);
|
|
// 8
|
|
R123f.x = (R127f.y * intBitsToFloat(uf_remappedVS[8].w) + PV1f.x);
|
|
PV0f.x = R123f.x;
|
|
R123f.y = (R127f.y * intBitsToFloat(uf_remappedVS[8].z) + PV1f.y);
|
|
PV0f.y = R123f.y;
|
|
R123f.z = (R127f.y * intBitsToFloat(uf_remappedVS[8].y) + PV1f.z);
|
|
PV0f.z = R123f.z;
|
|
R123f.w = (R127f.y * intBitsToFloat(uf_remappedVS[8].x) + PV1f.w);
|
|
PV0f.w = R123f.w;
|
|
// 9
|
|
R123f.x = (R127f.z * intBitsToFloat(uf_remappedVS[9].w) + PV0f.x);
|
|
PV1f.x = R123f.x;
|
|
R123f.y = (R127f.z * intBitsToFloat(uf_remappedVS[9].z) + PV0f.y);
|
|
PV1f.y = R123f.y;
|
|
R123f.z = (R127f.z * intBitsToFloat(uf_remappedVS[9].y) + PV0f.z);
|
|
PV1f.z = R123f.z;
|
|
R123f.w = (R127f.z * intBitsToFloat(uf_remappedVS[9].x) + PV0f.w);
|
|
PV1f.w = R123f.w;
|
|
// 10
|
|
R2f.x = (R127f.w * intBitsToFloat(uf_remappedVS[10].x) + PV1f.w);
|
|
R2f.y = (R127f.w * intBitsToFloat(uf_remappedVS[10].y) + PV1f.z);
|
|
R2f.z = (R127f.w * intBitsToFloat(uf_remappedVS[10].z) + PV1f.y);
|
|
R2f.w = (R127f.w * intBitsToFloat(uf_remappedVS[10].w) + PV1f.x);
|
|
// export
|
|
float origRatio = (float(1280)/float(720));
|
|
float newRatio = (float($width)/float($height)) ;
|
|
// *(origRatio / newRatio)
|
|
gl_Position = vec4(R2f.x*(origRatio / newRatio), R2f.y, R2f.z, R2f.w);
|
|
// export
|
|
passParameterSem0 = vec4(R1f.x, R1f.y, R1f.z, R1f.w);
|
|
// 0
|
|
}
|