| |
| group varying "Default block varying matching" |
| |
| case missing_input |
| version 310 es |
| desc "Variable has no matching input" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out mediump float v_val; |
| out mediump float v_val_no_such_input; |
| void main() |
| { |
| v_val = float(gl_VertexID); |
| v_val_no_such_input = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val); |
| } |
| "" |
| end |
| end |
| |
| case missing_output |
| version 310 es |
| desc "Variable has no matching output" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out mediump float v_val; |
| void main() |
| { |
| v_val = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float v_val; |
| in mediump float v_val_no_such_output; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val + v_val_no_such_output); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_type |
| version 310 es |
| desc "Variable type mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out mediump vec3 v_val; |
| void main() |
| { |
| v_val = vec3(float(gl_VertexID)); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in mediump vec4 v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = v_val; |
| } |
| "" |
| end |
| end |
| |
| case mismatch_precision |
| version 310 es |
| desc "Variable precision mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out mediump float v_val; |
| void main() |
| { |
| v_val = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in highp float v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_explicit_location_type |
| version 310 es |
| desc "Variable type mismatch, explicit varying locations" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| layout(location = 3) out mediump vec4 v_val; |
| void main() |
| { |
| v_val = vec4(float(gl_VertexID)); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| layout(location = 3) in mediump vec2 v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = v_val.xxyy; |
| } |
| "" |
| end |
| end |
| |
| case mismatch_explicit_location_precision |
| version 310 es |
| desc "Variable precision mismatch, explicit varying locations" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| layout(location = 3) out mediump float v_val; |
| void main() |
| { |
| v_val = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| layout(location = 3) in highp float v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_explicit_location |
| version 310 es |
| desc "Variable location mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| layout(location = 3) out mediump float v_val; |
| void main() |
| { |
| v_val = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| layout(location = 4) in mediump float v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_implicit_explicit_location_1 |
| version 310 es |
| desc "Variable location mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out mediump float v_val; |
| void main() |
| { |
| v_val = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| layout(location = 3) in mediump float v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_implicit_explicit_location_2 |
| version 310 es |
| desc "Variable location mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| layout(location = 3) out mediump float v_val; |
| void main() |
| { |
| v_val = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float v_val; |
| layout(location = 3) in mediump float v_val_other_name; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val + v_val_other_name); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_implicit_explicit_location_3 |
| version 310 es |
| desc "Variable location mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out mediump float v_val; |
| layout(location = 3) out mediump float v_val_other_name; |
| void main() |
| { |
| v_val = float(gl_VertexID); |
| v_val_other_name = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| layout(location = 3) in mediump float v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_different_struct_names |
| version 310 es |
| desc "Variable struct names different but otherwise identical" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| struct StructureNameA |
| { |
| mediump float member; |
| }; |
| out StructureNameA v_val; |
| void main() |
| { |
| v_val.member = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| struct StructureNameB |
| { |
| mediump float member; |
| }; |
| in StructureNameB v_val; |
| void main() |
| { |
| // should always produce white |
| ${FRAG_COLOR} = (v_val.member > -1.0) ? (vec4(1.0)) : (vec4(0.0)); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_struct_member_name |
| version 310 es |
| desc "Struct member name mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| struct StructureName |
| { |
| mediump float member; |
| }; |
| out StructureName v_val; |
| void main() |
| { |
| v_val.member = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| struct StructureName |
| { |
| mediump float member_different_name; |
| }; |
| in StructureName v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val.member_different_name); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_struct_member_type |
| version 310 es |
| desc "Struct member type mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| struct StructureName |
| { |
| mediump float member; |
| }; |
| out StructureName v_val; |
| void main() |
| { |
| v_val.member = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| struct StructureName |
| { |
| mediump vec2 member; |
| }; |
| in StructureName v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val.member.x); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_struct_member_precision |
| version 310 es |
| desc "Struct member precision mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| struct StructureName |
| { |
| mediump float member; |
| }; |
| out StructureName v_val; |
| void main() |
| { |
| v_val.member = float(gl_VertexID); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| struct StructureName |
| { |
| highp float member; |
| }; |
| in StructureName v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val.member); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_struct_member_order |
| version 310 es |
| desc "Struct member order mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| struct StructureName |
| { |
| mediump float memberA; |
| mediump float memberB; |
| }; |
| out StructureName v_val; |
| void main() |
| { |
| v_val.memberA = float(gl_VertexID); |
| v_val.memberB = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| struct StructureName |
| { |
| mediump float memberB; |
| mediump float memberA; |
| }; |
| in StructureName v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val.memberA + v_val.memberB); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_array_element_type |
| version 310 es |
| desc "Array element type mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out mediump float v_val[2]; |
| void main() |
| { |
| v_val[0] = 1.0; |
| v_val[1] = 2.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in mediump vec2 v_val[2]; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val[0].x + v_val[1].y); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_array_length |
| version 310 es |
| desc "Array length mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out mediump float v_val[2]; |
| void main() |
| { |
| v_val[0] = 1.0; |
| v_val[1] = 2.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float v_val[3]; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val[0] + v_val[1] + v_val[2]); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_array_precision |
| version 310 es |
| desc "Array length mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out mediump float v_val[2]; |
| void main() |
| { |
| v_val[0] = 1.0; |
| v_val[1] = 2.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in highp float v_val[2]; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val[0] + v_val[1]); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_qualifier_vertex_flat_fragment_none |
| version 310 es |
| desc "Interpolation qualifier mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out flat highp vec4 v_val; |
| void main() |
| { |
| v_val = vec4(float(gl_VertexID)); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in highp vec4 v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = v_val; |
| } |
| "" |
| end |
| end |
| |
| case mismatch_qualifier_vertex_flat_fragment_smooth |
| version 310 es |
| desc "Interpolation qualifier mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out flat highp vec4 v_val; |
| void main() |
| { |
| v_val = vec4(float(gl_VertexID)); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in smooth highp vec4 v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = v_val; |
| } |
| "" |
| end |
| end |
| |
| case mismatch_qualifier_vertex_flat_fragment_centroid |
| version 310 es |
| desc "Interpolation qualifier mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out flat highp vec4 v_val; |
| void main() |
| { |
| v_val = vec4(float(gl_VertexID)); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in centroid highp vec4 v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = v_val; |
| } |
| "" |
| end |
| end |
| |
| case mismatch_qualifier_vertex_smooth_fragment_flat |
| version 310 es |
| desc "Interpolation qualifier mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out smooth highp vec4 v_val; |
| void main() |
| { |
| v_val = vec4(float(gl_VertexID)); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in flat highp vec4 v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = v_val; |
| } |
| "" |
| end |
| end |
| |
| case mismatch_qualifier_vertex_centroid_fragment_flat |
| version 310 es |
| desc "Interpolation qualifier mismatch" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out centroid highp vec4 v_val; |
| void main() |
| { |
| v_val = vec4(float(gl_VertexID)); |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in flat highp vec4 v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = v_val; |
| } |
| "" |
| end |
| end |
| end |
| |
| group io_blocks "shader io blocks" |
| |
| case missing_input |
| version 310 es |
| desc "Missing input block" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float v_val; |
| }; |
| void main() |
| { |
| v_val = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(1.0); |
| } |
| "" |
| end |
| end |
| |
| case missing_output |
| version 310 es |
| desc "Missing output block" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| void main() |
| { |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float v_val; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_number_of_declarations |
| version 310 es |
| desc "IO-blocks do not match due to mismatch in number of declarations" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float v_valA; |
| mediump float v_valB; |
| }; |
| void main() |
| { |
| v_valA = 1.0; |
| v_valB = 2.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float v_valA; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_valA); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_member_order |
| version 310 es |
| desc "IO-blocks do not match due to mismatch with member declaration order" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float v_valA; |
| mediump float v_valB; |
| }; |
| void main() |
| { |
| v_valA = 1.0; |
| v_valB = 2.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float v_valB; |
| mediump float v_valA; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_valA+v_valB); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_member_type |
| version 310 es |
| desc "IO-blocks do not match due to mismatch with member types" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float v_valA; |
| }; |
| void main() |
| { |
| v_valA = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump vec2 v_valA; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_valA.xyxy); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_member_name |
| version 310 es |
| desc "IO-blocks do not match due to mismatch with member names" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float v_valA; |
| }; |
| void main() |
| { |
| v_valA = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump vec2 v_valB; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_valB.y); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_member_precision |
| version 310 es |
| desc "IO-blocks do not match due to mismatch with member precisions" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float v_valA; |
| }; |
| void main() |
| { |
| v_valA = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| highp float v_valA; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_valA); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_different_member_interpolation |
| version 310 es |
| desc "IO-block members do not match due to different interpolation qualifiers" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| smooth out mediump float v_val; |
| }; |
| void main() |
| { |
| v_val = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| flat in mediump float v_val; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_member_array_size |
| version 310 es |
| desc "IO-blocks do not match due to mismatch with member array size" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float v_val_arr[2]; |
| }; |
| void main() |
| { |
| v_val_arr[0] = 1.0; |
| v_val_arr[1] = 2.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float v_val_arr[1]; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val_arr[0]); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_different_member_struct_names |
| version 310 es |
| desc "IO-blocks match with structs with different names" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| struct StructNameA |
| { |
| mediump float v; |
| }; |
| out IOBlockName |
| { |
| StructNameA v_val; |
| }; |
| |
| void main() |
| { |
| v_val.v = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| struct StructNameB |
| { |
| mediump float v; |
| }; |
| in IOBlockName |
| { |
| StructNameB v_val; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val.v); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_member_struct_member_name |
| version 310 es |
| desc "IO-blocks do not match due to mismatch with member structs" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| struct StructName |
| { |
| mediump float v; |
| }; |
| out IOBlockName |
| { |
| StructName v_val; |
| }; |
| |
| void main() |
| { |
| v_val.v = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| struct StructName |
| { |
| mediump float v_alt_name; |
| }; |
| in IOBlockName |
| { |
| StructName v_val; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val.v_alt_name); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_member_struct_member_type |
| version 310 es |
| desc "IO-blocks do not match due to mismatch with member structs" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| struct StructName |
| { |
| mediump float v; |
| }; |
| out IOBlockName |
| { |
| StructName v_val; |
| }; |
| |
| void main() |
| { |
| v_val.v = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| struct StructName |
| { |
| mediump vec2 v; |
| }; |
| in IOBlockName |
| { |
| StructName v_val; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val.v.x); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_member_struct_member_precision |
| version 310 es |
| desc "IO-blocks do not match due to mismatch with member structs" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| struct StructName |
| { |
| mediump float v; |
| }; |
| out IOBlockName |
| { |
| StructName v_val; |
| }; |
| |
| void main() |
| { |
| v_val.v = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| struct StructName |
| { |
| highp float v; |
| }; |
| in IOBlockName |
| { |
| StructName v_val; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val.v); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_member_struct_member_order |
| version 310 es |
| desc "IO-blocks do not match due to mismatch with member structs" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| struct StructName |
| { |
| mediump float v_a; |
| mediump float v_b; |
| }; |
| out IOBlockName |
| { |
| StructName v_val; |
| }; |
| |
| void main() |
| { |
| v_val.v_a = 1.0; |
| v_val.v_b = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| struct StructName |
| { |
| mediump float v_b; |
| mediump float v_a; |
| }; |
| in IOBlockName |
| { |
| StructName v_val; |
| }; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val.v_a); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_array_size |
| version 310 es |
| desc "IO-blocks do not match due to mismatch with array sizes" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float v_val; |
| } ioBlock[2]; |
| void main() |
| { |
| ioBlock[0].v_val = 1.0; |
| ioBlock[1].v_val = 2.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in IOBlockName |
| { |
| mediump float v_val; |
| } ioBlock[1]; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(ioBlock[0].v_val); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_variable_and_block_member_1 |
| version 310 es |
| desc "IO-block does not match with variable" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out IOBlockName |
| { |
| mediump float v_val; |
| }; |
| |
| void main() |
| { |
| v_val = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float v_val; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(v_val); |
| } |
| "" |
| end |
| end |
| |
| case mismatch_variable_and_block_member_2 |
| version 310 es |
| desc "IO-block does not match with variable" |
| expect validation_fail |
| |
| pipeline_program |
| active_stages {vertex} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } |
| vertex "" |
| #version 310 es |
| ${VERTEX_DECLARATIONS} |
| out VariableAndBlockName |
| { |
| mediump float v_val; |
| }; |
| |
| void main() |
| { |
| v_val = 1.0; |
| ${VERTEX_OUTPUT} |
| } |
| "" |
| end |
| pipeline_program |
| active_stages {fragment} |
| require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } |
| fragment "" |
| #version 310 es |
| ${FRAGMENT_DECLARATIONS} |
| in mediump float VariableAndBlockName; |
| void main() |
| { |
| ${FRAG_COLOR} = vec4(VariableAndBlockName); |
| } |
| "" |
| end |
| end |
| end |