From dc4dbe2f4fce65d4a294cef1c5948df8a2b0d518 Mon Sep 17 00:00:00 2001 From: Lorenzo Rossi Date: Thu, 30 Apr 2026 18:22:37 +0200 Subject: [PATCH 1/5] pan/bi: Vectorize f2f16 on v10 and earlier Signed-off-by: Lorenzo Rossi Reviewed-by: Lars-Ivar Hesselberg Simonsen --- src/panfrost/compiler/bifrost/bifrost_nir.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/panfrost/compiler/bifrost/bifrost_nir.c b/src/panfrost/compiler/bifrost/bifrost_nir.c index 2fef5f4c834..e2772d2c755 100644 --- a/src/panfrost/compiler/bifrost/bifrost_nir.c +++ b/src/panfrost/compiler/bifrost/bifrost_nir.c @@ -124,7 +124,8 @@ bi_vectorize_filter(const nir_instr *instr, const void *data) case nir_op_ball_iequal4: case nir_op_bany_inequal2: case nir_op_bany_inequal3: - case nir_op_bany_inequal4: return 1; + case nir_op_bany_inequal4: + return 1; case nir_op_pack_uvec2_to_uint: case nir_op_pack_uvec4_to_uint: return 0; @@ -137,12 +138,16 @@ bi_vectorize_filter(const nir_instr *instr, const void *data) case nir_op_extract_i16: case nir_op_insert_u16: return 1; - /* On v11+, we lost all packed F16 conversions */ case nir_op_f2f16: case nir_op_f2f16_rtz: case nir_op_f2f16_rtne: case nir_op_u2f16: case nir_op_i2f16: + /* On v10 and earlier we can take 2 32-bit floats as srcs, while on v11+ + * we lost all packed F16 conversions. + */ + return (pan_arch(gpu_id) >= 11) ? 1 : 2; + /* On v11+, we lost packed 16-bit frexp_* */ case nir_op_frexp_sig: case nir_op_frexp_exp: if (pan_arch(gpu_id) >= 11) From ee721bb6688593b95cc4c795bbf2295f29acabe7 Mon Sep 17 00:00:00 2001 From: Lorenzo Rossi Date: Tue, 28 Apr 2026 17:23:16 +0200 Subject: [PATCH 2/5] pan/bi: Switch old license texts to SPDX Signed-off-by: Lorenzo Rossi Reviewed-by: Lars-Ivar Hesselberg Simonsen --- .../compiler/pan_nir_lower_bool_to_bitsize.c | 20 +------------------ .../compiler/pan_nir_resize_varying_io.c | 20 +------------------ 2 files changed, 2 insertions(+), 38 deletions(-) diff --git a/src/panfrost/compiler/pan_nir_lower_bool_to_bitsize.c b/src/panfrost/compiler/pan_nir_lower_bool_to_bitsize.c index 8b8815091e8..25cb94c78ce 100644 --- a/src/panfrost/compiler/pan_nir_lower_bool_to_bitsize.c +++ b/src/panfrost/compiler/pan_nir_lower_bool_to_bitsize.c @@ -1,24 +1,6 @@ /* * Copyright © 2018 Intel Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. + * SPDX-License-Identifier: MIT */ #include "pan_nir.h" diff --git a/src/panfrost/compiler/pan_nir_resize_varying_io.c b/src/panfrost/compiler/pan_nir_resize_varying_io.c index 506d473fa97..1aec342a975 100644 --- a/src/panfrost/compiler/pan_nir_resize_varying_io.c +++ b/src/panfrost/compiler/pan_nir_resize_varying_io.c @@ -1,24 +1,6 @@ /* * Copyright (c) 2025 Collabora, Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. + * SPDX-License-Identifier: MIT */ #include "pan_nir.h" From c92853198e22d411f124a14b4b436602a9c3e2ba Mon Sep 17 00:00:00 2001 From: Lorenzo Rossi Date: Tue, 5 May 2026 16:05:22 +0200 Subject: [PATCH 3/5] pan/mid/fuse_io_cvt: Disable fusion on highp As discussed on gitlab, we should not convert before interpolation at highp. Signed-off-by: Lorenzo Rossi Reviewed-by: Lars-Ivar Hesselberg Simonsen --- src/panfrost/compiler/midgard/nir_fuse_io_16.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/panfrost/compiler/midgard/nir_fuse_io_16.c b/src/panfrost/compiler/midgard/nir_fuse_io_16.c index e2b396b633f..2755df550c7 100644 --- a/src/panfrost/compiler/midgard/nir_fuse_io_16.c +++ b/src/panfrost/compiler/midgard/nir_fuse_io_16.c @@ -41,6 +41,10 @@ nir_fuse_io_16(nir_shader *shader) if (intr->def.bit_size != 32) continue; + /* Do not change interpolation precision in highp */ + if (!nir_intrinsic_io_semantics(intr).medium_precision) + continue; + /* We swizzle at a 32-bit level so need a multiple of 2. We could * do a bit better and handle even components though */ if (nir_intrinsic_component(intr)) From 084417fd9d73d5b258d81d439bbe4de066b97868 Mon Sep 17 00:00:00 2001 From: Lorenzo Rossi Date: Tue, 28 Apr 2026 17:23:48 +0200 Subject: [PATCH 4/5] pan/bi: Add nir_fuse_io pass This pass fuses var loads + float conversions into the loads, it somehow slightly improves mediump precision and helps angle tests pass Signed-off-by: Lorenzo Rossi Reviewed-by: Lars-Ivar Hesselberg Simonsen --- src/panfrost/ci/panfrost-g925-fails.txt | 762 -------------------- src/panfrost/compiler/bifrost/bifrost_nir.c | 1 + src/panfrost/compiler/meson.build | 1 + src/panfrost/compiler/pan_nir.h | 3 + src/panfrost/compiler/pan_nir_fuse_io_cvt.c | 127 ++++ 5 files changed, 132 insertions(+), 762 deletions(-) create mode 100644 src/panfrost/compiler/pan_nir_fuse_io_cvt.c diff --git a/src/panfrost/ci/panfrost-g925-fails.txt b/src/panfrost/ci/panfrost-g925-fails.txt index bb7d4ce141d..8dd85f15b97 100644 --- a/src/panfrost/ci/panfrost-g925-fails.txt +++ b/src/panfrost/ci/panfrost-g925-fails.txt @@ -7,765 +7,3 @@ angle-KHR-GLES31.core.texture_cube_map_array.sampling,Fail # ANGLE now exposes paletted textures to ES2+, and there's a CTS bug caught by this # https://gitlab.khronos.org/opengl/API/-/issues/278 angle-dEQP-GLES2.functional.negative_api.texture.generatemipmap_zero_level_array_compressed,Fail - -# These fail when we enable mediump -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x10_srgb.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x5_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x6_srgb.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_10x8_srgb.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x10_srgb.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_12x12_srgb.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_4x4_srgb.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x4_srgb.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_5x5_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x5_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_6x6_srgb.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x5_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x6_srgb.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.clamp_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.mirror_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_mirror_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_mirror_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_mirror_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_mirror_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_linear_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_nearest_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.astc_8x8_srgb.repeat_repeat_nearest_not_divisible,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_r11.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_rg11.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_r11.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.eac_signed_rg11.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc1.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_rgba8.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_eac_srgb8_alpha8.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_rgb8_punchthrough_alpha1.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.clamp_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.mirror_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_mirror_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_mirror_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_mirror_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_repeat_linear_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_repeat_linear_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.etc2_srgb8_punchthrough_alpha1.repeat_repeat_nearest_pot,Fail -angle-dEQP-GLES3.functional.texture.wrap.rgba8.clamp_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.rgba8.mirror_repeat_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.rgba8.repeat_mirror_nearest_npot,Fail -angle-dEQP-GLES3.functional.texture.wrap.rgba8.repeat_repeat_nearest_npot,Fail diff --git a/src/panfrost/compiler/bifrost/bifrost_nir.c b/src/panfrost/compiler/bifrost/bifrost_nir.c index e2772d2c755..effaa263fdf 100644 --- a/src/panfrost/compiler/bifrost/bifrost_nir.c +++ b/src/panfrost/compiler/bifrost/bifrost_nir.c @@ -949,6 +949,7 @@ bifrost_postprocess_nir(nir_shader *nir, NIR_PASS(_, nir, pan_nir_lower_tex, gpu_id); NIR_PASS(_, nir, pan_nir_lower_image, gpu_id); + NIR_PASS(_, nir, pan_nir_fuse_io_cvt, gpu_id, &info->varyings.formats); /* Our OpenCL compiler (src/panfrost/clc/pan_compile.c) has a very weird and * suboptimal optimization pipeline that results in a lot of unoptimized * memcpys and sparse scratch space. That code is still being used for diff --git a/src/panfrost/compiler/meson.build b/src/panfrost/compiler/meson.build index 8a51e2c9ff4..ee3ae3df796 100644 --- a/src/panfrost/compiler/meson.build +++ b/src/panfrost/compiler/meson.build @@ -5,6 +5,7 @@ libpanfrost_compiler_files = files( 'pan_compiler.c', 'pan_compiler.h', 'pan_nir_collect_varyings.c', + 'pan_nir_fuse_io_cvt.c', 'pan_nir_lower_bool_to_bitsize.c', 'pan_nir_lower_var_special.c', 'pan_nir_lower_framebuffer.c', diff --git a/src/panfrost/compiler/pan_nir.h b/src/panfrost/compiler/pan_nir.h index ac84b41bb6e..bec99d2a8ee 100644 --- a/src/panfrost/compiler/pan_nir.h +++ b/src/panfrost/compiler/pan_nir.h @@ -262,4 +262,7 @@ uint32_t pan_nir_collect_noperspective_varyings_fs(nir_shader *s); bool pan_nir_resize_varying_io(nir_shader *nir, const struct pan_varying_layout *varying_layout); +bool pan_nir_fuse_io_cvt(nir_shader *nir, uint64_t gpu_id, + struct pan_varying_layout *layout); + #endif /* __PAN_NIR_H__ */ diff --git a/src/panfrost/compiler/pan_nir_fuse_io_cvt.c b/src/panfrost/compiler/pan_nir_fuse_io_cvt.c new file mode 100644 index 00000000000..7f5ec03d4bf --- /dev/null +++ b/src/panfrost/compiler/pan_nir_fuse_io_cvt.c @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2026 Collabora Ltd. + * SPDX-License-Identifier: MIT + */ +#include "pan_nir.h" + +static unsigned +nir_src_is_float_cvt(nir_src *use, bool *is_mp) +{ + nir_instr *parent = nir_src_parent_instr(use); + + if (parent->type != nir_instr_type_alu) + return 0; + + nir_alu_instr *alu = nir_instr_as_alu(parent); + + switch (alu->op) { + case nir_op_f2f16: + return 16; + case nir_op_f2fmp: + *is_mp |= true; + return 16; + case nir_op_f2f32: + return 32; + default: + return 0; + } +} + +static bool +op_supports_cvt_fusion(nir_intrinsic_instr *instr, uint64_t gpu_id) +{ + /* We might also convert LD_CVT but I haven't seen any case where it's + * useful, maybe enable it when we have a case to check it on. + */ + switch (instr->intrinsic) { + case nir_intrinsic_load_var_pan: + case nir_intrinsic_load_var_buf_pan: + /* LD_VAR[_BUF] performs conversion BEFORE interpolation, we cannot + * just change the interpolation semantics at highp. mediump on the + * other hand lets us juggle between 32 and 16 bits freely. + */ + return nir_intrinsic_io_semantics(instr).medium_precision; + case nir_intrinsic_load_var_flat_pan: + return true; + case nir_intrinsic_load_var_buf_flat_pan: + /* TODO: v14 can even fuse flat buf conversions */ + return false; + default: + return false; + } +} + +struct fuse_ctx { + uint64_t gpu_id; + struct pan_varying_layout *layout; +}; + +static bool +fuse_io_instr(struct nir_builder *b, nir_intrinsic_instr *intr, void *data) +{ + const struct fuse_ctx *ctx = data; + + if (!op_supports_cvt_fusion(intr, ctx->gpu_id)) + return false; + + unsigned orig_bit_size = intr->def.bit_size; + assert(orig_bit_size == 32 || orig_bit_size == 16); + unsigned converted_bit_size = orig_bit_size == 32 ? 16 : 32; + bool is_mp = false; + + /* Check if all usages are conversions */ + nir_foreach_use_including_if(src, &intr->def) { + if (nir_src_is_if(src) || + nir_src_is_float_cvt(src, &is_mp) != converted_bit_size) + return false; + } + + /* If they are, the load is always followed by conversion and we thus can + * fuse the cvt into the load. + */ + intr->def.bit_size = converted_bit_size; + /* Update the dest_type. This will not change the in-memory representation + * of _buf intrinsics as those are stored in the src_type. + */ + if (nir_intrinsic_has_dest_type(intr)) { + nir_alu_type dest_type = nir_intrinsic_dest_type(intr); + nir_alu_type base_type = nir_get_glsl_base_type_for_nir_type(dest_type); + nir_intrinsic_set_dest_type(intr, nir_type_float | converted_bit_size); + + if (base_type != nir_type_float) { + const nir_io_semantics sem = nir_intrinsic_io_semantics(intr); + + /* Right now we have int descriptors, but the loaded value is always + * used as a flot, no harm in just "promoting" it to float. The cast + * is to discard the const modifier, this is safe. + */ + struct pan_varying_slot *slot = (struct pan_varying_slot *) + pan_varying_layout_find_slot(ctx->layout, sem.location); + slot->alu_type = nir_alu_type_get_type_size(slot->alu_type) | + nir_type_float; + } + } + + /* We don't remove conversions, nir_opt_algebraic will fold f2f16 a@16 + * and f2f32 a@32 automatically, everything but f2fmp of course. + */ + if (is_mp) { + b->cursor = nir_after_instr(&intr->instr); + nir_def *up_cvt = nir_f2f32(b, &intr->def); + nir_def_rewrite_uses_after(&intr->def, up_cvt); + } + + return true; +} + +bool +pan_nir_fuse_io_cvt(nir_shader *nir, uint64_t gpu_id, + struct pan_varying_layout *layout) +{ + struct fuse_ctx ctx = { + .gpu_id = gpu_id, + .layout = layout, + }; + return nir_shader_intrinsics_pass(nir, fuse_io_instr, + nir_metadata_control_flow, (void *)&ctx); +} From ac339e6ace2dac59bec0db14aad0aee72d64c3d4 Mon Sep 17 00:00:00 2001 From: Lorenzo Rossi Date: Mon, 4 May 2026 15:24:22 +0200 Subject: [PATCH 5/5] pan/bi: Add a printing helper for pan_varying_layout This is just something I had to type again and again to figure out layout bugs, maybe it's better to just write it once and leave it disabled by default. Right now it's not printing nir_alu_type since the printing functions are private in nir_print.c and I don't want to expose that. Signed-off-by: Lorenzo Rossi Reviewed-by: Lars-Ivar Hesselberg Simonsen --- .../compiler/pan_nir_collect_varyings.c | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/panfrost/compiler/pan_nir_collect_varyings.c b/src/panfrost/compiler/pan_nir_collect_varyings.c index a9556b073c5..c7a43af4b7b 100644 --- a/src/panfrost/compiler/pan_nir_collect_varyings.c +++ b/src/panfrost/compiler/pan_nir_collect_varyings.c @@ -9,6 +9,8 @@ #include "pan_nir.h" #include "panfrost/model/pan_model.h" +#define DEBUG_PRINT false + enum pipe_format pan_varying_format(nir_alu_type t, unsigned ncomps) { @@ -47,6 +49,49 @@ pan_varying_format(nir_alu_type t, unsigned ncomps) UNREACHABLE("Invalid type"); } +static void +pan_print_varying_layout(FILE *f, nir_shader *s, + const struct pan_varying_layout *layout) +{ + const char *section_name[] = { + "POSITION", + "ATTRIBS", + "SPECIAL", + "GENERIC" + }; + + fprintf(f, "Layout for %s (%s):\n", s->info.name, + mesa_shader_stage_name(s->info.stage)); + fprintf(f, "Known:"); + if (layout->known == 0) { + fprintf(f, " empty"); + } else { + if (layout->known & PAN_VARYING_FORMAT_KNOWN) + fprintf(f, " format"); + if (layout->known & PAN_VARYING_LAYOUT_KNOWN) + fprintf(f, " layout"); + } + fprintf(f, "\n"); + + fprintf(f, "Varying count: %d\n", layout->count); + if (layout->known & PAN_VARYING_LAYOUT_KNOWN) + fprintf(f, "Generic size (bytes): %x\n", layout->generic_size_B); + for (unsigned i = 0; i < layout->count; i++) { + const struct pan_varying_slot *slot = + pan_varying_layout_slot_at(layout, i); + if (slot == NULL) + continue; + const char *loc_name = + gl_varying_slot_name_for_stage(slot->location, s->info.stage); + fprintf(f, "%02d: %s alu=%x comps=%d", i, loc_name, slot->alu_type, + slot->ncomps); + if (layout->known & PAN_VARYING_LAYOUT_KNOWN) + fprintf(f, " off=%x section=%s", slot->offset, + section_name[slot->section]); + fprintf(f, "\n"); + } +} + struct slot_info { nir_alu_type type; bool any_highp; @@ -359,6 +404,9 @@ pan_varying_collect_formats(struct pan_varying_layout *layout, nir_shader *nir, layout->count = count; layout->generic_size_B = 0; layout->known |= PAN_VARYING_FORMAT_KNOWN; + + if (DEBUG_PRINT) + pan_print_varying_layout(stderr, nir, layout); } void @@ -394,4 +442,7 @@ pan_build_varying_layout_compact(struct pan_varying_layout *layout, } layout->generic_size_B = generic_size_B; layout->known |= PAN_VARYING_LAYOUT_KNOWN; + + if (DEBUG_PRINT) + pan_print_varying_layout(stderr, nir, layout); }