gitlab-ci: Add jobs to be able to test Vulkan
authorAndres Gomez <agomez@igalia.com>
Thu, 20 Feb 2020 16:26:30 +0000 (18:26 +0200)
committerAndres Gomez <tanty@igalia.com>
Wed, 4 Mar 2020 13:24:03 +0000 (15:24 +0200)
Also, adds an example job for radv.

Signed-off-by: Andres Gomez <agomez@igalia.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
.gitlab-ci.yml
.gitlab-ci/prepare-artifacts.sh
.gitlab-ci/tracie-runner-gl.sh [new file with mode: 0755]
.gitlab-ci/tracie-runner-vk.sh [new file with mode: 0755]
.gitlab-ci/tracie-runner.sh [deleted file]
.gitlab-ci/tracie/README.md

index 999f4c0e995a30a3645909d8818982405884db01..63d3539c62bfb5c09e24a657b6ce69696c526a51 100644 (file)
@@ -722,19 +722,39 @@ radv_polaris10_vkcts:
   tags:
     - polaris10
 
+# Traces CI
 .traces-test:
-  extends:
-    - .test-gl
   cache:
     key: ${CI_JOB_NAME}
     paths:
       - .git-lfs-storage/
+
+.traces-test-gl:
+  extends:
+    - .test-gl
+    - .traces-test
   script:
-    - ./artifacts/tracie-runner.sh
+    - ./artifacts/tracie-runner-gl.sh
+
+.traces-test-vk:
+  extends:
+    - .test-vk
+    - .traces-test
+  script:
+    - ./artifacts/tracie-runner-vk.sh
 
 llvmpipe-traces:
+  extends: .traces-test-gl
   variables:
     LIBGL_ALWAYS_SOFTWARE: "true"
     GALLIUM_DRIVER: "llvmpipe"
     DEVICE_NAME: "gl-vmware-llvmpipe"
-  extends: .traces-test
+
+radv-polaris10-traces:
+  extends:
+    - .traces-test-vk
+    - .test-radv
+  variables:
+    DEVICE_NAME: "vk-amd-polaris10"
+  tags:
+    - polaris10
index 1d259ada8c41d8f689cf41880545b834b9db4651..93910528d996a25ae1afbe03428aaa2a293a9bdb 100755 (executable)
@@ -28,7 +28,8 @@ cp -Rp .gitlab-ci/deqp* artifacts/
 cp -Rp .gitlab-ci/piglit artifacts/
 cp -Rp .gitlab-ci/traces.yml artifacts/
 cp -Rp .gitlab-ci/tracie artifacts/
-cp -Rp .gitlab-ci/tracie-runner.sh artifacts/
+cp -Rp .gitlab-ci/tracie-runner-gl.sh artifacts/
+cp -Rp .gitlab-ci/tracie-runner-vk.sh artifacts/
 
 # Tar up the install dir so that symlinks and hardlinks aren't each
 # packed separately in the zip file.
diff --git a/.gitlab-ci/tracie-runner-gl.sh b/.gitlab-ci/tracie-runner-gl.sh
new file mode 100755 (executable)
index 0000000..7b5db08
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+set -ex
+
+ARTIFACTS="$(pwd)/artifacts"
+
+# Set up the driver environment.
+export LD_LIBRARY_PATH="$(pwd)/install/lib/"
+
+# Set environment for renderdoc libraries.
+export PYTHONPATH="$PYTHONPATH:/renderdoc/build/lib"
+export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/renderdoc/build/lib"
+
+# Perform a self-test to ensure tracie is working properly.
+"$ARTIFACTS/tracie/tests/test.sh"
+
+ret=0
+
+# The renderdoc version we use can handle surfaceless.
+EGL_PLATFORM=surfaceless DISPLAY= \
+    "$ARTIFACTS/tracie/tracie.sh" "$ARTIFACTS/traces.yml" renderdoc \
+    || ret=1
+
+# We need a newer waffle to use surfaceless with apitrace. For now run with
+# xvfb.
+xvfb-run --server-args="-noreset" sh -c \
+    "set -ex; \
+     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH; \
+     export PATH=/apitrace/build:\$PATH; \
+    \"$ARTIFACTS/tracie/tracie.sh\" \"$ARTIFACTS/traces.yml\" apitrace" \
+    || ret=1
+
+exit $ret
diff --git a/.gitlab-ci/tracie-runner-vk.sh b/.gitlab-ci/tracie-runner-vk.sh
new file mode 100755 (executable)
index 0000000..81ac001
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+set -ex
+
+ARTIFACTS="$(pwd)/artifacts"
+
+# Set the Vulkan driver to use.
+export VK_ICD_FILENAMES="$(pwd)/install/share/vulkan/icd.d/${VK_DRIVER}_icd.x86_64.json"
+
+# Set environment for VulkanTools' VK_LAYER_LUNARG_screenshot layer.
+export VK_LAYER_PATH="$VK_LAYER_PATH:/VulkanTools/build/etc/vulkan/explicit_layer.d"
+export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/VulkanTools/build/lib"
+
+# Perform a self-test to ensure tracie is working properly.
+"$ARTIFACTS/tracie/tests/test.sh"
+
+ret=0
+
+# Run gfxreconstruct traces against the host's running X server (xvfb
+# doesn't have DRI3 support).
+# Set the DISPLAY env variable in each gitlab-runner's configuration
+# file:
+# https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-section
+PATH="/gfxreconstruct/build/bin:$PATH" \
+    "$ARTIFACTS/tracie/tracie.sh"  "$ARTIFACTS/traces.yml" gfxreconstruct \
+    || ret=1
+
+exit $ret
diff --git a/.gitlab-ci/tracie-runner.sh b/.gitlab-ci/tracie-runner.sh
deleted file mode 100755 (executable)
index 7b5db08..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-
-set -ex
-
-ARTIFACTS="$(pwd)/artifacts"
-
-# Set up the driver environment.
-export LD_LIBRARY_PATH="$(pwd)/install/lib/"
-
-# Set environment for renderdoc libraries.
-export PYTHONPATH="$PYTHONPATH:/renderdoc/build/lib"
-export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/renderdoc/build/lib"
-
-# Perform a self-test to ensure tracie is working properly.
-"$ARTIFACTS/tracie/tests/test.sh"
-
-ret=0
-
-# The renderdoc version we use can handle surfaceless.
-EGL_PLATFORM=surfaceless DISPLAY= \
-    "$ARTIFACTS/tracie/tracie.sh" "$ARTIFACTS/traces.yml" renderdoc \
-    || ret=1
-
-# We need a newer waffle to use surfaceless with apitrace. For now run with
-# xvfb.
-xvfb-run --server-args="-noreset" sh -c \
-    "set -ex; \
-     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH; \
-     export PATH=/apitrace/build:\$PATH; \
-    \"$ARTIFACTS/tracie/tracie.sh\" \"$ARTIFACTS/traces.yml\" apitrace" \
-    || ret=1
-
-exit $ret
index 8ea51c6d598bed276db39ddb44d9208a991b9c1e..e7fccfaf481c91f88f9e0da6efaccf626424f83d 100644 (file)
@@ -50,15 +50,29 @@ individually, thus reducing storage requirements during CI runs.
 To enable trace testing on a new device:
 
 1. Create a new job in .gitlab-ci.yml. The job will need to be tagged
-   to run on runners with the appropriate hardware. Use the `.traces-test`
-   template job as a base, and make sure you set a unique value for the
-   `DEVICE_NAME` variable:
+   to run on runners with the appropriate hardware.
+
+   1. If you mean to test GL traces, use the `.traces-test-gl`
+      template jobs as a base, and make sure you set a unique value for the
+     `DEVICE_NAME` variable:
 
    ```yaml
-   my-hardware-traces:
+   my-hardware-gl-traces:
      extends: .traces-test-gl
      variables:
-       DEVICE_NAME: "myhardware"
+       DEVICE_NAME: "gl-myhardware"
+   ```
+
+   2. If you mean to test Vulkan traces, use the `.traces-test-vk`
+      template jobs as a base, set the `VK_DRIVER` variable, and make
+      sure you set a unique value for the `DEVICE_NAME` variable:
+
+   ```yaml
+   my-hardware-vk-traces:
+     extends: .traces-test-vk
+     variables:
+       VK_DRIVER: "radeon"
+       DEVICE_NAME: "vk-myhardware"
    ```
 
 2. Update the .gitlab-ci/traces.yml file with expectations for the new device.
@@ -68,8 +82,9 @@ To enable trace testing on a new device:
 
 ### Trace files
 
-Tracie supports both renderdoc (.rdc) and apitrace (.trace) files. Trace files
-need to have the correct extension so that tracie can detect them properly.
+Tracie supports renderdoc (.rdc), apitrace (.trace) and gfxreconstruct
+(.gfxr) files. Trace files need to have the correct extension so that
+tracie can detect them properly.
 
 The trace files that are contained in public traces-db repositories must be
 legally redistributable. This is typically true for FOSS games and
@@ -83,7 +98,8 @@ Mesa traces CI uses a set of scripts to replay traces and check the output
 against reference checksums.
 
 The high level script [tracie.sh](.gitlab-ci/tracie/tracie.sh) accepts
-a traces definition file and the type of traces (apitrace/renderdoc) to run:
+a traces definition file and the type of traces
+(apitrace/renderdoc/gfxreconstruct) to run:
 
     tracie.sh .gitlab-ci/traces.yml renderdoc
 
@@ -116,11 +132,23 @@ Examples:
 ### Running the replay scripts locally
 
 It's often useful, especially during development, to be able to run the scripts
-locally. The scripts require a recent version of apitrace being in the path,
-and also the renderdoc python module being available.
+locally.
+
+Depending on the target 3D API, the scripts require a recent version
+of apitrace being in the path, and also the renderdoc python module
+being available, for GL traces.
 
 To ensure python3 can find the renderdoc python module you need to set
 `PYTHONPATH` to point to the location of `renderdoc.so` (binary python modules)
 and `LD_LIBRARY_PATH` to point to the location of `librenderdoc.so`. In the
 renderdoc build tree, both of these are in `renderdoc/<builddir>/lib`. Note
 that renderdoc doesn't install the `renderdoc.so` python module.
+
+In the case of Vulkan traces, the scripts need a recent version of
+gfxrecon-replay being in the path, and also the
+`VK_LAYER_LUNARG_screenshot` Vulkan layer from LunarG's VulkanTools.
+
+To ensure that this layer can be found when running the trace you need
+to set `VK_LAYER_PATH` to point to the location of
+`VkLayer_screenshot.json` and `LD_LIBRARY_PATH` to point to the
+location of `libVkLayer_screenshot.so`.