| # ------------------------------------------------- |
| # drawElements Quality Program OpenGL ES 3.2 Module |
| # ------------------------------------------------- |
| # |
| # Copyright 2016 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| |
| case per_patch_array_of_structs |
| version 320 es |
| desc "per-patch variable type is array of structs" |
| expect compile_or_link_fail |
| vertex "" |
| #version 320 es |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| tessellation_control "" |
| #version 320 es |
| ${TESSELLATION_CONTROL_DECLARATIONS} |
| struct S |
| { |
| highp float a; |
| highp vec2 b; |
| }; |
| patch out S patchVariable[2]; // array of structures is illegal |
| void main() |
| { |
| patchVariable[0].a = gl_in[0].gl_Position.x; |
| patchVariable[0].b = gl_in[0].gl_Position.yz; |
| patchVariable[1].a = gl_in[0].gl_Position.z; |
| patchVariable[1].b = gl_in[0].gl_Position.wx; |
| ${TESSELLATION_CONTROL_OUTPUT} |
| } |
| "" |
| tessellation_evaluation "" |
| #version 320 es |
| ${TESSELLATION_EVALUATION_DECLARATIONS} |
| struct S |
| { |
| highp float a; |
| highp vec2 b; |
| }; |
| patch in S patchVariable[2]; // array of structures is illegal |
| out mediump float te_out; |
| void main() |
| { |
| te_out = patchVariable[0].a + patchVariable[1].b.y; |
| ${TESSELLATION_EVALUATION_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 320 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float te_out; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(te_out); |
| } |
| "" |
| end |
| |
| case per_patch_structs_containing_arrays |
| version 320 es |
| desc "per-patch variable type is struct containing array" |
| expect compile_or_link_fail |
| vertex "" |
| #version 320 es |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| tessellation_control "" |
| #version 320 es |
| ${TESSELLATION_CONTROL_DECLARATIONS} |
| struct S |
| { |
| highp float a; |
| highp float b[2]; |
| }; |
| patch out S patchVariable; // output structure containing array is illegal |
| void main() |
| { |
| patchVariable.a = gl_in[0].gl_Position.x; |
| patchVariable.b[0] = gl_in[0].gl_Position.y; |
| patchVariable.b[1] = gl_in[0].gl_Position.w; |
| ${TESSELLATION_CONTROL_OUTPUT} |
| } |
| "" |
| tessellation_evaluation "" |
| #version 320 es |
| ${TESSELLATION_EVALUATION_DECLARATIONS} |
| struct S |
| { |
| highp float a; |
| highp float b[2]; |
| }; |
| patch in S patchVariable; // output structure containing array is illegal |
| out mediump float te_out; |
| void main() |
| { |
| te_out = patchVariable.a + patchVariable.b[1]; |
| ${TESSELLATION_EVALUATION_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 320 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float te_out; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(te_out); |
| } |
| "" |
| end |
| |
| case per_vertex_incorrect_control_explicit_output_array_size_1 |
| version 320 es |
| desc "Incorrectly sized tessellation control output array" |
| expect compile_or_link_fail |
| vertex "" |
| #version 320 es |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| tessellation_control "" |
| #version 320 es |
| ${TESSELLATION_CONTROL_DECLARATIONS} |
| out highp float varyingArray[2]; // size does not match layout declaration |
| void main() |
| { |
| varyingArray[gl_InvocationID] = gl_in[0].gl_Position[gl_InvocationID]; |
| ${TESSELLATION_CONTROL_OUTPUT} |
| } |
| "" |
| tessellation_evaluation "" |
| #version 320 es |
| ${TESSELLATION_EVALUATION_DECLARATIONS} |
| in highp float varyingArray[gl_MaxPatchVertices]; // size is correct |
| out mediump float te_out; |
| void main() |
| { |
| te_out = varyingArray[0] * gl_TessCoord.x + varyingArray[1] * gl_TessCoord.y + varyingArray[2]; |
| ${TESSELLATION_EVALUATION_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 320 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float te_out; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(te_out); |
| } |
| "" |
| end |
| |
| case per_vertex_incorrect_control_explicit_output_array_size_2 |
| version 320 es |
| desc "Incorrectly sized tessellation control output array" |
| expect compile_or_link_fail |
| vertex "" |
| #version 320 es |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| tessellation_control "" |
| #version 320 es |
| ${TESSELLATION_CONTROL_DECLARATIONS} |
| out highp float varyingArray[gl_MaxPatchVertices]; // size does not match layout declaration |
| void main() |
| { |
| varyingArray[gl_InvocationID] = gl_in[0].gl_Position[gl_InvocationID]; |
| ${TESSELLATION_CONTROL_OUTPUT} |
| } |
| "" |
| tessellation_evaluation "" |
| #version 320 es |
| ${TESSELLATION_EVALUATION_DECLARATIONS} |
| in highp float varyingArray[gl_MaxPatchVertices]; // size is correct |
| out mediump float te_out; |
| void main() |
| { |
| te_out = varyingArray[0] * gl_TessCoord.x + varyingArray[1] * gl_TessCoord.y + varyingArray[2]; |
| ${TESSELLATION_EVALUATION_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 320 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float te_out; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(te_out); |
| } |
| "" |
| end |
| |
| case per_vertex_incorrect_control_explicit_output_array_size_3 |
| version 320 es |
| desc "Incorrectly sized tessellation control output array" |
| expect compile_or_link_fail |
| vertex "" |
| #version 320 es |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| tessellation_control "" |
| #version 320 es |
| ${TESSELLATION_CONTROL_DECLARATIONS} |
| out highp float varyingArray[${GL_MAX_PATCH_VERTICES}]; // size does not match layout declaration |
| void main() |
| { |
| varyingArray[gl_InvocationID] = gl_in[0].gl_Position[gl_InvocationID]; |
| ${TESSELLATION_CONTROL_OUTPUT} |
| } |
| "" |
| tessellation_evaluation "" |
| #version 320 es |
| ${TESSELLATION_EVALUATION_DECLARATIONS} |
| in highp float varyingArray[gl_MaxPatchVertices]; // size is correct |
| out mediump float te_out; |
| void main() |
| { |
| te_out = varyingArray[0] * gl_TessCoord.x + varyingArray[1] * gl_TessCoord.y + varyingArray[2]; |
| ${TESSELLATION_EVALUATION_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 320 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float te_out; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(te_out); |
| } |
| "" |
| end |
| |
| case per_vertex_incorrect_eval_explicit_input_array_size |
| version 320 es |
| desc "Incorrectly sized tessellation control output array" |
| expect compile_or_link_fail |
| vertex "" |
| #version 320 es |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| tessellation_control "" |
| #version 320 es |
| ${TESSELLATION_CONTROL_DECLARATIONS} |
| out highp float varyingArray[]; |
| void main() |
| { |
| varyingArray[gl_InvocationID] = gl_in[0].gl_Position[gl_InvocationID]; |
| ${TESSELLATION_CONTROL_OUTPUT} |
| } |
| "" |
| tessellation_evaluation "" |
| #version 320 es |
| ${TESSELLATION_EVALUATION_DECLARATIONS} |
| in highp float varyingArray[3]; // size is not equal to gl_MaxPatchVertices |
| out mediump float te_out; |
| void main() |
| { |
| te_out = varyingArray[0] * gl_TessCoord.x + varyingArray[1] * gl_TessCoord.y + varyingArray[2]; |
| ${TESSELLATION_EVALUATION_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 320 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float te_out; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(te_out); |
| } |
| "" |
| end |