blob: b868d9d01d8a9effc1331930fcb2a3886bca5ae1 [file] [log] [blame]
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 match_different_struct_names
version 310 es
desc "Variable struct names different but otherwise identical"
expect pass
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 match_different_member_struct_names
version 310 es
desc "IO-blocks match with structs with different names"
expect pass
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