| dEQP | |
| ==== | |
| These steps are specifically for testing SwiftShader's Vulkan implementation using dEQP on Windows (steps for Linux below the Windows instructions). | |
| Prerequisites | |
| ------------- | |
| 1. Install the latest [Python 3](https://www.python.org/downloads/) | |
| 2. Install [Visual Studio](https://visualstudio.microsoft.com/vs/community/) | |
| 3. Install [CMake](https://cmake.org/download/) | |
| 4. Install [Go](https://golang.org/doc/install) | |
| 5. Install [MinGW-W64](http://mingw-w64.org/doku.php/download) | |
| * Select 'x86_64' as Architecture during setup | |
| 6. Install [Git](https://git-scm.com/download/win) | |
| 7. Set environment variables: Config Panel -> System and Security -> System -> Advanced system settigns -> Environment Variables | |
| * Add `<path to python>` to your PATH environment variable | |
| * Add `<path to MinGW-W64>\bin` to your PATH environment variable | |
| 8. (Optional) Install [TortoiseGit](https://tortoisegit.org/) | |
| Getting the Code | |
| ---------------- | |
| 12. Get dEQP (either in 'cmd' or by using TortoiseGit): | |
| `git clone https://github.com/KhronosGroup/VK-GL-CTS` | |
| You may wish to check out a stable vulkan-cts-* branch. | |
| 13. Get dEQP's dependencies. In your dEQP root directory, open 'cmd' and run: | |
| `python3 external\fetch_sources.py` | |
| 14. Get Cherry (either in 'cmd' or by using TortoiseGit): | |
| `git clone https://android.googlesource.com/platform/external/cherry` | |
| 15. Set environment variable (see point 9): | |
| Add new variable GOPATH='`<path to cherry>`' | |
| Building the code | |
| ----------------- | |
| 16. Build dEQP's Visual Studio files using the CMake GUI, or, in the dEQP root dir, run: | |
| ``` | |
| mkdir build | |
| cd build | |
| cmake .. | |
| ``` | |
| Note: don't call 'cmake .' directly in the root directory. It will make things fails later on. If you do, simply erase the files created by CMake and follow the steps above. | |
| 17. Build dEQP: | |
| Open `<path to dEQP>\build\dEQP-Core-default.sln` in Visual Studio and Build Solution | |
| Note: Choose a 'Debug' build. | |
| 18. Generate test cases: | |
| ``` | |
| mkdir <path to cherry>\data | |
| cd <path to dEQP> | |
| python3 scripts\build_caselists.py <path to cherry>\data | |
| ``` | |
| Note: you need to run `python3 scripts\build_caselists.py <path to cherry>\data` every time you update dEQP. | |
| Preparing the server | |
| -------------------- | |
| 19. Edit `<path to cherry>\cherry\data.go` | |
| * Search for `../candy-build/deqp-wgl` and replace that by `<path to deqp>/build` | |
| * Just above, add an option to CommandLine: `--deqp-gl-context-type=egl` | |
| * Remove `--deqp-watchdog=enable` to avoid timeouts during debugging. | |
| Note: If you chose a Release build at step 17, modify the BinaryPath from 'Debug' to 'Release'. | |
| Testing Vulkan | |
| -------------- | |
| 20. Assuming you already built SwiftShader, copy and rename this file: | |
| `<path to SwiftShader>\build\Release_x64\vk_swiftshader.dll` or\ | |
| `<path to SwiftShader>\build\Debug_x64\vk_swiftshader.dll` | |
| To: | |
| `<path to dEQP>\build\external\vulkancts\modules\vulkan\Debug\vulkan-1.dll` | |
| This will cause dEQP to load SwiftShader's Vulkan implementatin directly, without going through a system-provided [loader](https://github.com/KhronosGroup/Vulkan-Loader/blob/master/loader/LoaderAndLayerInterface.md#the-loader) library or any layers. | |
| This step can also be automated by setting the `SWIFTSHADER_VULKAN_API_LIBRARY_INSTALL_PATH` environment variable to a path where we'd like the drop-in API library to be installed. For example `<path to dEQP>/build/external/vulkancts/modules/vulkan/Debug/`. | |
| To use SwiftShader as an [Installable Client Driver](https://github.com/KhronosGroup/Vulkan-Loader/blob/master/loader/LoaderAndLayerInterface.md#installable-client-drivers) (ICD) instead: | |
| * Edit environment variables: | |
| * Define VK_ICD_FILENAMES to `<path to SwiftShader>\src\Vulkan\vk_swiftshader_icd.json` | |
| * If the location of `vk_swiftshader.dll` you're using is different than the one specified in `src\Vulkan\vk_swiftshader_icd.json`, modify it to point to the `vk_swiftshader.dll` file you want to use. | |
| Running the tests | |
| ----------------- | |
| 21. Start the test server. Go to `<path to cherry>` and run: | |
| `go run server.go` | |
| 22. Open your favorite browser and navigate to `localhost:8080` | |
| Get Started -> Choose Device 'localhost' -> Select Tests 'dEQP-VK' -> Execute tests! | |
| Mustpass sets | |
| ------------- | |
| dEQP contains more tests than what is expected to pass by a conformant implementation (e.g. some tests are considered too strict, or assume certain undefined behavior). The [android/cts/master/vk-master.txt](https://android.googlesource.com/platform/external/deqp/+/master/android/cts/master/vk-master.txt) text file which can be loaded in Cherry's 'Test sets' tab to only run the latest tests expected to pass by certified Android devices. | |
| Linux | |
| ----- | |
| The Linux process is similar to Windows. However it doesn't use Release or Debug variants, paths use forward slashes, and it uses shared object files instead of DLLs. | |
| 1. Install the latest [Python 3](https://www.python.org/downloads/) | |
| 2. Install GCC and Make. In a terminal, run: | |
| `sudo apt-get install gcc make` | |
| 3. Install [CMake](https://cmake.org/download/) | |
| 4. Install [Go](https://golang.org/doc/install) | |
| 5. Install Git. In a terminal, run: | |
| `sudo apt-get install git` | |
| 6. Download the [Vulkan SDK](https://vulkan.lunarg.com/) and unpack it into a location you like. | |
| Getting the Code | |
| ---------------- | |
| 7. Get Swiftshader. In a terminal, go to the location you want to keep Swiftshader, and run: | |
| ``` | |
| git clone https://swiftshader.googlesource.com/SwiftShader && (cd SwiftShader && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit-review.googlesource.com/tools/hooks/commit-msg ; chmod +x `git rev-parse --git-dir`/hooks/commit-msg) | |
| ``` | |
| This will also install the commit hooks you need for committing to SwiftShader. | |
| 8. Get dEQP: | |
| `git clone https://github.com/KhronosGroup/VK-GL-CTS` | |
| 9. Get dEQP's dependencies. In your dEQP root directory, run: | |
| `python3 external/fetch_sources.py` | |
| 10. Get Cherry, similar to step 8: | |
| `git clone https://android.googlesource.com/platform/external/cherry` | |
| 11. Set environment variable. Open ~/.bashrc in your preferred editor and add the following line: | |
| GOPATH='`<path to cherry>`' | |
| Building the code | |
| ----------------- | |
| 12. Build Swiftshader. In the Swiftshader root dir, run: | |
| ``` | |
| cd build | |
| cmake .. | |
| make --jobs=$(nproc) | |
| ``` | |
| 13. Set your environment variables. In the terminal in which you'll be building dEQP, run the following commands: | |
| ``` | |
| export LD_LIBRARY_PATH="<Vulkan SDK location>/x86_64/lib:$LD_LIBRARY_PATH" | |
| export LD_LIBRARY_PATH="<Swiftshader location>/build:$LD_LIBRARY_PATH" | |
| ``` | |
| 14. Build dEQP. In the dEQP root dir, run: | |
| ``` | |
| mkdir build | |
| cd build | |
| cmake .. | |
| make --jobs=$(nproc) | |
| ``` | |
| Also: don't call 'cmake .' directly in the root directory. It will make things fails later on. If you do, simply erase the files created by CMake and follow the steps above. | |
| 15. Generate test cases: | |
| ``` | |
| mkdir <path to cherry>/data | |
| cd <path to dEQP> | |
| python3 scripts/build_caselists.py <path to cherry>/data | |
| ``` | |
| Note: you need to run `python3 scripts/build_caselists.py <path to cherry>/data` every time you update dEQP. | |
| Preparing the server | |
| -------------------- | |
| 16. Edit `<path to cherry>/cherry/data.go` | |
| * Search for ".exe" and remove all instances. | |
| * Search for `../candy-build/deqp-wgl/execserver/Release` and replace that by `<path to deqp>/build/execserver/execserver` | |
| * Just above, add an option to CommandLine: `--deqp-gl-context-type=egl` | |
| * Just below, remove 'Debug/' from the BinaryPath. | |
| * Just one more line below, replace `../candy-build/deqp-wgl/` with `<path to deqp>/build/modules/${TestPackageDir}`. | |
| * Remove `--deqp-watchdog=enable` to avoid timeouts during debugging. | |
| Testing Vulkan | |
| -------------- | |
| 17. Use SwiftShader as an [Installable Client Driver](https://github.com/KhronosGroup/Vulkan-Loader/blob/master/loader/LoaderAndLayerInterface.md#installable-client-drivers) (ICD). Add the following line to your `~/.bashrc`: | |
| `export VK_ICD_FILENAMES="<path to SwiftShader>/build/Linux/vk_swiftshader_icd.json"` | |
| Then run `source ~/.bashrc` in the terminal(s) you'll be running tests from. | |
| Running the tests | |
| ----------------- | |
| 18. Start the test server. Go to `<path to cherry>` and run: | |
| `go run server.go` | |
| 19. Open your favorite browser and navigate to `localhost:8080` | |
| Get Started -> Choose Device 'localhost' -> Select Tests 'dEQP-VK' -> Execute tests! | |
| 20. To make sure that you're running SwiftShader's drivers, select only the dEQP-VK->info->device test. In the next window, click on these tests in the left pane. If you see SwiftShader in the deviceName field, then you've set your suite up properly. | |
| 21. If you want to run Vulkan tests in the command line, go to the build directory in dEQP root. Then run the following command: | |
| `external/vulkanacts/modules/vulkan/deqp-vk` | |
| You can also run individual tests with: | |
| `external/vulkanacts/modules/vulkan/deqp-vk --deqp-case=<test name>` | |
| And you can find a list of the test names in `<Swiftshader root>/tests/regres/testlists/vk-master.txt` However, deqp-vk will cease upon the first failure. It's recommended that you use cherry for your testing needs unless you know what you're doing. | |
| 22. To check that you're running SwiftShader in cherry, start the server | |
| Mustpass sets | |
| ------------- | |
| dEQP contains more tests than what is expected to pass by a conformant implementation (e.g. some tests are considered too strict, or assume certain undefined behavior). The [android/cts/master/vk-master.txt](https://android.googlesource.com/platform/external/deqp/+/master/android/cts/master/vk-master.txt) text file which can be loaded in Cherry's 'Test sets' tab to only run the latest tests expected to pass by certified Android devices. |