310.tesc 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #version 310 es
  2. #extension GL_OES_tessellation_shader : enable
  3. layout(vertices = 4) out;
  4. out int outa[gl_out.length()];
  5. layout(quads) in; // ERROR
  6. layout(ccw) out; // ERROR
  7. layout(fractional_even_spacing) in; // ERROR
  8. patch in vec4 patchIn; // ERROR
  9. patch out vec4 patchOut;
  10. void main()
  11. {
  12. barrier();
  13. int a = gl_MaxTessControlInputComponents +
  14. gl_MaxTessControlOutputComponents +
  15. gl_MaxTessControlTextureImageUnits +
  16. gl_MaxTessControlUniformComponents +
  17. gl_MaxTessControlTotalOutputComponents;
  18. vec4 p = gl_in[1].gl_Position;
  19. float ps = gl_in[1].gl_PointSize; // ERROR, need point_size extension
  20. float cd = gl_in[1].gl_ClipDistance[2]; // ERROR, not in ES
  21. int pvi = gl_PatchVerticesIn;
  22. int pid = gl_PrimitiveID;
  23. int iid = gl_InvocationID;
  24. gl_out[gl_InvocationID].gl_Position = p;
  25. gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR, need point_size extension
  26. gl_out[gl_InvocationID].gl_ClipDistance[1] = cd; // ERROR, not in ES
  27. gl_TessLevelOuter[3] = 3.2;
  28. gl_TessLevelInner[1] = 1.3;
  29. if (a > 10)
  30. barrier(); // ERROR
  31. else
  32. barrier(); // ERROR
  33. barrier();
  34. do {
  35. barrier(); // ERROR
  36. } while (a > 10);
  37. switch (a) {
  38. default:
  39. barrier(); // ERROR
  40. break;
  41. }
  42. a < 12 ? a : (barrier(), a); // ERROR
  43. {
  44. barrier();
  45. }
  46. return;
  47. barrier(); // ERROR
  48. }
  49. layout(vertices = 4) in; // ERROR, not on in
  50. layout(vertices = 5) out; // ERROR, changing #
  51. void foo()
  52. {
  53. gl_out[4].gl_Position; // ERROR, out of range
  54. barrier(); // ERROR, not in main
  55. }
  56. in vec2 ina; // ERROR, not array
  57. in vec2 inb[];
  58. in vec2 inc[18]; // ERROR, wrong size
  59. in vec2 ind[gl_MaxPatchVertices];
  60. patch out float implA[]; // ERROR, not sized
  61. #extension GL_ARB_separate_shader_objects : enable
  62. layout(location = 3) in vec4 ivla[];
  63. layout(location = 4) in vec4 ivlb[];
  64. layout(location = 4) in vec4 ivlc[]; // ERROR, overlapping
  65. layout(location = 3) out vec4 ovla[];
  66. layout(location = 4) out vec4 ovlb[];
  67. layout(location = 4) out vec4 ovlc[]; // ERROR, overlapping
  68. void foop()
  69. {
  70. precise float d; // ERROR without gpu_shader5
  71. d = fma(d, d, d); // ERROR without gpu_shader5
  72. }
  73. patch out pinbn {
  74. int a;
  75. } pinbi;
  76. centroid out vec3 myColor2[];
  77. centroid in vec3 centr[];
  78. sample out vec4 perSampleColor[]; // ERROR without sample extensions
  79. layout(vertices = 4) out float badlay[]; // ERROR, not on a variable
  80. out float misSized[5]; // ERROR, size doesn't match
  81. out float okaySize[4];
  82. #extension GL_OES_tessellation_point_size : enable
  83. void pointSize2()
  84. {
  85. float ps = gl_in[1].gl_PointSize;
  86. gl_out[gl_InvocationID].gl_PointSize = ps;
  87. }
  88. #extension GL_OES_gpu_shader5 : enable
  89. precise vec3 pv3;
  90. void goodfoop()
  91. {
  92. precise float d;
  93. pv3 *= pv3;
  94. pv3 = fma(pv3, pv3, pv3);
  95. d = fma(d, d, d);
  96. }
  97. void bbBad()
  98. {
  99. gl_BoundingBoxOES; // ERROR without GL_OES_primitive_bounding_box
  100. }
  101. #extension GL_OES_primitive_bounding_box : enable
  102. void bb()
  103. {
  104. gl_BoundingBoxOES[0] = vec4(0.0);
  105. gl_BoundingBoxOES[1] = vec4(1.0);
  106. gl_BoundingBoxOES[2] = vec4(2.0); // ERROR, overflow
  107. }
  108. out patch badpatchBName { // ERROR, array size required
  109. float f;
  110. } badpatchIName[];
  111. out patch patchBName {
  112. float f;
  113. } patchIName[4];
  114. void outputtingOutparam(out int a)
  115. {
  116. a = 2;
  117. }
  118. void outputting()
  119. {
  120. outa[gl_InvocationID] = 2;
  121. outa[1] = 2; // ERROR, not gl_InvocationID
  122. gl_out[0].gl_Position = vec4(1.0); // ERROR, not gl_InvocationID
  123. outa[1];
  124. gl_out[0];
  125. outputtingOutparam(outa[0]); // ERROR, not gl_InvocationID
  126. outputtingOutparam(outa[gl_InvocationID]);
  127. patchIName[1].f = 3.14;
  128. outa[(gl_InvocationID)] = 2;
  129. }