1502 lines
26 KiB
Plaintext
1502 lines
26 KiB
Plaintext
# -------------------------------------------------
|
|
# 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.
|
|
|
|
|
|
group varying "Default block varying matching"
|
|
|
|
case missing_input
|
|
version 320 es
|
|
desc "Variable has no matching input"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float v_val;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(v_val);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
case missing_output
|
|
version 320 es
|
|
desc "Variable has no matching output"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Variable type mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump vec4 v_val;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = v_val;
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
case mismatch_precision
|
|
version 320 es
|
|
desc "Variable precision mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in highp float v_val;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(v_val);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
case mismatch_explicit_location_type
|
|
version 320 es
|
|
desc "Variable type mismatch, explicit varying locations"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Variable precision mismatch, explicit varying locations"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Variable location mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Variable location mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Variable location mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Variable location mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Variable struct names different but otherwise identical"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Struct member name mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Struct member type mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Struct member precision mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Struct member order mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Array element type mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Array length mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Array length mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Interpolation qualifier mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in highp vec4 v_val;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = v_val;
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
case mismatch_qualifier_vertex_flat_fragment_smooth
|
|
version 320 es
|
|
desc "Interpolation qualifier mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Interpolation qualifier mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Interpolation qualifier mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Interpolation qualifier mismatch"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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 320 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 320 es
|
|
desc "Missing input block"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 es
|
|
${VERTEX_DECLARATIONS}
|
|
out IOBlockName
|
|
{
|
|
mediump float v_val;
|
|
};
|
|
void main()
|
|
{
|
|
v_val = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
pipeline_program
|
|
active_stages {fragment}
|
|
fragment ""
|
|
#version 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(1.0);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
case missing_output
|
|
version 320 es
|
|
desc "Missing output block"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 es
|
|
${VERTEX_DECLARATIONS}
|
|
void main()
|
|
{
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
pipeline_program
|
|
active_stages {fragment}
|
|
fragment ""
|
|
#version 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in IOBlockName
|
|
{
|
|
mediump float v_val;
|
|
};
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(v_val);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
case mismatch_number_of_declarations
|
|
version 320 es
|
|
desc "IO-blocks do not match due to mismatch in number of declarations"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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}
|
|
fragment ""
|
|
#version 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in IOBlockName
|
|
{
|
|
mediump float v_valA;
|
|
};
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(v_valA);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
case mismatch_member_order
|
|
version 320 es
|
|
desc "IO-blocks do not match due to mismatch with member declaration order"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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}
|
|
fragment ""
|
|
#version 320 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 320 es
|
|
desc "IO-blocks do not match due to mismatch with member types"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 es
|
|
${VERTEX_DECLARATIONS}
|
|
out IOBlockName
|
|
{
|
|
mediump float v_valA;
|
|
};
|
|
void main()
|
|
{
|
|
v_valA = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
pipeline_program
|
|
active_stages {fragment}
|
|
fragment ""
|
|
#version 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in IOBlockName
|
|
{
|
|
mediump vec2 v_valA;
|
|
};
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(v_valA.xyxy);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
case mismatch_member_name
|
|
version 320 es
|
|
desc "IO-blocks do not match due to mismatch with member names"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 es
|
|
${VERTEX_DECLARATIONS}
|
|
out IOBlockName
|
|
{
|
|
mediump float v_valA;
|
|
};
|
|
void main()
|
|
{
|
|
v_valA = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
pipeline_program
|
|
active_stages {fragment}
|
|
fragment ""
|
|
#version 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in IOBlockName
|
|
{
|
|
mediump vec2 v_valB;
|
|
};
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(v_valB.y);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
case mismatch_member_precision
|
|
version 320 es
|
|
desc "IO-blocks do not match due to mismatch with member precisions"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 es
|
|
${VERTEX_DECLARATIONS}
|
|
out IOBlockName
|
|
{
|
|
mediump float v_valA;
|
|
};
|
|
void main()
|
|
{
|
|
v_valA = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
pipeline_program
|
|
active_stages {fragment}
|
|
fragment ""
|
|
#version 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in IOBlockName
|
|
{
|
|
highp float v_valA;
|
|
};
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(v_valA);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
|
|
case mismatch_different_member_interpolation
|
|
version 320 es
|
|
desc "IO-block members do not match due to different interpolation qualifiers"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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}
|
|
fragment ""
|
|
#version 320 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 320 es
|
|
desc "IO-blocks do not match due to mismatch with member array size"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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}
|
|
fragment ""
|
|
#version 320 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 320 es
|
|
desc "IO-blocks match with structs with different names"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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}
|
|
fragment ""
|
|
#version 320 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 320 es
|
|
desc "IO-blocks do not match due to mismatch with member structs"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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}
|
|
fragment ""
|
|
#version 320 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 320 es
|
|
desc "IO-blocks do not match due to mismatch with member structs"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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}
|
|
fragment ""
|
|
#version 320 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 320 es
|
|
desc "IO-blocks do not match due to mismatch with member structs"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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}
|
|
fragment ""
|
|
#version 320 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 320 es
|
|
desc "IO-blocks do not match due to mismatch with member structs"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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}
|
|
fragment ""
|
|
#version 320 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 320 es
|
|
desc "IO-blocks do not match due to mismatch with array sizes"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 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}
|
|
fragment ""
|
|
#version 320 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 320 es
|
|
desc "IO-block does not match with variable"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 es
|
|
${VERTEX_DECLARATIONS}
|
|
out IOBlockName
|
|
{
|
|
mediump float v_val;
|
|
};
|
|
|
|
void main()
|
|
{
|
|
v_val = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
pipeline_program
|
|
active_stages {fragment}
|
|
fragment ""
|
|
#version 320 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 320 es
|
|
desc "IO-block does not match with variable"
|
|
expect validation_fail
|
|
|
|
pipeline_program
|
|
active_stages {vertex}
|
|
vertex ""
|
|
#version 320 es
|
|
${VERTEX_DECLARATIONS}
|
|
out VariableAndBlockName
|
|
{
|
|
mediump float v_val;
|
|
};
|
|
|
|
void main()
|
|
{
|
|
v_val = 1.0;
|
|
${VERTEX_OUTPUT}
|
|
}
|
|
""
|
|
end
|
|
pipeline_program
|
|
active_stages {fragment}
|
|
fragment ""
|
|
#version 320 es
|
|
${FRAGMENT_DECLARATIONS}
|
|
in mediump float VariableAndBlockName;
|
|
void main()
|
|
{
|
|
${FRAG_COLOR} = vec4(VariableAndBlockName);
|
|
}
|
|
""
|
|
end
|
|
end
|
|
end
|