| case mismatch_number_of_declarations |
| version 310 es |
| desc "Shader io block mismatch: different number of declarations" |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } |
| expect link_fail |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float variable1; |
| }; |
| |
| void main() |
| { |
| variable1 = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 310 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float variable1; |
| mediump float variable2; |
| }; |
| |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(variable1 + variable2); |
| } |
| "" |
| end |
| |
| case mismatch_order |
| version 310 es |
| desc "Shader io block mismatch: different member declaration order" |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } |
| expect link_fail |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float variable1; |
| mediump float variable2; |
| }; |
| |
| void main() |
| { |
| variable1 = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 310 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float variable2; |
| mediump float variable1; |
| }; |
| |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(variable1 + variable2); |
| } |
| "" |
| end |
| |
| case mismatch_type |
| version 310 es |
| desc "Shader io block mismatch: different member type" |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } |
| expect link_fail |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump vec2 variable; |
| }; |
| |
| void main() |
| { |
| variable.x = float(gl_VertexID); |
| variable.y = float(gl_InstanceID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 310 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float variable; |
| }; |
| |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(variable); |
| } |
| "" |
| end |
| |
| case mismatch_member_name |
| version 310 es |
| desc "Shader io block mismatch: different member name" |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } |
| expect link_fail |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float variable1; |
| }; |
| |
| void main() |
| { |
| variable1 = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 310 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float variable2; |
| }; |
| |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(variable2); |
| } |
| "" |
| end |
| |
| case mismatch_member_array_size |
| version 310 es |
| desc "Shader io block mismatch: different member array size" |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } |
| expect link_fail |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float variable[1]; |
| }; |
| |
| void main() |
| { |
| variable[0] = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 310 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float variable[2]; |
| }; |
| |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(variable[0] + variable[1]); |
| } |
| "" |
| end |
| |
| case with_and_without_instance_name |
| version 310 es |
| desc "Shader io block: with and without instance name" |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } |
| values |
| { |
| input float in0 = 1.0; |
| output float out0 = 1.0; |
| } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float variable; |
| } instanceName; |
| |
| void main() |
| { |
| instanceName.variable = in0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 310 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float variable; |
| }; |
| |
| void main() |
| { |
| out0 = variable; |
| ${FRAGMENT_OUTPUT} |
| } |
| "" |
| end |
| |
| case mismatch_block_array_size |
| version 310 es |
| desc "Shader io block mismatch: different array size" |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } |
| expect link_fail |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float variable; |
| } instanceName[1]; |
| |
| void main() |
| { |
| instanceName[0].variable = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 310 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float variable; |
| } instanceName[2]; |
| |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(instanceName[0].variable + instanceName[1].variable); |
| } |
| "" |
| end |
| |
| case missing_output_block |
| version 310 es |
| desc "Shader io block mismatch: missing output block" |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } |
| expect link_fail |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 310 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float variable; |
| }; |
| |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(variable); |
| } |
| "" |
| end |
| |
| case ambiguous_variable_name_1 |
| version 310 es |
| desc "Unnamed io block variable and global variable with identical names" |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } |
| expect compile_or_link_fail |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| float variable; |
| out IOBlockName |
| { |
| mediump float variable; |
| }; |
| |
| void main() |
| { |
| variable = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 310 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float variable; |
| }; |
| |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(variable); |
| } |
| "" |
| end |
| |
| case ambiguous_variable_name_2 |
| version 310 es |
| desc "Two unnamed io blocks with variables with identical names" |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } |
| expect compile_or_link_fail |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockNameA |
| { |
| mediump float variable; |
| }; |
| out IOBlockNameB |
| { |
| mediump float variable; |
| }; |
| |
| void main() |
| { |
| variable = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| fragment "" |
| #version 310 es |
| precision mediump float; |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockNameA |
| { |
| mediump float variable; |
| }; |
| in IOBlockNameB |
| { |
| mediump float variable; |
| }; |
| |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(variable); |
| } |
| "" |
| end |