From 2e3c445b680ed5dfbf65e85a3484a8e60c4abccc Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Thu, 1 Dec 2022 11:54:03 -0800 Subject: [PATCH] ci/anv: Add testing of the GLES CTS using ANGLE on TGL. We're interested in a Vulkan-only stack in Chrome OS, where Android's GLES would be provided by ANGLE-over-Venus-over-ANV. Let's get some testing covering ANGLE-on-ANV first. This is structured as a single partial job pre-merge to catch most regressions, and a longer manual job to do full coverage for when you need to update the xfails list. Part-of: --- .gitlab-ci/common/generate-env.sh | 1 + .gitlab-ci/deqp-runner.sh | 4 ++ .gitlab-ci/test-source-dep.yml | 6 ++ src/intel/ci/angle-anv-tgl-fails.txt | 29 ++++++++++ src/intel/ci/angle-anv-tgl-flakes.txt | 17 ++++++ src/intel/ci/angle-anv-tgl-skips.txt | 7 +++ src/intel/ci/deqp-anv-tgl-angle-full.toml | 68 ++++++++++++++++++++++ src/intel/ci/deqp-anv-tgl-angle.toml | 70 +++++++++++++++++++++++ src/intel/ci/gitlab-ci.yml | 20 +++++++ 9 files changed, 222 insertions(+) create mode 100644 src/intel/ci/angle-anv-tgl-fails.txt create mode 100644 src/intel/ci/angle-anv-tgl-flakes.txt create mode 100644 src/intel/ci/angle-anv-tgl-skips.txt create mode 100644 src/intel/ci/deqp-anv-tgl-angle-full.toml create mode 100644 src/intel/ci/deqp-anv-tgl-angle.toml diff --git a/.gitlab-ci/common/generate-env.sh b/.gitlab-ci/common/generate-env.sh index d9f422e9ef9..03ac086a0ab 100755 --- a/.gitlab-ci/common/generate-env.sh +++ b/.gitlab-ci/common/generate-env.sh @@ -110,6 +110,7 @@ for var in \ SKQP_ASSETS_DIR \ SKQP_BACKENDS \ TU_DEBUG \ + USE_ANGLE \ VIRGL_HOST_API \ WAFFLE_PLATFORM \ VK_CPU \ diff --git a/.gitlab-ci/deqp-runner.sh b/.gitlab-ci/deqp-runner.sh index 1121161f0bf..ae79d534862 100755 --- a/.gitlab-ci/deqp-runner.sh +++ b/.gitlab-ci/deqp-runner.sh @@ -21,6 +21,10 @@ export EGL_PLATFORM=surfaceless export VK_ICD_FILENAMES="$PWD"/install/share/vulkan/icd.d/"$VK_DRIVER"_icd.${VK_CPU:-$(uname -m)}.json export OCL_ICD_VENDORS="$PWD"/install/etc/OpenCL/vendors/ +if [ -n "$USE_ANGLE" ]; then + export LD_LIBRARY_PATH=/angle:$LD_LIBRARY_PATH +fi + RESULTS="$PWD/${DEQP_RESULTS_DIR:-results}" mkdir -p "$RESULTS" diff --git a/.gitlab-ci/test-source-dep.yml b/.gitlab-ci/test-source-dep.yml index f5e58f819f2..119d97ba867 100644 --- a/.gitlab-ci/test-source-dep.yml +++ b/.gitlab-ci/test-source-dep.yml @@ -924,6 +924,12 @@ - !reference [.iris-rules, rules] - !reference [.anv-rules, rules] +.intel-manual-rules: + stage: intel + rules: + - !reference [.iris-manual-rules, rules] + - !reference [.anv-manual-rules, rules] + .virgl-rules: stage: layered-backends rules: diff --git a/src/intel/ci/angle-anv-tgl-fails.txt b/src/intel/ci/angle-anv-tgl-fails.txt new file mode 100644 index 00000000000..1a13be522fb --- /dev/null +++ b/src/intel/ci/angle-anv-tgl-fails.txt @@ -0,0 +1,29 @@ +# Fails on both radv and anv: +# "Valid format used but glReadPixels failed for input = [GL_RED, GL_BYTE] output = [GL_RGBA, GL_UNSIGNED_BYTE]" +# Conclusion is it's an ext spec+test bug +# https://gitlab.khronos.org/opengl/API/-/issues/180 +KHR-GLES3.packed_pixels.pbo_rectangle.r8_snorm,Fail +KHR-GLES3.packed_pixels.pbo_rectangle.rg8_snorm,Fail +KHR-GLES3.packed_pixels.pbo_rectangle.rgba8_snorm,Fail +KHR-GLES3.packed_pixels.rectangle.r8_snorm,Fail +KHR-GLES3.packed_pixels.rectangle.rg8_snorm,Fail +KHR-GLES3.packed_pixels.rectangle.rgba8_snorm,Fail +KHR-GLES3.packed_pixels.varied_rectangle.r8_snorm,Fail +KHR-GLES3.packed_pixels.varied_rectangle.rg8_snorm,Fail +KHR-GLES3.packed_pixels.varied_rectangle.rgba8_snorm,Fail + +# ANGLE marks non-shadow linear-filtered textures incomplete (see GLES 3.2 spec +# 8.17 Texture Completeness), so you get a fallback texture sample, while Mesa +# incorrectly marks it complete. The CTS incorrectly expects texture +# completeness. +# https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/4292 +# https://bugs.chromium.org/p/angleproject/issues/detail?id=7877 +KHR-GLES31.core.texture_border_clamp.Texture2DDC16Linear,Fail +KHR-GLES31.core.texture_border_clamp.Texture2DDC32FLinear,Fail + +# Regression between ANGLE db67df60f8c8020017c36b2dd446bc3d86614ffe and +# 82f1cee01a9ea24960e8f23b24d348fccbe0aae0 +# Fails the same, with no validation complaints on ADL. Doesn't fail on CFL. +multisample-dEQP-GLES3.functional.depth_stencil_clear.depth_scissored,Fail +multisample-dEQP-GLES3.functional.depth_stencil_clear.depth_scissored_masked,Fail +multisample-dEQP-GLES3.functional.depth_stencil_clear.depth_stencil_scissored,Fail diff --git a/src/intel/ci/angle-anv-tgl-flakes.txt b/src/intel/ci/angle-anv-tgl-flakes.txt new file mode 100644 index 00000000000..a2581a0f443 --- /dev/null +++ b/src/intel/ci/angle-anv-tgl-flakes.txt @@ -0,0 +1,17 @@ +# May be bogus, happened around a bunch of interpolate_at_sample hangs +dEQP-GLES3.functional.rasterization.fbo.rbo_multisample_max.interpolation.lines_wide + +# The last quad that was supposed to be overwritten by red has a green triangle showing. +dEQP-GLES3.functional.multisample.fbo_8_samples.constancy_alpha_to_coverage + +dEQP-GLES3.functional.multisample.fbo_8_samples.constancy_both_inverted + +# "Failure: Non-zero green color component detected - should have been completely overwritten by red quad" +# the "rendered image" looks suspiciously black, though, which is the clear color? +dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_sample_coverage +dEQP-GLES3.functional.multisample.fbo_max_samples.constancy_sample_coverage_inverted + +# non-gpu-hang, frequent flakes that can happen deep in a series of copy_image tests. +# multiple fails per caselist, with those fails separated by passes! +dEQP-GLES31.functional.copy_image.mixed.viewclass_.*_mixed.* +dEQP-GLES31.functional.copy_image.*viewclass_.* diff --git a/src/intel/ci/angle-anv-tgl-skips.txt b/src/intel/ci/angle-anv-tgl-skips.txt new file mode 100644 index 00000000000..4ccedad2fd5 --- /dev/null +++ b/src/intel/ci/angle-anv-tgl-skips.txt @@ -0,0 +1,7 @@ +# Unlike zink which does support it, ANGLE relies on a waiver to not implement +# capturing individual array elements (see waivers.xml and gles3-waivers.txt in the CTS) +dEQP-GLES3.functional.transform_feedback.array_element.* +dEQP-GLES3.functional.transform_feedback.random.* +dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.*_array_element +dEQP-GLES31.functional.program_interface_query.transform_feedback_varying.type.*.array.* +KHR-GLES31.core.program_interface_query.transform-feedback-types diff --git a/src/intel/ci/deqp-anv-tgl-angle-full.toml b/src/intel/ci/deqp-anv-tgl-angle-full.toml new file mode 100644 index 00000000000..dd36a9e1c4c --- /dev/null +++ b/src/intel/ci/deqp-anv-tgl-angle-full.toml @@ -0,0 +1,68 @@ +# Basic test set +[[deqp]] +deqp = "/deqp/modules/gles2/deqp-gles2" +caselists = ["/deqp/mustpass/gles2-master.txt"] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms0", +] +version_check = "GL ES 3.1" +renderer_check = "ANGLE.*TGL" + +[[deqp]] +deqp = "/deqp/modules/gles3/deqp-gles3" +caselists = ["/deqp/mustpass/gles3-master.txt"] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms0", +] + +[[deqp]] +deqp = "/deqp/modules/gles31/deqp-gles31" +caselists = ["/deqp/mustpass/gles31-master.txt"] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms0", +] + +# Note that KHR-GL3* test sets include all tests from the previous +# version, so we only need to run one test list (unlike dEQP-GLES, +# where the test sets are separate). +[[deqp]] +deqp = "/deqp/external/openglcts/modules/glcts" +caselists = [ + "/deqp/mustpass/gles2-khr-master.txt", + "/deqp/mustpass/gles3-khr-master.txt", + "/deqp/mustpass/gles31-khr-master.txt", +] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms0", +] + +# 565-no-depth-no-stencil: Not supported with angle on X11? + +# multisample +[[deqp]] +deqp = "/deqp/modules/gles3/deqp-gles3" +caselists = ["/deqp/mustpass/gles3-multisample.txt"] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms4", +] +prefix = "multisample-" + +[[deqp]] +deqp = "/deqp/modules/gles31/deqp-gles31" +caselists = ["/deqp/mustpass/gles31-multisample.txt"] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms4", +] +prefix = "multisample-" diff --git a/src/intel/ci/deqp-anv-tgl-angle.toml b/src/intel/ci/deqp-anv-tgl-angle.toml new file mode 100644 index 00000000000..a17c4d6b994 --- /dev/null +++ b/src/intel/ci/deqp-anv-tgl-angle.toml @@ -0,0 +1,70 @@ +# Basic test set +[[deqp]] +deqp = "/deqp/modules/gles2/deqp-gles2" +caselists = ["/deqp/mustpass/gles2-master.txt"] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms0", +] +version_check = "GL ES 3.1" +renderer_check = "ANGLE.*TGL" + +[[deqp]] +deqp = "/deqp/modules/gles3/deqp-gles3" +caselists = ["/deqp/mustpass/gles3-master.txt"] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms0", +] +fraction = 3 + +[[deqp]] +deqp = "/deqp/modules/gles31/deqp-gles31" +caselists = ["/deqp/mustpass/gles31-master.txt"] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms0", +] +fraction = 3 + +# Note that KHR-GL3* test sets include all tests from the previous +# version, so we only need to run one test list (unlike dEQP-GLES, +# where the test sets are separate). +[[deqp]] +deqp = "/deqp/external/openglcts/modules/glcts" +caselists = [ + "/deqp/mustpass/gles2-khr-master.txt", + "/deqp/mustpass/gles3-khr-master.txt", + "/deqp/mustpass/gles31-khr-master.txt", +] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms0", +] + +# 565-no-depth-no-stencil: Not supported with angle on X11? + +# multisample +[[deqp]] +deqp = "/deqp/modules/gles3/deqp-gles3" +caselists = ["/deqp/mustpass/gles3-multisample.txt"] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms4", +] +prefix = "multisample-" + +[[deqp]] +deqp = "/deqp/modules/gles31/deqp-gles31" +caselists = ["/deqp/mustpass/gles31-multisample.txt"] +deqp_args = [ + "--deqp-surface-width=256", "--deqp-surface-height=256", + "--deqp-surface-type=pbuffer", "--deqp-visibility=hidden", + "--deqp-gl-config-name=rgba8888d24s8ms4", +] +prefix = "multisample-" diff --git a/src/intel/ci/gitlab-ci.yml b/src/intel/ci/gitlab-ci.yml index ea5f9ce2710..afb250b96f8 100644 --- a/src/intel/ci/gitlab-ci.yml +++ b/src/intel/ci/gitlab-ci.yml @@ -66,6 +66,26 @@ hasvk-hsw: variables: DEQP_FRACTION: 10 +anv-tgl-angle: + extends: + - .anv-tgl-test + - .intel-rules # Note: Xorg uses iris, so depend on both GL and vulkan + variables: + DEQP_SUITE: anv-tgl-angle + GPU_VERSION: angle-anv-tgl + VK_DRIVER: intel + USE_ANGLE: 1 + # ANGLE requires X11 running for some reason. + HWCI_START_XORG: 1 + +anv-tgl-angle-full: + extends: + - anv-tgl-angle + - .intel-manual-rules + variables: + DEQP_SUITE: anv-tgl-angle-full + JOB_TIMEOUT: 60 + ## Iris only # 5 boards .iris-apl-test: