text: #version 420
  #extension GL_ARB_texture_gather : enable
  #extension GL_ARB_separate_shader_objects : enable
  #ifdef VULKAN
  #define ATTR_LAYOUT(__vkSet, __location) layout(set = __vkSet, location = __location)
  #define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation, std140)
  #define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(set = __vkSet, binding = __vkLocation)
  #define SET_POSITION(_v) gl_Position = _v; gl_Position.z = (gl_Position.z + gl_Position.w) / 2.0
  #define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale.xy,gl_FragCoord.zw)
  #define gl_VertexID gl_VertexIndex
  #define gl_InstanceID gl_InstanceIndex
  #else
  #define ATTR_LAYOUT(__vkSet, __location) layout(location = __location)
  #define UNIFORM_BUFFER_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation, std140) 
  #define TEXTURE_LAYOUT(__glLocation, __vkSet, __vkLocation) layout(binding = __glLocation)
  #define SET_POSITION(_v) gl_Position = _v
  #define GET_FRAGCOORD() vec4(gl_FragCoord.xy*uf_fragCoordScale,gl_FragCoord.zw)
  #endif
  /* This shaders was auto-converted from OpenGL to Cemu.
  Conversion output:
  */
  
  
  // shader 314b77349f0636db -- Vertex Shader -- Lights up Cel-Shade Link and NPCs but also messes up the sky in the new methods
  
  #ifdef VULKAN
  layout(set = 0, binding = 1) uniform ufBlock
  {
  uniform ivec4 uf_remappedVS[1];
  // uniform vec2 uf_windowSpaceToClipSpaceTransform; // Cemu optimized this uf_variable away in Cemu 1.15.7
  };
  #else
  uniform ivec4 uf_remappedVS[1];
  // uniform vec2 uf_windowSpaceToClipSpaceTransform; // Cemu optimized this uf_variable away in Cemu 1.15.7
  #endif
  // uf_windowSpaceToClipSpaceTransform was moved to the ufBlock
  TEXTURE_LAYOUT(32, 0, 0) uniform sampler2D textureUnitVS0;
  ATTR_LAYOUT(0, 0) in uvec4 attrDataSem0;
  ATTR_LAYOUT(0, 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){ if( a == 0.0 || b == 0.0 ) return 0.0; return a*b; }
  void main()
  {
  ivec4 R0i = ivec4(0);
  ivec4 R1i = ivec4(0);
  ivec4 R2i = ivec4(0);
  ivec4 R3i = ivec4(0);
  ivec4 R127i = ivec4(0);
  uvec4 attrDecoder;
  int backupReg0i, backupReg1i, backupReg2i, backupReg3i, backupReg4i;
  ivec4 PV0i = ivec4(0), PV1i = ivec4(0);
  int PS0i = 0, PS1i = 0;
  ivec4 tempi = ivec4(0);
  float tempResultf;
  int tempResulti;
  ivec4 ARi = ivec4(0);
  bool predResult = true;
  vec3 cubeMapSTM;
  int cubeMapFaceId;
  R0i = ivec4(gl_VertexID, 0, 0, gl_InstanceID);
  attrDecoder.xyz = attrDataSem0.xyz;
  attrDecoder.xyz = (attrDecoder.xyz>>24)|((attrDecoder.xyz>>8)&0xFF00)|((attrDecoder.xyz<<8)&0xFF0000)|((attrDecoder.xyz<<24));
  attrDecoder.w = 0;
  R1i = ivec4(int(attrDecoder.x), int(attrDecoder.y), int(attrDecoder.z), floatBitsToInt(1.0));
  attrDecoder.xy = attrDataSem1.xy;
  attrDecoder.xy = (attrDecoder.xy>>24)|((attrDecoder.xy>>8)&0xFF00)|((attrDecoder.xy<<8)&0xFF0000)|((attrDecoder.xy<<24));
  attrDecoder.z = 0;
  attrDecoder.w = 0;
  R2i = ivec4(int(attrDecoder.x), int(attrDecoder.y), floatBitsToInt(0.0), floatBitsToInt(1.0));
  // 0
  backupReg0i = R1i.x;
  backupReg1i = R1i.y;
  R1i.x = backupReg0i;
  R1i.x = floatBitsToInt(intBitsToFloat(R1i.x) * 2.0);
  R1i.y = backupReg1i;
  R1i.y = floatBitsToInt(intBitsToFloat(R1i.y) * 2.0);
  R1i.z = 0x3f800000;
  R0i.w = 0;
  R3i.z = floatBitsToInt(intBitsToFloat(uf_remappedVS[0].y) * intBitsToFloat(0x437f0000));
  PS0i = R3i.z;
  R0i.xy = ivec4(textureSize(textureUnitVS0, 0),1,1).xy;
  // export
  SET_POSITION(vec4(intBitsToFloat(R1i.x), intBitsToFloat(R1i.y), intBitsToFloat(R1i.z), intBitsToFloat(R1i.z)));
  // 0
  R127i.z = floatBitsToInt(float(R0i.x));
  PS0i = R127i.z;
  // 1
  R127i.y = floatBitsToInt(float(R0i.y));
  PS1i = R127i.y;
  // 2
  PS0i = floatBitsToInt(1.0 / intBitsToFloat(R127i.z));
  // 3
  R3i.x = floatBitsToInt((-(intBitsToFloat(PS0i)) * intBitsToFloat(0x3c23d70a) + intBitsToFloat(R2i.x)));
  PS1i = floatBitsToInt(1.0 / intBitsToFloat(R127i.y));
  // 4
  R3i.y = floatBitsToInt((-(intBitsToFloat(PS1i)) * intBitsToFloat(0x3c23d70a) + intBitsToFloat(R2i.y)));
  // export
  passParameterSem0 = vec4(intBitsToFloat(R3i.x), intBitsToFloat(R3i.y), intBitsToFloat(R3i.z), intBitsToFloat(R3i.z)); // propety w is not set to 4.0 so it wont get processed the same way as the other 2 vertex shader
  }
  