spv.precise.tese 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #version 310 es
  2. #extension GL_EXT_tessellation_shader : require
  3. #extension GL_EXT_gpu_shader5 : require
  4. layout(triangles, equal_spacing) in;
  5. layout(location = 0) in highp vec2 in_te_position[];
  6. layout(location = 0) out mediump vec4 in_f_color;
  7. precise gl_Position;
  8. void main(void) {
  9. highp vec2 pos = gl_TessCoord.x * in_te_position[0] +
  10. gl_TessCoord.y * in_te_position[1] +
  11. gl_TessCoord.z * in_te_position[2];
  12. highp float f =
  13. sqrt(3.0 * min(gl_TessCoord.x, min(gl_TessCoord.y, gl_TessCoord.z))) *
  14. 0.5 +
  15. 0.5;
  16. in_f_color = vec4(gl_TessCoord * f, 1.0);
  17. // Offset the position slightly, based on the parity of the bits in the float
  18. // representation.
  19. // This is done to detect possible small differences in edge vertex positions
  20. // between patches.
  21. uvec2 bits = floatBitsToUint(pos);
  22. uint numBits = 0u;
  23. for (uint i = 0u; i < 32u; i++)
  24. numBits +=
  25. ((bits[0] << i) & 1u) + ((bits[1] << i) & 1u);
  26. pos += float(numBits & 1u) * 0.04;
  27. gl_Position = vec4(pos, 0.0, 1.0);
  28. }