New mustpass script and first MNC ES3.x mustpass lists
authorPyry Haulos <phaulos@google.com>
Thu, 2 Apr 2015 18:08:39 +0000 (11:08 -0700)
committerPyry Haulos <phaulos@google.com>
Fri, 3 Apr 2015 16:43:33 +0000 (09:43 -0700)
This change replaces old mustpass script (gen_android_cts_xml.py) with a
more flexible one (build_android_mustpass.py) that implements following:

 * Mustpass list is always built and checked against raw lists produced
by building and running test binaries using tools from build_caselists.py.

 * Mustpass lists are specified as list of transformations (inclusions
or exclusions) from raw case list.

 * New script supports generating multiple configurations (GL config bits,
surface, etc.)

Layout of android/cts has been changed slightly:

cts/<version>/src/           - source files for generating mustpass
cts/<version>/*.txt          - mustpass caselist (--deqp-caselist-file)
cts/<version>/mustpass.xml   - mapping between configs and caselists
cts/<version>/com.draw...xml - mustpass lists for CTS

Change-Id: I93f66d6dd817c94f01f3c81749af1a113f44651b

12 files changed:
android/cts/lmp-mr1/src/es30-lmp-mr1.txt [moved from android/cts/es30-lmp-mr1.txt with 100% similarity]
android/cts/lmp-mr1/src/es31-lmp-mr1.txt [moved from android/cts/es31-lmp-mr1.txt with 100% similarity]
android/cts/lmp/src/es30-lmp.txt [moved from android/cts/es30-lmp.txt with 100% similarity]
android/cts/lmp/src/es31-lmp.txt [moved from android/cts/es31-lmp.txt with 100% similarity]
android/cts/mnc/src/gles3-hw-issues.txt [new file with mode: 0644]
android/cts/mnc/src/gles3-rotation.txt [new file with mode: 0644]
android/cts/mnc/src/gles3-test-issues.txt [new file with mode: 0644]
android/cts/mnc/src/gles31-hw-issues.txt [new file with mode: 0644]
android/cts/mnc/src/gles31-test-issues.txt [new file with mode: 0644]
android/scripts/gen_android_cts_xml.py [deleted file]
scripts/build_android_mustpass.py [new file with mode: 0644]
scripts/build_caselists.py

diff --git a/android/cts/mnc/src/gles3-hw-issues.txt b/android/cts/mnc/src/gles3-hw-issues.txt
new file mode 100644 (file)
index 0000000..40200b4
--- /dev/null
@@ -0,0 +1,826 @@
+dEQP-GLES3.functional.fbo.blit.conversion.rgba4_to_rgb565
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_dst_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_dst_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_y
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_dst_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_dst_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min_reverse_src_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_x
+dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_x
+dEQP-GLES3.functional.polygon_offset.fixed16_result_depth_clamp
+dEQP-GLES3.functional.shaders.builtin_functions.precision.clamp.highp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.clamp.highp_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.clamp.highp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.clamp.highp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.clamp.highp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.clamp.highp_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.clamp.highp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.clamp.highp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.max.highp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.max.highp_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.max.highp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.max.highp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.max.highp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.max.highp_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.max.highp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.max.highp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.min.highp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.min.highp_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.min.highp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.min.highp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.min.highp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.min.highp_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.min.highp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.min.highp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.mediump_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.mediump_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.mediump_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.mediump_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.mediump_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.mediump_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.mediump_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.mediump_vertex.vec4
+dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.float_highp
+dEQP-GLES3.functional.shaders.derivate.dfdx.fastest.fbo_msaa4.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.float_highp
+dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa2.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.float_highp
+dEQP-GLES3.functional.shaders.derivate.dfdx.fbo_msaa4.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.float_highp
+dEQP-GLES3.functional.shaders.derivate.dfdx.nicest.fbo_msaa4.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.float_highp
+dEQP-GLES3.functional.shaders.derivate.dfdy.fastest.fbo_msaa4.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.float_highp
+dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa2.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.float_highp
+dEQP-GLES3.functional.shaders.derivate.dfdy.fbo_msaa4.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.float_highp
+dEQP-GLES3.functional.shaders.derivate.dfdy.nicest.fbo_msaa4.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.float_highp
+dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.fwidth.fastest.fbo_msaa4.vec4_mediump
+dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.float_highp
+dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa2.vec4_mediump
+dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.float_highp
+dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.fwidth.fbo_msaa4.vec4_mediump
+dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.float_highp
+dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec2_highp
+dEQP-GLES3.functional.shaders.derivate.fwidth.nicest.fbo_msaa4.vec4_mediump
+dEQP-GLES3.functional.shaders.operator.angle_and_trigonometry.atanh.highp_vec3_vertex
+dEQP-GLES3.functional.shaders.operator.angle_and_trigonometry.atanh.highp_vec4_vertex
+dEQP-GLES3.functional.shaders.operator.angle_and_trigonometry.atanh.mediump_vec3_vertex
+dEQP-GLES3.functional.shaders.operator.angle_and_trigonometry.atanh.mediump_vec4_vertex
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.isampler2darray_fragment
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.isampler2darray_vertex
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.isampler2d_fragment
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.isampler2d_vertex
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.isampler3d_fragment
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.isampler3d_vertex
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.usampler2darray_fragment
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.usampler2darray_vertex
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.usampler2d_fragment
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.usampler2d_vertex
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.usampler3d_fragment
+dEQP-GLES3.functional.shaders.texture_functions.texturelod.usampler3d_vertex
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.isampler2d_vec3_fragment
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.isampler2d_vec3_vertex
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.isampler2d_vec4_fragment
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.isampler2d_vec4_vertex
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.isampler3d_fragment
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.isampler3d_vertex
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.usampler2d_vec3_fragment
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.usampler2d_vec3_vertex
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.usampler2d_vec4_fragment
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.usampler2d_vec4_vertex
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.usampler3d_fragment
+dEQP-GLES3.functional.shaders.texture_functions.textureprojlod.usampler3d_vertex
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.10x10
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.10x10_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.10x5
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.10x5_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.10x6
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.10x6_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.10x8
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.10x8_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.12x10
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.12x10_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.12x12
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.12x12_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.4x4
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.4x4_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.5x4
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.5x4_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.5x5
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.5x5_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.6x5
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.6x5_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.6x6
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.6x6_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.8x5
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.8x5_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.8x6
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.8x6_srgb
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.8x8
+dEQP-GLES3.functional.texture.compressed.astc.color_endpoint_modes.8x8_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.10x10
+dEQP-GLES3.functional.texture.compressed.astc.random.10x10_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.10x5
+dEQP-GLES3.functional.texture.compressed.astc.random.10x5_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.10x6
+dEQP-GLES3.functional.texture.compressed.astc.random.10x6_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.10x8
+dEQP-GLES3.functional.texture.compressed.astc.random.10x8_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.12x10
+dEQP-GLES3.functional.texture.compressed.astc.random.12x10_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.12x12
+dEQP-GLES3.functional.texture.compressed.astc.random.12x12_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.4x4
+dEQP-GLES3.functional.texture.compressed.astc.random.4x4_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.5x4
+dEQP-GLES3.functional.texture.compressed.astc.random.5x4_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.5x5
+dEQP-GLES3.functional.texture.compressed.astc.random.5x5_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.6x5
+dEQP-GLES3.functional.texture.compressed.astc.random.6x5_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.6x6
+dEQP-GLES3.functional.texture.compressed.astc.random.6x6_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.8x5
+dEQP-GLES3.functional.texture.compressed.astc.random.8x5_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.8x6
+dEQP-GLES3.functional.texture.compressed.astc.random.8x6_srgb
+dEQP-GLES3.functional.texture.compressed.astc.random.8x8
+dEQP-GLES3.functional.texture.compressed.astc.random.8x8_srgb
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_linear_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_nearest_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_nearest_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_nearest_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_nearest_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_nearest_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_nearest_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_nearest_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_nearest_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_nearest_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_mipmap_nearest_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.linear_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_linear_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d_array.combinations.nearest_mipmap_nearest_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d_array.sizes.63x63x63_linear_mipmap_linear
+dEQP-GLES3.functional.texture.filtering.2d_array.sizes.63x63x63_linear_mipmap_nearest
+dEQP-GLES3.functional.texture.filtering.2d_array.sizes.63x63x63_nearest_mipmap_linear
+dEQP-GLES3.functional.texture.filtering.2d_array.sizes.63x63x63_nearest_mipmap_nearest
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_linear_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_mipmap_nearest_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_nearest_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.linear_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_linear_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_linear_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_nearest_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_linear_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_linear_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_nearest_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.2d.combinations.nearest_mipmap_nearest_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.2d.sizes.127x99_linear_mipmap_linear
+dEQP-GLES3.functional.texture.filtering.2d.sizes.127x99_linear_mipmap_nearest
+dEQP-GLES3.functional.texture.filtering.2d.sizes.127x99_nearest_mipmap_linear
+dEQP-GLES3.functional.texture.filtering.2d.sizes.127x99_nearest_mipmap_nearest
+dEQP-GLES3.functional.texture.filtering.2d.sizes.31x55_linear_mipmap_linear
+dEQP-GLES3.functional.texture.filtering.2d.sizes.31x55_linear_mipmap_nearest
+dEQP-GLES3.functional.texture.filtering.2d.sizes.31x55_nearest_mipmap_linear
+dEQP-GLES3.functional.texture.filtering.2d.sizes.31x55_nearest_mipmap_nearest
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_clamp_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_mirror_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_linear_repeat_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_clamp_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_clamp_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_clamp_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_clamp_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_mirror_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_mirror_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_mirror_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_mirror_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_mirror_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_mirror_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_mirror_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_mirror_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_mirror_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_linear_nearest_repeat_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_clamp_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_mirror_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_linear_repeat_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_clamp_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_clamp_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_clamp_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_mirror_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_mirror_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_mirror_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_mirror_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_mirror_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_mirror_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_mirror_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_mirror_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_mirror_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_mipmap_nearest_nearest_repeat_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_clamp_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_mirror_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.linear_nearest_repeat_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_clamp_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_mirror_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_linear_repeat_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_clamp_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_mirror_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_linear_repeat_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_clamp_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_clamp_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_clamp_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_clamp_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_clamp_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_clamp_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_clamp_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_clamp_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_clamp_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_mirror_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_mirror_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_mirror_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_mirror_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_mirror_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_mirror_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_mirror_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_mirror_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_mirror_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_repeat_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_repeat_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_repeat_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_repeat_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_repeat_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_repeat_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_repeat_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_repeat_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_linear_nearest_repeat_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_clamp_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_mirror_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_linear_repeat_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_clamp_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_clamp_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_clamp_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_clamp_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_clamp_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_clamp_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_clamp_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_clamp_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_clamp_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_mirror_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_mirror_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_mirror_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_mirror_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_mirror_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_mirror_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_mirror_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_mirror_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_mirror_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_repeat_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_repeat_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_repeat_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_repeat_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_repeat_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_repeat_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_repeat_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_repeat_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.3d.combinations.nearest_mipmap_nearest_nearest_repeat_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear_mipmap_linear
+dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_linear_mipmap_nearest
+dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_nearest_mipmap_linear
+dEQP-GLES3.functional.texture.filtering.3d.sizes.63x63x63_nearest_mipmap_nearest
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_linear_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_nearest_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_linear_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_linear_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_nearest_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_mipmap_nearest_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_nearest_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.linear_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_nearest_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_clamp_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_clamp_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_clamp_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_mirror_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_mirror_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_mirror_repeat
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_repeat_clamp
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_repeat_mirror
+dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_repeat_repeat
+dEQP-GLES3.functional.texture.filtering.cube.sizes.63x63_linear_mipmap_linear
+dEQP-GLES3.functional.texture.filtering.cube.sizes.63x63_linear_mipmap_nearest
+dEQP-GLES3.functional.texture.filtering.cube.sizes.63x63_nearest_mipmap_linear
+dEQP-GLES3.functional.texture.filtering.cube.sizes.63x63_nearest_mipmap_nearest
+dEQP-GLES3.functional.texture.mipmap.3d.base_level.linear_linear
+dEQP-GLES3.functional.texture.mipmap.3d.base_level.linear_nearest
+dEQP-GLES3.functional.texture.mipmap.3d.base_level.nearest_linear
+dEQP-GLES3.functional.texture.mipmap.3d.base_level.nearest_nearest
+dEQP-GLES3.functional.texture.mipmap.cube.bias.linear_linear
+dEQP-GLES3.functional.texture.mipmap.cube.bias.linear_nearest
+dEQP-GLES3.functional.texture.mipmap.cube.max_level.linear_nearest
+dEQP-GLES3.functional.texture.mipmap.cube.max_lod.linear_linear
+dEQP-GLES3.functional.texture.mipmap.cube.max_lod.linear_nearest
+dEQP-GLES3.functional.texture.mipmap.cube.max_lod.nearest_linear
+dEQP-GLES3.functional.texture.mipmap.cube.max_lod.nearest_nearest
+dEQP-GLES3.functional.texture.mipmap.cube.projected.linear_linear
+dEQP-GLES3.functional.texture.mipmap.cube.projected.nearest_nearest
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.r11f_g11f_b10f_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.r16i_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.r8ui_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rg16f_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rg16i_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rg32f_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rg32i_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rg32ui_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rg8_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rg8_snorm_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rg8ui_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgb16f_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgb16i_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgb16ui_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgb32f_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgb32i_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgb32ui_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgb5_a1_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgb8_snorm_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgb9_e5_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgba16f_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgba16ui_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgba32i_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgba32ui_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgba8_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgba8i_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgba8_snorm_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.rgba8ui_3d
+dEQP-GLES3.functional.texture.specification.basic_teximage3d.srgb8_3d
+dEQP-GLES3.functional.texture.specification.texstorage2d.format.rg8ui_2d
+dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb8_snorm_2d
+dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgb9_e5_2d
+dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgba16i_2d
+dEQP-GLES3.functional.texture.specification.texstorage2d.format.rgba32ui_2d
+dEQP-GLES3.functional.texture.specification.texstorage2d.format.srgb8_2d
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.depth24_stencil8_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.depth_component16_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.depth_component24_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.depth_component32f_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.r16ui_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.r32f_3d
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.r8_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.r8ui_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg16f_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg16i_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg16ui_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg32f_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg32ui_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg8_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg8i_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rg8ui_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb10_a2ui_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb16f_3d
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb16ui_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb32f_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb32f_3d
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb32i_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb32ui_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb565_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb5_a1_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb8_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb8i_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb8_snorm_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb8_snorm_3d
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb8ui_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgb9_e5_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba16f_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba32f_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba32i_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba32ui_3d
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba8_3d
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba8i_3d
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.rgba8_snorm_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.srgb8_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.format.srgb8_alpha8_2d_array
+dEQP-GLES3.functional.texture.specification.texstorage3d.size.2d_array_57x63x5_6_levels
+dEQP-GLES3.functional.texture.specification.texstorage3d.size.3d_57x63x11_6_levels
+dEQP-GLES3.functional.texture.units.all_units.mixed.1
+dEQP-GLES3.functional.texture.units.all_units.mixed.2
+dEQP-GLES3.functional.texture.units.all_units.mixed.3
+dEQP-GLES3.functional.texture.units.all_units.mixed.4
+dEQP-GLES3.functional.texture.units.all_units.mixed.5
+dEQP-GLES3.functional.texture.units.all_units.mixed.6
+dEQP-GLES3.functional.texture.units.all_units.mixed.7
+dEQP-GLES3.functional.texture.units.all_units.mixed.9
+dEQP-GLES3.functional.texture.units.all_units.only_2d.2
+dEQP-GLES3.functional.texture.units.all_units.only_2d.3
+dEQP-GLES3.functional.texture.units.all_units.only_2d.4
+dEQP-GLES3.functional.texture.units.all_units.only_2d.5
+dEQP-GLES3.functional.texture.units.all_units.only_2d.6
+dEQP-GLES3.functional.texture.units.all_units.only_2d.7
+dEQP-GLES3.functional.texture.units.all_units.only_2d.8
+dEQP-GLES3.functional.texture.units.all_units.only_2d.9
+dEQP-GLES3.functional.texture.units.all_units.only_2d_array.2
+dEQP-GLES3.functional.texture.units.all_units.only_2d_array.3
+dEQP-GLES3.functional.texture.units.all_units.only_2d_array.4
+dEQP-GLES3.functional.texture.units.all_units.only_2d_array.5
+dEQP-GLES3.functional.texture.units.all_units.only_2d_array.6
+dEQP-GLES3.functional.texture.units.all_units.only_2d_array.7
+dEQP-GLES3.functional.texture.units.all_units.only_2d_array.8
+dEQP-GLES3.functional.texture.units.all_units.only_2d_array.9
+dEQP-GLES3.functional.texture.units.all_units.only_3d.2
+dEQP-GLES3.functional.texture.units.all_units.only_3d.3
+dEQP-GLES3.functional.texture.units.all_units.only_3d.4
+dEQP-GLES3.functional.texture.units.all_units.only_3d.5
+dEQP-GLES3.functional.texture.units.all_units.only_3d.6
+dEQP-GLES3.functional.texture.units.all_units.only_3d.7
+dEQP-GLES3.functional.texture.units.all_units.only_3d.8
+dEQP-GLES3.functional.texture.units.all_units.only_3d.9
+dEQP-GLES3.functional.texture.units.all_units.only_cube.1
+dEQP-GLES3.functional.texture.units.all_units.only_cube.2
+dEQP-GLES3.functional.texture.units.all_units.only_cube.3
+dEQP-GLES3.functional.texture.units.all_units.only_cube.4
+dEQP-GLES3.functional.texture.units.all_units.only_cube.5
+dEQP-GLES3.functional.texture.units.all_units.only_cube.6
+dEQP-GLES3.functional.texture.units.all_units.only_cube.7
+dEQP-GLES3.functional.texture.units.all_units.only_cube.8
+dEQP-GLES3.functional.texture.units.all_units.only_cube.9
+dEQP-GLES3.functional.texture.vertex.2d_array.filtering.linear_nearest_clamp
+dEQP-GLES3.functional.texture.vertex.2d_array.filtering.linear_nearest_mirror
+dEQP-GLES3.functional.texture.vertex.2d_array.filtering.linear_nearest_repeat
+dEQP-GLES3.functional.texture.vertex.2d_array.filtering.nearest_linear_clamp
+dEQP-GLES3.functional.texture.vertex.2d_array.filtering.nearest_linear_mirror
+dEQP-GLES3.functional.texture.vertex.2d_array.filtering.nearest_linear_repeat
+dEQP-GLES3.functional.texture.vertex.2d.filtering.linear_nearest_clamp
+dEQP-GLES3.functional.texture.vertex.2d.filtering.linear_nearest_mirror
+dEQP-GLES3.functional.texture.vertex.2d.filtering.linear_nearest_repeat
+dEQP-GLES3.functional.texture.vertex.2d.filtering.nearest_linear_clamp
+dEQP-GLES3.functional.texture.vertex.2d.filtering.nearest_linear_mirror
+dEQP-GLES3.functional.texture.vertex.2d.filtering.nearest_linear_repeat
+dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_clamp
+dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_mirror
+dEQP-GLES3.functional.texture.vertex.3d.filtering.linear_nearest_repeat
+dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_linear_clamp
+dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_linear_mirror
+dEQP-GLES3.functional.texture.vertex.3d.filtering.nearest_linear_repeat
+dEQP-GLES3.functional.texture.vertex.cube.filtering.linear_nearest_clamp
+dEQP-GLES3.functional.texture.vertex.cube.filtering.linear_nearest_mirror
+dEQP-GLES3.functional.texture.vertex.cube.filtering.linear_nearest_repeat
+dEQP-GLES3.functional.texture.vertex.cube.filtering.nearest_linear_clamp
+dEQP-GLES3.functional.texture.vertex.cube.filtering.nearest_linear_mirror
+dEQP-GLES3.functional.texture.vertex.cube.filtering.nearest_linear_repeat
diff --git a/android/cts/mnc/src/gles3-rotation.txt b/android/cts/mnc/src/gles3-rotation.txt
new file mode 100644 (file)
index 0000000..9884ac0
--- /dev/null
@@ -0,0 +1,2 @@
+# Derivate tests are known to be configuration-sensitive
+dEQP-GLES3.functional.shaders.derivate.*
diff --git a/android/cts/mnc/src/gles3-test-issues.txt b/android/cts/mnc/src/gles3-test-issues.txt
new file mode 100644 (file)
index 0000000..fea81b1
--- /dev/null
@@ -0,0 +1,77 @@
+# Bug 18323265
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.mediump_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.mediump_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.mediump_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.mediump_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.highp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.highp_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.highp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.highp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.highp_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.dot.highp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.mediump_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.mediump_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.mediump_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.mediump_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.highp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.highp_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.highp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.highp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.highp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.highp_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.highp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atanh.highp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.highp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.highp_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.highp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.highp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.highp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.highp_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.highp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.acos.highp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.highp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.highp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.highp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.highp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.highp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.smoothstep.highp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.div.highp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.div.highp_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.div.highp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.div.highp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.div.highp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.div.highp_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.div.highp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.div.highp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.mod.highp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.mod.highp_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.mod.highp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.mod.highp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.mod.highp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.mod.highp_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.mod.highp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.mod.highp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.inverse.highp_vertex.mat2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.inverse.highp_fragment.mat2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.lowp_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.lowp_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.lowp_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.lowp_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.lowp_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.lowp_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.lowp_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.lowp_fragment.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.mediump_vertex.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.mediump_vertex.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.mediump_vertex.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.mediump_vertex.vec4
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.mediump_fragment.scalar
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.mediump_fragment.vec2
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.mediump_fragment.vec3
+dEQP-GLES3.functional.shaders.builtin_functions.precision.atan.mediump_fragment.vec4
+
+# Bug 18323060
+dEQP-GLES3.functional.shaders.random.all_features.fragment.16
+
+# Bug 18093986
+dEQP-GLES3.functional.shaders.texture_functions.texturelodoffset.usampler3d_vertex
diff --git a/android/cts/mnc/src/gles31-hw-issues.txt b/android/cts/mnc/src/gles31-hw-issues.txt
new file mode 100644 (file)
index 0000000..4722091
--- /dev/null
@@ -0,0 +1,48 @@
+dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.clamp.highp_compute.vec4
+dEQP-GLES31.functional.shaders.builtin_functions.precision.div.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.div.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.div.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.div.highp_compute.vec4
+dEQP-GLES31.functional.shaders.builtin_functions.precision.inverse.highp_compute.mat2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.max.highp_compute.vec4
+dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.min.highp_compute.vec4
+dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.mod.highp_compute.vec4
+dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.highp_compute.vec4
+dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
+dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
+dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
+dEQP-GLES31.functional.texture.gather.basic.2d.depth32f.size_pot.compare_less.repeat_mirrored_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.base_level.level_1
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.base_level.level_2
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_linear_mag_linear
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_linear_mag_linear
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_linear_mipmap_nearest_mag_linear
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_linear_mag_linear
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.filter_mode.min_nearest_mipmap_nearest_mag_linear
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_greater.clamp_to_edge_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_greater.mirrored_repeat_clamp_to_edge
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_greater.repeat_mirrored_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_less.clamp_to_edge_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_less.mirrored_repeat_clamp_to_edge
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_npot.compare_less.repeat_mirrored_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_greater.clamp_to_edge_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_greater.mirrored_repeat_clamp_to_edge
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_greater.repeat_mirrored_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_less.clamp_to_edge_repeat
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_less.mirrored_repeat_clamp_to_edge
+dEQP-GLES31.functional.texture.gather.basic.cube.depth32f.size_pot.compare_less.repeat_mirrored_repeat
diff --git a/android/cts/mnc/src/gles31-test-issues.txt b/android/cts/mnc/src/gles31-test-issues.txt
new file mode 100644 (file)
index 0000000..811fbb1
--- /dev/null
@@ -0,0 +1,29 @@
+# Bug 20013546
+dEQP-GLES31.functional.debug.negative_coverage.get_error.texture.compressedtexsubimage3d_invalid_buffer_target
+
+# Bug 20005726
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_internalformativ
+
+# Bug 19897810
+dEQP-GLES31.functional.copy_image.*srgb*renderbuffer
+
+# Bug 19641084
+dEQP-GLES31.functional.image_load_store.*.atomic.comp_swap_*_return_value
+
+# Bug 18323265
+dEQP-GLES31.functional.shaders.builtin_functions.precision.dot.highp_compute.vec4
+dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.atanh.highp_compute.vec4
+dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.highp_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.highp_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.highp_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.acos.highp_compute.vec4
+dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.mediump_compute.scalar
+dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.mediump_compute.vec2
+dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.mediump_compute.vec3
+dEQP-GLES31.functional.shaders.builtin_functions.precision.smoothstep.mediump_compute.vec4
+
+# Bug 18033342
+dEQP-GLES31.functional.debug.negative_coverage.get_error.state.get_framebuffer_attachment_parameteriv
diff --git a/android/scripts/gen_android_cts_xml.py b/android/scripts/gen_android_cts_xml.py
deleted file mode 100644 (file)
index bbd0aa1..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-#-------------------------------------------------------------------------
-# drawElements Quality Program utilities
-# --------------------------------------
-#
-# Copyright 2015 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.
-#
-#-------------------------------------------------------------------------
-
-import argparse
-import string
-
-class ModuleTemplate:
-       def __init__(self, friendlyName, packageName, appPackageName, version):
-               self.friendlyName = friendlyName
-               self.packageName = packageName
-               self.appPackageName = appPackageName
-               self.version = version
-
-class GLESVersion:
-       def __init__(self, majorVersion, minorVersion):
-               self.majorVersion = majorVersion
-               self.minorVersion = minorVersion
-
-       def getCTSEncodedGLESVersion(self):
-               return (self.majorVersion << 16) | (self.minorVersion)
-
-class EGLVersion:
-       def getCTSEncodedGLESVersion(self):
-               return None
-
-MODULE_TEMPLATES = [
-       ModuleTemplate("egl",           "dEQP-EGL",             "com.drawelements.deqp.egl",    EGLVersion()),
-       ModuleTemplate("gles2",         "dEQP-GLES2",   "com.drawelements.deqp.gles2",  GLESVersion(2, 0)),
-       ModuleTemplate("gles3",         "dEQP-GLES3",   "com.drawelements.deqp.gles3",  GLESVersion(3, 0)),
-       ModuleTemplate("gles31",        "dEQP-GLES31",  "com.drawelements.deqp.gles31", GLESVersion(3, 1)),
-]
-
-class TestGroup:
-       def __init__(self, name, parent = None):
-               self.parent = parent
-               self.name = name
-               self.testGroups = []
-               self.testCases = []
-
-               if parent:
-                       assert not parent.hasGroup(name)
-                       parent.testGroups.append(self)
-
-       def getName (self):
-               return self.name
-
-       def getPath (self):
-               if self.parent:
-                       return self.parent.getPath() + "." + self.name
-               else:
-                       return self.name
-
-       def hasGroup(self, groupName):
-               for group in self.testGroups:
-                       if group.getName() == groupName:
-                               return True
-               return False
-
-       def getGroup(self, groupName):
-               for group in self.testGroups:
-                       if group.getName() == groupName:
-                               return group
-               assert False
-
-       def hasTest(self, testName):
-               for test in self.testCases:
-                       if test.getName() == testName:
-                               return True
-               return False
-
-       def getTest(self, testName):
-               for test in self.testCases:
-                       if test.getName() == testName:
-                               return test
-               assert False
-
-       def hasTestCases(self):
-               return len(self.testCases) != 0
-
-       def hasTestGroups(self):
-               return len(self.testGroups) != 0
-
-       def getTestCases(self):
-               return self.testCases
-
-       def getTestGroups(self):
-               return self.testGroups
-
-class TestCase:
-       def __init__(self, name, parent):
-               self.name = name
-               self.parent = parent
-
-               assert not parent.hasTest(name)
-               self.parent.testCases.append(self)
-
-       def getPath (self):
-               return self.parent.getPath() + "." + self.name
-
-       def getName(self):
-               return self.name
-
-def addTestToHierarchy(rootGroup, path):
-       pathComponents = string.split(path, ".")
-       currentGroup = rootGroup
-
-       assert pathComponents[0] == rootGroup.getName()
-
-       for i in range(1, len(pathComponents)):
-               component = pathComponents[i]
-
-               if i == len(pathComponents) - 1:
-                       TestCase(component, currentGroup)
-               else:
-                       if currentGroup.hasGroup(component):
-                               currentGroup = currentGroup.getGroup(component)
-                       else:
-                               currentGroup = TestGroup(component, parent=currentGroup)
-
-def loadTestHierarchy (input, packageName):
-       line = input.readline()
-       rootGroup = None
-
-       if line.startswith(packageName + "."):
-               groupName       = packageName
-               rootGroup       = TestGroup(groupName)
-       else:
-               print(line)
-               assert False
-
-       for line in input:
-               addTestToHierarchy(rootGroup, line.strip());
-
-       return rootGroup
-
-def writeAndroidCTSTest(test, output):
-       output.write('<Test name="%s" />\n' % test.getName())
-
-def writeAndroidCTSTestCase(group, output):
-       assert group.hasTestCases()
-       assert not group.hasTestGroups()
-
-       output.write('<TestCase name="%s">\n' % group.getName())
-
-       for testCase in group.getTestCases():
-               writeAndroidCTSTest(testCase, output)
-
-       output.write('</TestCase>\n')
-
-def writeAndroidCTSTestSuite(group, output):
-       if group.getName() == "performance":
-               return;
-
-       output.write('<TestSuite name="%s">\n' % group.getName())
-
-       for childGroup in group.getTestGroups():
-               if group.getName() == "performance":
-                       continue;
-
-               if childGroup.hasTestCases():
-                       assert not childGroup.hasTestGroups()
-                       writeAndroidCTSTestCase(childGroup, output)
-               elif childGroup.hasTestGroups():
-                       writeAndroidCTSTestSuite(childGroup, output)
-               # \note Skips groups without testcases or child groups
-
-       output.write('</TestSuite>\n')
-
-def writeAndroidCTSFile(rootGroup, output, name, appPackageName, optionalAttrs):
-       optAttrsStr = ""
-
-       for k in optionalAttrs.keys():
-               optAttrsStr += " " + k + "=\"" + str(optionalAttrs[k]) + "\""
-
-       output.write('<?xml version="1.0" encoding="UTF-8"?>\n')
-       output.write('<TestPackage name="%s" appPackageName="%s" testType="deqpTest" xmlns:deqp="http://drawelements.com/deqp"%s>\n' % (name, appPackageName, optAttrsStr))
-
-       writeAndroidCTSTestSuite(rootGroup, output)
-
-       output.write('</TestPackage>\n')
-
-def getTemplateNames():
-       return [template.friendlyName for template in MODULE_TEMPLATES]
-
-def getTemplateByName(name):
-       matching = [template for template in MODULE_TEMPLATES if template.friendlyName == name]
-
-       assert len(matching) == 1
-       return matching[0]
-
-if __name__ == "__main__":
-       parser = argparse.ArgumentParser()
-       parser.add_argument('input',                              type=argparse.FileType('r'),    help="Input file containing dEQP test names.")
-       parser.add_argument('output',                             type=argparse.FileType('w'),    help="Output file for Android CTS test file.")
-       parser.add_argument('--module',       dest="module",      type=str,                       required=True, help="Name of the test module", choices=getTemplateNames())
-
-       args = parser.parse_args()
-
-       moduleTemplate = getTemplateByName(args.module)
-
-       optAttrs = {};
-       if moduleTemplate.version.getCTSEncodedGLESVersion():
-               optAttrs["deqp:glesVersion"] = moduleTemplate.version.getCTSEncodedGLESVersion()
-
-       rootGroup = loadTestHierarchy(args.input, moduleTemplate.packageName)
-       writeAndroidCTSFile(rootGroup, args.output, name=moduleTemplate.packageName, appPackageName=moduleTemplate.appPackageName, optionalAttrs=optAttrs)
diff --git a/scripts/build_android_mustpass.py b/scripts/build_android_mustpass.py
new file mode 100644 (file)
index 0000000..ba294e3
--- /dev/null
@@ -0,0 +1,438 @@
+# -*- coding: utf-8 -*-\r
+\r
+#-------------------------------------------------------------------------\r
+# drawElements Quality Program utilities\r
+# --------------------------------------\r
+#\r
+# Copyright 2015 The Android Open Source Project\r
+#\r
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+#\r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.\r
+#\r
+#-------------------------------------------------------------------------\r
+\r
+from build.common import *\r
+from build.config import ANY_GENERATOR\r
+from build.build import build\r
+from build_caselists import Module, getBuildConfig, genCaseList, getCaseListPath, DEFAULT_BUILD_DIR, DEFAULT_TARGET\r
+from fnmatch import fnmatch\r
+from copy import copy\r
+\r
+import xml.etree.cElementTree as ElementTree\r
+import xml.dom.minidom as minidom\r
+\r
+CTS_DATA_DIR   = os.path.join(DEQP_DIR, "android", "cts")\r
+\r
+class Configuration:\r
+       def __init__ (self, name, glconfig, rotation, surfacetype, filters):\r
+               self.name                       = name\r
+               self.glconfig           = glconfig\r
+               self.rotation           = rotation\r
+               self.surfacetype        = surfacetype\r
+               self.filters            = filters\r
+\r
+class Package:\r
+       def __init__ (self, module, configurations):\r
+               self.module                     = module\r
+               self.configurations     = configurations\r
+\r
+class Mustpass:\r
+       def __init__ (self, version, packages):\r
+               self.version    = version\r
+               self.packages   = packages\r
+\r
+class Filter:\r
+       TYPE_INCLUDE = 0\r
+       TYPE_EXCLUDE = 1\r
+\r
+       def __init__ (self, type, filename):\r
+               self.type               = type\r
+               self.filename   = filename\r
+\r
+class TestRoot:\r
+       def __init__ (self):\r
+               self.children   = []\r
+\r
+class TestGroup:\r
+       def __init__ (self, name):\r
+               self.name               = name\r
+               self.children   = []\r
+\r
+class TestCase:\r
+       def __init__ (self, name):\r
+               self.name                       = name\r
+               self.configurations     = []\r
+\r
+class GLESVersion:\r
+       def __init__(self, major, minor):\r
+               self.major = major\r
+               self.minor = minor\r
+\r
+       def encode (self):\r
+               return (self.major << 16) | (self.minor)\r
+\r
+def getModuleGLESVersion (module):\r
+       versions = {\r
+               'dEQP-GLES2':   GLESVersion(2,0),\r
+               'dEQP-GLES3':   GLESVersion(3,0),\r
+               'dEQP-GLES31':  GLESVersion(3,1)\r
+       }\r
+       return versions[module.name]\r
+\r
+def getSrcDir (mustpass):\r
+       return os.path.join(CTS_DATA_DIR, mustpass.version, "src")\r
+\r
+def getTmpDir (mustpass):\r
+       return os.path.join(CTS_DATA_DIR, mustpass.version, "tmp")\r
+\r
+def getModuleShorthand (module):\r
+       assert module.name[:5] == "dEQP-"\r
+       return module.name[5:].lower()\r
+\r
+def getCaseListFileName (package, configuration):\r
+       return "%s-%s.txt" % (getModuleShorthand(package.module), configuration.name)\r
+\r
+def getDstCaseListPath (mustpass, package, configuration):\r
+       return os.path.join(CTS_DATA_DIR, mustpass.version, getCaseListFileName(package, configuration))\r
+\r
+def getCTSPackageName (package):\r
+       return "com.drawelements.deqp." + getModuleShorthand(package.module)\r
+\r
+def getCommandLine (config):\r
+       return "--deqp-gl-config-name=%s --deqp-screen-rotation=%s --deqp-surface-type=%s" % (config.glconfig, config.rotation, config.surfacetype)\r
+\r
+def readCaseList (filename):\r
+       cases = []\r
+       with open(filename, 'rb') as f:\r
+               for line in f:\r
+                       if line[:6] == "TEST: ":\r
+                               cases.append(line[6:].strip())\r
+       return cases\r
+\r
+def getCaseList (mustpass, module):\r
+       generator       = ANY_GENERATOR\r
+       buildCfg        = getBuildConfig(DEFAULT_BUILD_DIR, DEFAULT_TARGET, "Debug")\r
+\r
+       build(buildCfg, generator, [module.binName])\r
+       genCaseList(buildCfg, generator, module, "txt")\r
+\r
+       return readCaseList(getCaseListPath(buildCfg, module, "txt"))\r
+\r
+def readPatternList (filename):\r
+       ptrns = []\r
+       with open(filename, 'rb') as f:\r
+               for line in f:\r
+                       line = line.strip()\r
+                       if len(line) > 0 and line[0] != '#':\r
+                               ptrns.append(line)\r
+       return ptrns\r
+\r
+def applyPatterns (caseList, patterns, op):\r
+       matched                 = set()\r
+       errors                  = []\r
+       curList                 = copy(caseList)\r
+       trivialPtrns    = [p for p in patterns if p.find('*') < 0]\r
+       regularPtrns    = [p for p in patterns if p.find('*') >= 0]\r
+\r
+       # Apply trivial (just case paths)\r
+       allCasesSet             = set(caseList)\r
+       for path in trivialPtrns:\r
+               if path in allCasesSet:\r
+                       if path in matched:\r
+                               errors.append((path, "Same case specified more than once"))\r
+                       matched.add(path)\r
+               else:\r
+                       errors.append((path, "Test case not found"))\r
+\r
+       curList = [c for c in curList if c not in matched]\r
+\r
+       for pattern in regularPtrns:\r
+               matchedThisPtrn = set()\r
+\r
+               for case in curList:\r
+                       if fnmatch(case, pattern):\r
+                               matchedThisPtrn.add(case)\r
+\r
+               if len(matchedThisPtrn) == 0:\r
+                       errors.append((pattern, "Pattern didn't match any cases"))\r
+\r
+               matched = matched | matchedThisPtrn\r
+               curList = [c for c in curList if c not in matched]\r
+\r
+       for pattern, reason in errors:\r
+               print "ERROR: %s: %s" % (reason, pattern)\r
+\r
+       if len(errors) > 0:\r
+               die("Found %s invalid patterns" % len(errors))\r
+\r
+       return [c for c in caseList if op(c in matched)]\r
+\r
+def applyInclude (caseList, patterns):\r
+       return applyPatterns(caseList, patterns, lambda b: b)\r
+\r
+def applyExclude (caseList, patterns):\r
+       return applyPatterns(caseList, patterns, lambda b: not b)\r
+\r
+def readPatternLists (mustpass):\r
+       lists = {}\r
+       for package in mustpass.packages:\r
+               for cfg in package.configurations:\r
+                       for filter in cfg.filters:\r
+                               if not filter.filename in lists:\r
+                                       lists[filter.filename] = readPatternList(os.path.join(getSrcDir(mustpass), filter.filename))\r
+       return lists\r
+\r
+def applyFilters (caseList, patternLists, filters):\r
+       res = copy(caseList)\r
+       for filter in filters:\r
+               ptrnList = patternLists[filter.filename]\r
+               if filter.type == Filter.TYPE_INCLUDE:\r
+                       res = applyInclude(res, ptrnList)\r
+               else:\r
+                       assert filter.type == Filter.TYPE_EXCLUDE\r
+                       res = applyExclude(res, ptrnList)\r
+       return res\r
+\r
+def appendToHierarchy (root, casePath):\r
+       def findChild (node, name):\r
+               for child in node.children:\r
+                       if child.name == name:\r
+                               return child\r
+               return None\r
+\r
+       curNode         = root\r
+       components      = casePath.split('.')\r
+\r
+       for component in components[:-1]:\r
+               nextNode = findChild(curNode, component)\r
+               if not nextNode:\r
+                       nextNode = TestGroup(component)\r
+                       curNode.children.append(nextNode)\r
+               curNode = nextNode\r
+\r
+       if not findChild(curNode, components[-1]):\r
+               curNode.children.append(TestCase(components[-1]))\r
+\r
+def buildTestHierachy (caseList):\r
+       root = TestRoot()\r
+       for case in caseList:\r
+               appendToHierarchy(root, case)\r
+       return root\r
+\r
+def buildTestCaseMap (root):\r
+       caseMap = {}\r
+\r
+       def recursiveBuild (curNode, prefix):\r
+               curPath = prefix + curNode.name\r
+               if isinstance(curNode, TestCase):\r
+                       caseMap[curPath] = curNode\r
+               else:\r
+                       for child in curNode.children:\r
+                               recursiveBuild(child, curPath + '.')\r
+\r
+       for child in root.children:\r
+               recursiveBuild(child, '')\r
+\r
+       return caseMap\r
+\r
+def include (filename):\r
+       return Filter(Filter.TYPE_INCLUDE, filename)\r
+\r
+def exclude (filename):\r
+       return Filter(Filter.TYPE_EXCLUDE, filename)\r
+\r
+def prettifyXML (doc):\r
+       uglyString      = ElementTree.tostring(doc, 'utf-8')\r
+       reparsed        = minidom.parseString(uglyString)\r
+       return reparsed.toprettyxml(indent='\t', encoding='utf-8')\r
+\r
+def genCTSPackageXML (package, root):\r
+       def isLeafGroup (testGroup):\r
+               numGroups       = 0\r
+               numTests        = 0\r
+\r
+               for child in testGroup.children:\r
+                       if isinstance(child, TestCase):\r
+                               numTests += 1\r
+                       else:\r
+                               numGroups += 1\r
+\r
+               assert numGroups + numTests > 0\r
+\r
+               if numGroups > 0 and numTests > 0:\r
+                       die("Mixed groups and cases in %s" % testGroup.name)\r
+\r
+               return numGroups == 0\r
+\r
+       def makeConfiguration (parentElem, configuration):\r
+               return ElementTree.SubElement(parentElem, "TestInstance", glconfig=configuration.glconfig, rotation=configuration.rotation, surfacetype=configuration.surfacetype)\r
+\r
+       def makeTestCase (parentElem, testCase):\r
+               caseElem = ElementTree.SubElement(parentElem, "Test", name=testCase.name)\r
+               for config in testCase.configurations:\r
+                       makeConfiguration(caseElem, config)\r
+               return caseElem\r
+\r
+       def makeTestGroup (parentElem, testGroup):\r
+               groupElem = ElementTree.SubElement(parentElem, "TestCase" if isLeafGroup(testGroup) else "TestSuite", name=testGroup.name)\r
+               for child in testGroup.children:\r
+                       if isinstance(child, TestCase):\r
+                               makeTestCase(groupElem, child)\r
+                       else:\r
+                               makeTestGroup(groupElem, child)\r
+               return groupElem\r
+\r
+       pkgElem = ElementTree.Element("TestPackage",\r
+                                                                 name                          = package.module.name,\r
+                                                                 appPackageName        = getCTSPackageName(package),\r
+                                                                 testType                      = "deqpTest")\r
+\r
+       pkgElem.set("xmlns:deqp", "http://drawelements.com/deqp")\r
+       pkgElem.set("deqp:glesVersion", str(getModuleGLESVersion(package.module).encode()))\r
+\r
+       for child in root.children:\r
+               makeTestGroup(pkgElem, child)\r
+\r
+       return pkgElem\r
+\r
+def genSpecXML (mustpass):\r
+       mustpassElem = ElementTree.Element("Mustpass", version = mustpass.version)\r
+\r
+       for package in mustpass.packages:\r
+               packageElem = ElementTree.SubElement(mustpassElem, "TestPackage", name = package.module.name)\r
+\r
+               for config in package.configurations:\r
+                       configElem = ElementTree.SubElement(packageElem, "Configuration",\r
+                                                                                               name                    = config.name,\r
+                                                                                               caseListFile    = getCaseListFileName(package, config),\r
+                                                                                               commandLine             = getCommandLine(config))\r
+\r
+       return mustpassElem\r
+\r
+def genMustpass (mustpass, moduleCaseLists):\r
+       print "Generating mustpass '%s'" % mustpass.version\r
+\r
+       patternLists = readPatternLists(mustpass)\r
+\r
+       for package in mustpass.packages:\r
+               allCasesInPkg           = moduleCaseLists[package.module]\r
+               matchingByConfig        = {}\r
+               allMatchingSet          = set()\r
+\r
+               for config in package.configurations:\r
+                       filtered        = applyFilters(allCasesInPkg, patternLists, config.filters)\r
+                       dstFile         = getDstCaseListPath(mustpass, package, config)\r
+\r
+                       print "  Writing deqp caselist: " + dstFile\r
+                       writeFile(dstFile, "\n".join(filtered) + "\n")\r
+\r
+                       matchingByConfig[config]        = filtered\r
+                       allMatchingSet                          = allMatchingSet | set(filtered)\r
+\r
+               allMatchingCases        = [c for c in allCasesInPkg if c in allMatchingSet] # To preserve ordering\r
+               root                            = buildTestHierachy(allMatchingCases)\r
+               testCaseMap                     = buildTestCaseMap(root)\r
+\r
+               for config in package.configurations:\r
+                       for case in matchingByConfig[config]:\r
+                               testCaseMap[case].configurations.append(config)\r
+\r
+               packageXml      = genCTSPackageXML(package, root)\r
+               xmlFilename     = os.path.join(CTS_DATA_DIR, mustpass.version, getCTSPackageName(package) + ".xml")\r
+\r
+               print "  Writing CTS caselist: " + xmlFilename\r
+               writeFile(xmlFilename, prettifyXML(packageXml))\r
+\r
+       specXML                 = genSpecXML(mustpass)\r
+       specFilename    = os.path.join(CTS_DATA_DIR, mustpass.version, "mustpass.xml")\r
+\r
+       print "  Writing spec: " + specFilename\r
+       writeFile(specFilename, prettifyXML(specXML))\r
+\r
+       print "Done!"\r
+\r
+def genMustpassLists (mustpassLists):\r
+       moduleCaseLists = {}\r
+\r
+       # Getting case lists involves invoking build, so we want to cache the results\r
+       for mustpass in mustpassLists:\r
+               for package in mustpass.packages:\r
+                       if not package.module in moduleCaseLists:\r
+                               moduleCaseLists[package.module] = getCaseList(mustpass, package.module)\r
+\r
+       for mustpass in mustpassLists:\r
+               genMustpass(mustpass, moduleCaseLists)\r
+\r
+GLES3_MODULE                           = Module(name = "dEQP-GLES3", dirName = "gles3", binName = "deqp-gles3")\r
+GLES31_MODULE                          = Module(name = "dEQP-GLES31", dirName = "gles31", binName = "deqp-gles31")\r
+\r
+LMP_GLES3_PKG                          = Package(module = GLES3_MODULE, configurations = [\r
+               Configuration(name                      = "master",\r
+                                         glconfig              = "rgba8888d24s8ms0",\r
+                                         rotation              = "unspecified",\r
+                                         surfacetype   = "window",\r
+                                         filters               = [include("es30-lmp.txt")]),\r
+       ])\r
+LMP_GLES31_PKG                         = Package(module = GLES31_MODULE, configurations = [\r
+               Configuration(name                      = "master",\r
+                                         glconfig              = "rgba8888d24s8ms0",\r
+                                         rotation              = "unspecified",\r
+                                         surfacetype   = "window",\r
+                                         filters               = [include("es31-lmp.txt")]),\r
+       ])\r
+\r
+LMP_MR1_GLES3_PKG                      = Package(module = GLES3_MODULE, configurations = [\r
+               Configuration(name                      = "master",\r
+                                         glconfig              = "rgba8888d24s8ms0",\r
+                                         rotation              = "unspecified",\r
+                                         surfacetype   = "window",\r
+                                         filters               = [include("es30-lmp-mr1.txt")]),\r
+       ])\r
+LMP_MR1_GLES31_PKG                     = Package(module = GLES31_MODULE, configurations = [\r
+               Configuration(name                      = "master",\r
+                                         glconfig              = "rgba8888d24s8ms0",\r
+                                         rotation              = "unspecified",\r
+                                         surfacetype   = "window",\r
+                                         filters               = [include("es31-lmp-mr1.txt")]),\r
+       ])\r
+\r
+MNC_GLES3_COMMON_FILTERS       = [exclude("gles3-hw-issues.txt"), exclude("gles3-test-issues.txt")]\r
+MNC_GLES3_PKG                          = Package(module = GLES3_MODULE, configurations = [\r
+               Configuration(name                      = "master",\r
+                                         glconfig              = "rgba8888d24s8ms0",\r
+                                         rotation              = "unspecified",\r
+                                         surfacetype   = "window",\r
+                                         filters               = MNC_GLES3_COMMON_FILTERS),\r
+               Configuration(name                      = "rotate-0",\r
+                                         glconfig              = "rgba8888d24s8ms0",\r
+                                         rotation              = "0",\r
+                                         surfacetype   = "window",\r
+                                         filters               = MNC_GLES3_COMMON_FILTERS + [include("gles3-rotation.txt")]),\r
+       ])\r
+\r
+MNC_GLES31_COMMON_FILTERS      = [exclude("gles31-hw-issues.txt"), exclude("gles31-test-issues.txt")]\r
+MNC_GLES31_PKG                         = Package(module = GLES31_MODULE, configurations = [\r
+               Configuration(name                      = "master",\r
+                                         glconfig              = "rgba8888d24s8ms0",\r
+                                         rotation              = "unspecified",\r
+                                         surfacetype   = "window",\r
+                                         filters               = MNC_GLES31_COMMON_FILTERS),\r
+       ])\r
+\r
+MUSTPASS_LISTS                         = [\r
+               Mustpass(version = "lmp",               packages = [LMP_GLES3_PKG, LMP_GLES31_PKG]),\r
+               Mustpass(version = "lmp-mr1",   packages = [LMP_MR1_GLES3_PKG, LMP_MR1_GLES31_PKG]),\r
+               Mustpass(version = "mnc",               packages = [MNC_GLES3_PKG, MNC_GLES31_PKG])\r
+       ]\r
+\r
+if __name__ == "__main__":\r
+       genMustpassLists(MUSTPASS_LISTS)\r
index 33ea8d4..a5edc3d 100644 (file)
@@ -1,5 +1,25 @@
 # -*- coding: utf-8 -*-
 
+#-------------------------------------------------------------------------
+# drawElements Quality Program utilities
+# --------------------------------------
+#
+# Copyright 2015 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.
+#
+#-------------------------------------------------------------------------
+
 from build.common import *
 from build.config import *
 from build.build import *
@@ -57,29 +77,32 @@ def getBuiltModules (buildCfg):
 
        return modules
 
-def getCaseListFileName (module):
-       return "%s-cases.xml" % module.name
+def getCaseListFileName (module, caseListType):
+       return "%s-cases.%s" % (module.name, caseListType)
+
+def getCaseListPath (buildCfg, module, caseListType):
+       return os.path.join(getModulesPath(buildCfg), module.dirName, getCaseListFileName(module, caseListType))
 
-def genCaseList (buildCfg, generator, module):
+def genCaseList (buildCfg, generator, module, caseListType):
        workDir = os.path.join(getModulesPath(buildCfg), module.dirName)
 
        pushWorkingDir(workDir)
 
        try:
                binPath = generator.getBinaryPath(buildCfg.getBuildType(), os.path.join(".", module.binName))
-               execute([binPath, "--deqp-runmode=xml-caselist"])
+               execute([binPath, "--deqp-runmode=%s-caselist" % caseListType])
        finally:
                popWorkingDir()
 
-def genAndCopyCaseList (buildCfg, generator, module, dstDir):
-       caseListFile    = getCaseListFileName(module)
-       srcPath                 = os.path.join(getModulesPath(buildCfg), module.dirName, caseListFile)
+def genAndCopyCaseList (buildCfg, generator, module, dstDir, caseListType):
+       caseListFile    = getCaseListFileName(module, caseListType)
+       srcPath                 = getCaseListPath(buildCfg, module, caseListType)
        dstPath                 = os.path.join(dstDir, caseListFile)
 
        if os.path.exists(srcPath):
                os.remove(srcPath)
 
-       genCaseList(buildCfg, generator, module)
+       genCaseList(buildCfg, generator, module, caseListType)
 
        if not os.path.exists(srcPath):
                raise Exception("%s not generated" % srcPath)
@@ -104,6 +127,10 @@ def parseArgs ():
                                                dest="targetName",
                                                default=DEFAULT_TARGET,
                                                help="dEQP build target")
+       parser.add_argument("--case-list-type",
+                                               dest="caseListType",
+                                               default="xml",
+                                               help="Case list type (xml, txt)")
        parser.add_argument("-m",
                                                "--modules",
                                                dest="modules",
@@ -132,4 +159,4 @@ if __name__ == "__main__":
 
        for module in modules:
                print "Generating test case list for %s" % module.name
-               genAndCopyCaseList(buildCfg, generator, module, args.dst)
+               genAndCopyCaseList(buildCfg, generator, module, args.dst, args.caseListType)