3 Commits

Author SHA1 Message Date
Giovanni Mascellani
154acd2c2b Release 1.7.1. 2023-05-03 21:46:28 +02:00
Henri Verbeet
cb2acc35f2 vkd3d-utils: Export D3D12CreateDevice() once again.
Commit d27fee64ab inadvertently stopped
exporting D3D12CreateDevice().
2023-05-03 21:46:27 +02:00
Conor McCarthy
7b9b0179ec vkd3d: Leave the command queue op mutex locked after a partial flush.
All return paths in d3d12_command_queue_flush_ops_locked() must
leave the op mutex locked.
2023-05-03 21:46:25 +02:00
277 changed files with 16288 additions and 63113 deletions

2
.gitignore vendored
View File

@@ -10,7 +10,6 @@ Makefile
Makefile.in Makefile.in
test-suite.log test-suite.log
/vkd3d-compiler /vkd3d-compiler
/vkd3d-dxbc
vkd3d-*.tar.xz vkd3d-*.tar.xz
@@ -23,7 +22,6 @@ vkd3d-*.tar.xz
*.tab.c *.tab.c
*.tab.h *.tab.h
*.trs *.trs
*.txt
*.yy.c *.yy.c
*~ *~

View File

@@ -1,11 +0,0 @@
stages:
- image
- build
- test
- deploy
include:
- local: "/gitlab/image.yml"
- local: "/gitlab/build.yml"
- local: "/gitlab/test.yml"
- local: "/gitlab/release.yml"

716
ANNOUNCE

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,4 @@
Akihiro Sagawa
Alexandre Julliard Alexandre Julliard
Alistair Leslie-Hughes
Andrew Eikum Andrew Eikum
Andrey Gusev Andrey Gusev
Atharva Nimbalkar Atharva Nimbalkar
@@ -10,31 +8,24 @@ Chip Davis
Conor McCarthy Conor McCarthy
David Gow David Gow
Derek Lesho Derek Lesho
Ethan Lee
Evan Tang
Fabian Maurer Fabian Maurer
Florian Weimer
Francisco Casas Francisco Casas
Francois Gouget Francois Gouget
Giovanni Mascellani Giovanni Mascellani
Hans-Kristian Arntzen Hans-Kristian Arntzen
Henri Verbeet Henri Verbeet
Isabella Bosia Isabella Bosia
Jacek Caban
Jactry Zeng Jactry Zeng
Jan Sikorski
Joshua Ashton Joshua Ashton
JĂłzef Kucia JĂłzef Kucia
Martin Storsjö Martin Storsjö
Matteo Bruni Matteo Bruni
Nikolay Sivov Nikolay Sivov
Petrichor Park
Philip Rebohle Philip Rebohle
Rémi Bernon Rémi Bernon
Robin Kertels Robin Kertels
Stefan Dösinger Stefan Dösinger
Sven Hesse Sven Hesse
Victor Chiletto
Vinson Lee Vinson Lee
Zebediah Figura Zebediah Figura
Zhiyi Zhang Zhiyi Zhang

View File

@@ -1,4 +1,4 @@
Copyright 2016-2024 the Vkd3d project authors (see the file AUTHORS for a Copyright 2016-2023 the Vkd3d project authors (see the file AUTHORS for a
complete list) complete list)
Vkd3d is free software; you can redistribute it and/or modify it under Vkd3d is free software; you can redistribute it and/or modify it under

View File

@@ -8,9 +8,6 @@ OUTPUT_DIRECTORY = doc
JAVADOC_AUTOBRIEF = YES JAVADOC_AUTOBRIEF = YES
OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_FOR_C = YES
EXTRACT_STATIC = YES EXTRACT_STATIC = YES
QUIET = YES
WARN_IF_UNDOCUMENTED = NO
LATEX_BATCHMODE = YES
INPUT = @srcdir@/include/vkd3d.h \ INPUT = @srcdir@/include/vkd3d.h \
@srcdir@/include/vkd3d_shader.h \ @srcdir@/include/vkd3d_shader.h \

File diff suppressed because it is too large Load Diff

36
README
View File

@@ -9,14 +9,14 @@ similar, but not identical, to Direct3D 12.
Building vkd3d Building vkd3d
============== ==============
Vkd3d depends on SPIRV-Headers and Vulkan-Headers (>= 1.3.228). Vkd3d depends on SPIRV-Headers and Vulkan-Headers (>= 1.2.139).
Vkd3d generates some of its headers from IDL files. If you are using the Vkd3d generates some of its headers from IDL files. If you are using the
release tarballs, then these headers are pre-generated and are included. If release tarballs, then these headers are pre-generated and are included. If
you are building from git, then they will be generated at build-time using you are building from git, then they will be generated at build-time using
widl. By default, vkd3d will use the widl found in `PATH'. If widl is not widl. By default, vkd3d will use the widl found in `PATH'. If widl is not
available or is not recent (>= 3.21), then you can build Wine with `make available or is not recent (>= 3.20), then you can build Wine with `make
tools/widl/widl' to avoid building all of Wine. You can then point vkd3d's tools/widl' to avoid building all of Wine. You can then point vkd3d's
configure at that widl binary with `WIDL="/path/to/widl"'. configure at that widl binary with `WIDL="/path/to/widl"'.
For release builds, you may want to define NDEBUG. If you do not need debug log For release builds, you may want to define NDEBUG. If you do not need debug log
@@ -47,8 +47,8 @@ commas or semicolons.
* NO_COLOR - this is an alias of NO_COLOUR. * NO_COLOR - this is an alias of NO_COLOUR.
* NO_COLOUR - when set, vkd3d-compiler and vkd3d-dxbc will default to * NO_COLOUR - when set, vkd3d-compiler will default to monochrome output,
monochrome output, even when the output supports colour. even when the output supports colour.
* VKD3D_CONFIG - a list of options that change the behavior of libvkd3d. * VKD3D_CONFIG - a list of options that change the behavior of libvkd3d.
* virtual_heaps - Create descriptors for each D3D12 root signature * virtual_heaps - Create descriptors for each D3D12 root signature
@@ -65,11 +65,6 @@ commas or semicolons.
* VKD3D_DISABLE_EXTENSIONS - a list of Vulkan extensions that libvkd3d should * VKD3D_DISABLE_EXTENSIONS - a list of Vulkan extensions that libvkd3d should
not use even if available. not use even if available.
* VKD3D_SHADER_CONFIG - a list of options that change the behavior of
libvkd3d-shader.
* force_validation - Enable (additional) validation of libvkd3d-shader's
internal representation of shaders.
* VKD3D_SHADER_DEBUG - controls the debug level for log messages produced by * VKD3D_SHADER_DEBUG - controls the debug level for log messages produced by
libvkd3d-shader. See VKD3D_DEBUG for accepted values. libvkd3d-shader. See VKD3D_DEBUG for accepted values.
@@ -87,24 +82,3 @@ commas or semicolons.
conditions in tests. conditions in tests.
* VKD3D_TEST_BUG - set to 0 to disable bug_if() conditions in tests. * VKD3D_TEST_BUG - set to 0 to disable bug_if() conditions in tests.
If the configuration defines 'DXCOMPILER_LIBS=-L/path/to/dxcompiler', Shader
Runner attempts to load libdxcompiler.so or dxcompiler.dll to compile test
shaders in Shader Model 6. LD_LIBRARY_PATH (linux), WINEPATH (wine) or PATH
(native windows) should include the location of dxcompiler if SM 6 shader
tests are desired. If dxcompiler is not found, Shader Runner will compile the
test shaders only in earlier shader models. The DXC source does not contain
code for adding DXBC checksums, so the official release should be installed
from:
https://github.com/microsoft/DirectXShaderCompiler/releases
================
Developing vkd3d
================
Development of vkd3d happens on the Wine GitLab instance
(https://gitlab.winehq.org/wine/vkd3d/). Contributors are encouraged
to submit their patches using the merge request tool.
Each merge request is automatically tested with the GitLab CI
system. See gitlab/README in the Git tree for more details.

View File

@@ -1,5 +1,5 @@
AC_PREREQ([2.69]) AC_PREREQ([2.69])
AC_INIT([vkd3d],[1.11]) AC_INIT([vkd3d],[1.7.1])
AC_CONFIG_AUX_DIR([bin]) AC_CONFIG_AUX_DIR([bin])
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR([m4])
@@ -9,7 +9,6 @@ AC_ARG_VAR([WIDL], [widl IDL compiler])
AC_ARG_VAR([CROSSCC32], [32-bit Windows cross compiler]) AC_ARG_VAR([CROSSCC32], [32-bit Windows cross compiler])
AC_ARG_VAR([CROSSCC64], [64-bit Windows cross compiler]) AC_ARG_VAR([CROSSCC64], [64-bit Windows cross compiler])
AC_ARG_WITH([ncurses], AS_HELP_STRING([--with-ncurses], [Build with the ncurses library (default: test)])) AC_ARG_WITH([ncurses], AS_HELP_STRING([--with-ncurses], [Build with the ncurses library (default: test)]))
AC_ARG_WITH([opengl], AS_HELP_STRING([--with-opengl], [Build with the OpenGL library (default: test)]))
AC_ARG_WITH([spirv-tools], AS_HELP_STRING([--with-spirv-tools], AC_ARG_WITH([spirv-tools], AS_HELP_STRING([--with-spirv-tools],
[Build with SPIRV-Tools library (default: disabled)])) [Build with SPIRV-Tools library (default: disabled)]))
AC_ARG_WITH([xcb], AS_HELP_STRING([--with-xcb], [Build with XCB library (default: test)])) AC_ARG_WITH([xcb], AS_HELP_STRING([--with-xcb], [Build with XCB library (default: test)]))
@@ -28,7 +27,7 @@ AC_PROG_CC
AM_PROG_CC_C_O AM_PROG_CC_C_O
AC_PROG_SED AC_PROG_SED
AC_PROG_MKDIR_P AC_PROG_MKDIR_P
VKD3D_PROG_WIDL(3, 21) VKD3D_PROG_WIDL(3, 20)
AS_IF([test "x$WIDL" = "xno"], [AC_MSG_WARN([widl is required to build header files.])]) AS_IF([test "x$WIDL" = "xno"], [AC_MSG_WARN([widl is required to build header files.])])
AC_CHECK_PROGS([FLEX], [flex], [none]) AC_CHECK_PROGS([FLEX], [flex], [none])
@@ -59,18 +58,12 @@ AS_IF([test "x${GCC}" = "xyes"],
VKD3D_CHECK_CFLAGS([-std=c99]) VKD3D_CHECK_CFLAGS([-std=c99])
VKD3D_CHECK_CFLAGS([-fvisibility=hidden]) VKD3D_CHECK_CFLAGS([-fvisibility=hidden])
VKD3D_CHECK_CFLAGS([-Wdeclaration-after-statement]) VKD3D_CHECK_CFLAGS([-Wdeclaration-after-statement])
VKD3D_CHECK_CFLAGS([-Wempty-body])
VKD3D_CHECK_CFLAGS([-Wenum-conversion])
VKD3D_CHECK_CFLAGS([-Wimplicit-fallthrough]) VKD3D_CHECK_CFLAGS([-Wimplicit-fallthrough])
VKD3D_CHECK_CFLAGS([-Winit-self]) VKD3D_CHECK_CFLAGS([-Winit-self])
VKD3D_CHECK_CFLAGS([-Wmissing-prototypes]) VKD3D_CHECK_CFLAGS([-Wmissing-prototypes])
VKD3D_CHECK_CFLAGS([-Wpointer-arith])
VKD3D_CHECK_CFLAGS([-Wshadow])
VKD3D_CHECK_CFLAGS([-Wshift-overflow=2])
VKD3D_CHECK_CFLAGS([-Wtype-limits])
VKD3D_CHECK_CFLAGS([-Wunused-but-set-parameter]) VKD3D_CHECK_CFLAGS([-Wunused-but-set-parameter])
VKD3D_CHECK_CFLAGS([-Wvla]) VKD3D_CHECK_CFLAGS([-Wvla])
VKD3D_CHECK_CFLAGS([-Wwrite-strings]) VKD3D_CHECK_CFLAGS([-Wpointer-arith])
VKD3D_CHECK_CFLAGS([-Wl,--no-undefined])]) VKD3D_CHECK_CFLAGS([-Wl,--no-undefined])])
dnl Check for cross compilers dnl Check for cross compilers
@@ -90,7 +83,7 @@ AS_IF([test "x$ac_cv_header_spirv_unified1_GLSL_std_450_h" != "xyes" \
-a "x$ac_cv_header_vulkan_GLSL_std_450_h" != "xyes"], -a "x$ac_cv_header_vulkan_GLSL_std_450_h" != "xyes"],
[AC_MSG_ERROR([GLSL.std.450.h not found.])]) [AC_MSG_ERROR([GLSL.std.450.h not found.])])
VKD3D_CHECK_VULKAN_HEADER_VERSION([228], [AC_MSG_ERROR([Vulkan headers are too old, 1.3.228 is required.])]) VKD3D_CHECK_VULKAN_HEADER_VERSION([139], [AC_MSG_ERROR([Vulkan headers are too old, 1.2.139 is required.])])
AC_CHECK_DECL([SpvCapabilityDemoteToHelperInvocationEXT],, [AC_MSG_ERROR([SPIR-V headers are too old.])], [ AC_CHECK_DECL([SpvCapabilityDemoteToHelperInvocationEXT],, [AC_MSG_ERROR([SPIR-V headers are too old.])], [
#ifdef HAVE_SPIRV_UNIFIED1_SPIRV_H #ifdef HAVE_SPIRV_UNIFIED1_SPIRV_H
@@ -127,20 +120,10 @@ AS_IF([test "x$SONAME_LIBVULKAN" = "x"],
[VKD3D_CHECK_VULKAN], [VKD3D_CHECK_VULKAN],
[AC_DEFINE_UNQUOTED([SONAME_LIBVULKAN],["$SONAME_LIBVULKAN"],[Define to the shared object name of the Vulkan library.])]) [AC_DEFINE_UNQUOTED([SONAME_LIBVULKAN],["$SONAME_LIBVULKAN"],[Define to the shared object name of the Vulkan library.])])
AC_ARG_VAR([SONAME_LIBDXCOMPILER], [shared object name for the dxcompiler library])
AC_ARG_VAR([DXCOMPILER_LIBS], [linker flags for the dxcompiler library])
AS_IF([test "x$SONAME_LIBDXCOMPILER" = "x"],
[VKD3D_CHECK_SONAME([dxcompiler], [DxcCreateInstance], [HAVE_DXCOMPILER=yes], [HAVE_DXCOMPILER=no], [$DXCOMPILER_LIBS])],
[AC_DEFINE_UNQUOTED([SONAME_LIBDXCOMPILER],["$SONAME_LIBDXCOMPILER"],[Define to the shared object name of the dxcompiler library.])])
AS_IF([test "x$with_ncurses" != "xno"], AS_IF([test "x$with_ncurses" != "xno"],
[PKG_CHECK_MODULES([NCURSES], [ncurses], [PKG_CHECK_MODULES([NCURSES], [ncurses],
[AC_DEFINE([HAVE_NCURSES], [1], [Define to 1 if you have ncurses.]) with_ncurses=yes], [AC_DEFINE([HAVE_NCURSES], [1], [Define to 1 if you have ncurses.]) with_ncurses=yes],
[with_ncurses=no])]) [with_ncurses=no])])
AS_IF([test "x$with_opengl" != "xno"],
[PKG_CHECK_MODULES([OPENGL], [egl opengl],
[AC_DEFINE([HAVE_OPENGL], [1], [Define to 1 if you have OpenGL.]) with_opengl=yes],
[with_opengl=no])])
AS_IF([test "x$with_spirv_tools" = "xyes"], AS_IF([test "x$with_spirv_tools" = "xyes"],
[PKG_CHECK_MODULES([SPIRV_TOOLS], [SPIRV-Tools-shared], [PKG_CHECK_MODULES([SPIRV_TOOLS], [SPIRV-Tools-shared],
[AC_DEFINE([HAVE_SPIRV_TOOLS], [1], [Define to 1 if you have SPIRV-Tools.])])], [AC_DEFINE([HAVE_SPIRV_TOOLS], [1], [Define to 1 if you have SPIRV-Tools.])])],
@@ -158,9 +141,7 @@ VKD3D_CHECK_FUNC([HAVE_BUILTIN_CLZ], [__builtin_clz], [__builtin_clz(0)])
VKD3D_CHECK_FUNC([HAVE_BUILTIN_POPCOUNT], [__builtin_popcount], [__builtin_popcount(0)]) VKD3D_CHECK_FUNC([HAVE_BUILTIN_POPCOUNT], [__builtin_popcount], [__builtin_popcount(0)])
VKD3D_CHECK_FUNC([HAVE_BUILTIN_ADD_OVERFLOW], [__builtin_add_overflow], [__builtin_add_overflow(0, 0, (int *)0)]) VKD3D_CHECK_FUNC([HAVE_BUILTIN_ADD_OVERFLOW], [__builtin_add_overflow], [__builtin_add_overflow(0, 0, (int *)0)])
VKD3D_CHECK_FUNC([HAVE_SYNC_ADD_AND_FETCH], [__sync_add_and_fetch], [__sync_add_and_fetch((int *)0, 0)]) VKD3D_CHECK_FUNC([HAVE_SYNC_ADD_AND_FETCH], [__sync_add_and_fetch], [__sync_add_and_fetch((int *)0, 0)])
VKD3D_CHECK_FUNC([HAVE_SYNC_BOOL_COMPARE_AND_SWAP], [__sync_bool_compare_and_swap], [__sync_bool_compare_and_swap((int *)0, 0, 0)]) VKD3D_CHECK_FUNC([HAVE_SYNC_SUB_AND_FETCH], [__sync_sub_and_fetch], [__sync_sub_and_fetch((int *)0, 0)])
VKD3D_CHECK_FUNC([HAVE_ATOMIC_EXCHANGE_N], [__atomic_exchange_n], [__atomic_exchange_n((int *)0, 0, 0)])
AC_CHECK_FUNCS([gettid])
dnl Makefiles dnl Makefiles
case $host_os in case $host_os in
@@ -197,10 +178,8 @@ AS_ECHO(["
widl: ${WIDL} widl: ${WIDL}
Have ncurses: ${with_ncurses} Have ncurses: ${with_ncurses}
Have OpenGL: ${with_opengl}
Have SPIRV-Tools: ${with_spirv_tools} Have SPIRV-Tools: ${with_spirv_tools}
Have xcb: ${HAVE_XCB} Have xcb: ${HAVE_XCB}
Have dxcompiler: ${HAVE_DXCOMPILER}
Building demos: ${enable_demos} Building demos: ${enable_demos}
Building tests: ${enable_tests} Building tests: ${enable_tests}

View File

@@ -19,7 +19,7 @@
#define VK_NO_PROTOTYPES #define VK_NO_PROTOTYPES
#define VK_USE_PLATFORM_XCB_KHR #define VK_USE_PLATFORM_XCB_KHR
#define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_11 #define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_7
#include "config.h" #include "config.h"
#include <vkd3d.h> #include <vkd3d.h>
#include <vkd3d_utils.h> #include <vkd3d_utils.h>
@@ -113,9 +113,6 @@ struct demo_swapchain
VkDevice vk_device; VkDevice vk_device;
ID3D12CommandQueue *command_queue; ID3D12CommandQueue *command_queue;
ID3D12Fence *present_fence;
unsigned long long present_count;
uint32_t current_buffer; uint32_t current_buffer;
unsigned int buffer_count; unsigned int buffer_count;
ID3D12Resource *buffers[1]; ID3D12Resource *buffers[1];
@@ -532,17 +529,6 @@ static inline struct demo_swapchain *demo_swapchain_create(ID3D12CommandQueue *c
} }
swapchain->buffer_count = image_count; swapchain->buffer_count = image_count;
free(vk_images); free(vk_images);
if (FAILED(ID3D12Device_CreateFence(d3d12_device, 0, 0, &IID_ID3D12Fence, (void **)&swapchain->present_fence)))
{
for (i = 0; i < image_count; ++i)
{
ID3D12Resource_Release(swapchain->buffers[i]);
}
free(swapchain);
goto fail;
}
swapchain->present_count = 0;
ID3D12Device_Release(d3d12_device); ID3D12Device_Release(d3d12_device);
ID3D12CommandQueue_AddRef(swapchain->command_queue = command_queue); ID3D12CommandQueue_AddRef(swapchain->command_queue = command_queue);
@@ -588,12 +574,6 @@ static inline void demo_swapchain_present(struct demo_swapchain *swapchain)
present_desc.pImageIndices = &swapchain->current_buffer; present_desc.pImageIndices = &swapchain->current_buffer;
present_desc.pResults = NULL; present_desc.pResults = NULL;
/* Synchronize vkd3d_acquire_vk_queue() with the Direct3D 12 work
* already submitted to the command queue. */
++swapchain->present_count;
ID3D12CommandQueue_Signal(swapchain->command_queue, swapchain->present_fence, swapchain->present_count);
ID3D12Fence_SetEventOnCompletion(swapchain->present_fence, swapchain->present_count, NULL);
vk_queue = vkd3d_acquire_vk_queue(swapchain->command_queue); vk_queue = vkd3d_acquire_vk_queue(swapchain->command_queue);
vkQueuePresentKHR(vk_queue, &present_desc); vkQueuePresentKHR(vk_queue, &present_desc);
vkd3d_release_vk_queue(swapchain->command_queue); vkd3d_release_vk_queue(swapchain->command_queue);
@@ -609,7 +589,6 @@ static inline void demo_swapchain_destroy(struct demo_swapchain *swapchain)
unsigned int i; unsigned int i;
ID3D12CommandQueue_Release(swapchain->command_queue); ID3D12CommandQueue_Release(swapchain->command_queue);
ID3D12Fence_Release(swapchain->present_fence);
for (i = 0; i < swapchain->buffer_count; ++i) for (i = 0; i < swapchain->buffer_count; ++i)
{ {
ID3D12Resource_Release(swapchain->buffers[i]); ID3D12Resource_Release(swapchain->buffers[i]);

View File

@@ -888,9 +888,6 @@ static int cxg_main(void)
} }
#ifdef _WIN32 #ifdef _WIN32
/* Do not trigger -Wmissing-prototypes. */
int wmain(void);
int wmain(void) int wmain(void)
#else #else
int main(void) int main(void)

View File

@@ -401,9 +401,6 @@ static int cxt_main(void)
} }
#ifdef _WIN32 #ifdef _WIN32
/* Do not trigger -Wmissing-prototypes. */
int wmain(void);
int wmain(void) int wmain(void)
#else #else
int main(void) int main(void)

View File

@@ -1,64 +0,0 @@
=====================
vkd3d testing scripts
=====================
These scripts are used by the GitLab CI feature to automatically run
the vkd3d tests on each merge request.
The CI target image-linux, in the file image.yml, builds a Docker
image based on Debian bookworm with all the packages required for
testing, and uploads it to the GitLab container registry. The Docker
script is in the file image.docker.
The file build.yml contains the actual testing targets. Currently
vkd3d is tested on Linux, on x86-64 and i386, each architecture with
two different Vulkan drivers (both from Mesa): llvmpipe (a software
implementation) and RADV (a hardware implementation backed by an AMD
GPU). vkd3d is also tested on macOS, with an Intel processor, using
MoltenVK as the Vulkan driver. The llvmpipe and macOS jobs are
currently allowed to fail.
Additionally, MinGW is used to build PE binaries for both vkd3d and
its crosstests, for both 32 and 64 bit. The PE crosstests are executed
on Windows 10 to check that behavior imposed by the tests corresponds
to Microsoft's D3D12 implementation. The rendering backend is
currently Window's WARP software implementation.
The testing logs are available as CI artifacts, as well as the PE
modules built by the crosstest and MinGW jobs.
Some custom runner configuration is required in order to run the tests
on an AMD GPU. Specifically, a runner tagged with `amd-gpu' must be
available with the following features:
* of course a sufficiently recent AMD GPU must be available to the
host;
* the host kernel must have the appropriate driver and firmware
installed;
* the runner must forward the DRI nodes to the guest; this can be
configured by adding the line
devices = ["/dev/dri"]
to the relevant [runners.docker] section in the config.toml file;
* the DRI render nodes must be readable and writable by GID 800,
either because they belong to that group (e.g. because the group
`render', which typically owns those files, has GID 800) or via a
FS ACL; such stipulation is needed because in Debian group `render'
is created dynamically, therefore has no predictable GID: the use
of a fixed GID enables the guest system to be set up so that the
user running the tests can access the render nodes.
A runner on an Intel macOS system tagged with `mac' must also be
available to run the macOS tests. Unfortunately a system like Docker
is not available in this case to provide an isolated standard
environment for running the tests. All the software required to
compile and run the tests will therefore have to be installed directly
on the host system. Complete instructions to setup the macOS are
currently not available.
Finally, a runner tagged with `win10-21h2' must be available and
submit jobs to a Windows 10 virtual machine.

View File

@@ -1,27 +0,0 @@
#!/bin/bash
echo "Building $(git log -1)"
echo "---"
COMMIT=$(printf '%03d-%s' $(git cherry $CI_MERGE_REQUEST_DIFF_BASE_SHA HEAD^ | wc -l) $(git rev-parse --short HEAD))
set -Eeuxo pipefail
# Building with -Wno-array-bounds because MinGW headers currently emit
# a lot of those
./autogen.sh
rm -fr build
mkdir build
cd build
../configure CROSSCC64="x86_64-w64-mingw32-gcc -Wno-array-bounds -Werror" CROSSCC32="i686-w64-mingw32-gcc -Wno-array-bounds -Werror" && \
make -j$(nproc) crosstest || \
touch ../pipeline_failed
mkdir -p ../artifacts/$COMMIT
rsync -Rr config.log tests/*.txt tests/*.exe ../artifacts/$COMMIT || true
# Make the driver easily available to the Windows CI job
cp tests/driver.cross64.exe ../artifacts
git reset --hard

View File

@@ -1,28 +0,0 @@
#!/bin/bash
echo "Building $(git log -1)"
echo "---"
COMMIT=$(printf '%03d-%s' $(git cherry $CI_MERGE_REQUEST_DIFF_BASE_SHA HEAD^ | wc -l) $(git rev-parse --short HEAD))
set -Eeuxo pipefail
./autogen.sh
rm -fr build
mkdir build
cd build
export LD_LIBRARY_PATH=/usr/local/lib
if ../configure --enable-demos --with-spirv-tools DXCOMPILER_LIBS="-L/usr/local/lib" CFLAGS="-g -O2 -Werror" CPPFLAGS="-DVKD3D_SHADER_UNSUPPORTED_DXIL" && \
make -j$(nproc) ; then
make -j$(nproc) AM_COLOR_TESTS=always check || \
touch ../tests_failed
else
touch ../build_failed
fi
cat tests/d3d12.log | grep -E 'd3d12: [0-9]+ tests executed' || true
mkdir -p ../artifacts/$COMMIT
rsync -Rr config.log doc/* test-suite.log tests/*.log tests/*/*.log ../artifacts/$COMMIT || true
git reset --hard

View File

@@ -1,27 +0,0 @@
#!/bin/bash
echo "Building $(git log -1)"
echo "---"
COMMIT=$(printf '%03d-%s' $(git cherry $CI_MERGE_REQUEST_DIFF_BASE_SHA HEAD^ | wc -l) $(git rev-parse --short HEAD))
set -Eeuxo pipefail
./autogen.sh
rm -fr build
mkdir build
cd build
if ../configure CFLAGS="-g -O2 -Wno-implicit-fallthrough -Werror" && \
make -j$(sysctl -n hw.ncpu) ; then
make -j$(sysctl -n hw.ncpu) AM_COLOR_TESTS=always check || \
touch ../tests_failed
else
touch ../build_failed
fi
cat tests/d3d12.log | grep -E 'd3d12: [0-9]+ tests executed' || true
mkdir -p ../artifacts/$COMMIT
rsync -Rr config.log test-suite.log tests/*.log tests/*/*.log ../artifacts/$COMMIT || true
git reset --hard

View File

@@ -1,25 +0,0 @@
#!/bin/bash
echo "Building $(git log -1)"
echo "---"
COMMIT=$(printf '%03d-%s' $(git cherry $CI_MERGE_REQUEST_DIFF_BASE_SHA HEAD^ | wc -l) $(git rev-parse --short HEAD))
set -Eeuxo pipefail
./autogen.sh
rm -fr build
mkdir build
cd build
mkdir vulkan-headers
cp -r /usr/include/vulkan /usr/include/vk_video /usr/include/spirv vulkan-headers
../configure --enable-demos --disable-doxygen-doc --without-ncurses --host=$HOST SONAME_LIBVULKAN="vulkan-1.dll" CPPFLAGS="-I$PWD/vulkan-headers" CFLAGS="-g -O2 -Wno-array-bounds -Werror" LDFLAGS="-static-libgcc" && \
make -j$(nproc) && \
make -j$(nproc) install DESTDIR="$PWD/destdir" || \
touch ../pipeline_failed
mkdir -p ../artifacts/$COMMIT
cp config.log ../artifacts/$COMMIT || true
cp destdir/usr/local/bin/* ../artifacts/$COMMIT || true
git reset --hard

View File

@@ -1,165 +0,0 @@
.build-linux:
stage: build
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
image: $CI_REGISTRY/wine/vkd3d:debian-bookworm
interruptible: true
needs:
- job: image-linux
optional: true
dependencies: []
script:
- git config --global --add safe.directory $CI_PROJECT_DIR
- git clean -fdx
- git reset --hard
- rm -fr .git/rebase-merge
- mkdir artifacts
- cat /proc/cpuinfo > artifacts/cpuinfo.txt
- cat /proc/meminfo > artifacts/meminfo.txt
- vulkaninfo > artifacts/vulkaninfo.txt
- git rebase $CI_MERGE_REQUEST_DIFF_BASE_SHA --exec ./gitlab/build-linux
- if [ -f build_failed ] ; then exit 1 ; fi
- if [ -f tests_failed ] ; then exit 2 ; fi
artifacts:
when: always
paths:
- artifacts
build-radv-64:
extends: .build-linux
tags:
- amd-gpu
variables:
VK_LOADER_DRIVERS_SELECT: 'radeon_*'
VKD3D_SHADER_CONFIG: 'force_validation'
build-llvmpipe-64:
extends: .build-linux
allow_failure:
exit_codes:
- 2
variables:
VK_LOADER_DRIVERS_SELECT: 'lvp_*'
VKD3D_SHADER_CONFIG: 'force_validation'
build-radv-32:
extends: .build-linux
tags:
- amd-gpu
variables:
VK_LOADER_DRIVERS_SELECT: 'radeon_*'
CC: 'i686-linux-gnu-gcc'
VKD3D_SHADER_CONFIG: 'force_validation'
build-llvmpipe-32:
extends: .build-linux
allow_failure:
exit_codes:
- 2
variables:
VK_LOADER_DRIVERS_SELECT: 'lvp_*'
CC: 'i686-linux-gnu-gcc'
VKD3D_SHADER_CONFIG: 'force_validation'
build-crosstest:
stage: build
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
image: $CI_REGISTRY/wine/vkd3d:debian-bookworm
interruptible: true
needs:
- job: image-linux
optional: true
dependencies: []
script:
- git config --global --add safe.directory $CI_PROJECT_DIR
- git clean -fdx
- git reset --hard
- rm -fr .git/rebase-merge
- mkdir artifacts
- cat /proc/cpuinfo > artifacts/cpuinfo.txt
- cat /proc/meminfo > artifacts/meminfo.txt
- vulkaninfo > artifacts/vulkaninfo.txt
- git rebase $CI_MERGE_REQUEST_DIFF_BASE_SHA --exec ./gitlab/build-crosstest
- if [ -f pipeline_failed ] ; then exit 1 ; fi
artifacts:
when: always
paths:
- artifacts
.build-mingw:
stage: build
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
image: $CI_REGISTRY/wine/vkd3d:debian-bookworm
interruptible: true
needs:
- job: image-linux
optional: true
dependencies: []
script:
- git config --global --add safe.directory $CI_PROJECT_DIR
- git clean -fdx
- git reset --hard
- rm -fr .git/rebase-merge
- mkdir artifacts
- cat /proc/cpuinfo > artifacts/cpuinfo.txt
- cat /proc/meminfo > artifacts/meminfo.txt
- git rebase $CI_MERGE_REQUEST_DIFF_BASE_SHA --exec ./gitlab/build-mingw
- if [ -f pipeline_failed ] ; then exit 1 ; fi
artifacts:
when: always
paths:
- artifacts
build-mingw-64:
extends: .build-mingw
variables:
HOST: "x86_64-w64-mingw32"
build-mingw-32:
extends: .build-mingw
variables:
HOST: "i686-w64-mingw32"
build-mac:
stage: build
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
allow_failure:
exit_codes:
- 2
interruptible: true
needs:
- job: image-mac
optional: true
dependencies: []
tags:
- mac
script:
- git config --global --add safe.directory $CI_PROJECT_DIR
- git clean -fdx
- git reset --hard
- rm -fr .git/rebase-merge
# We use a custom ICD which is not marked as a portability driver,
# so that test programs are not confused.
- ./gitlab/patch_moltenvk_icd.sh
- export VK_DRIVER_FILES="$PWD/gitlab/MoltenVK_icd.json"
- mkdir artifacts
- system_profiler SPSoftwareDataType SPHardwareDataType > artifacts/systeminfo.txt
- vulkaninfo > artifacts/vulkaninfo.txt
- export PATH="/usr/local/opt/bison/bin:/usr/local/opt/flex/bin:$PATH"
- curl -o image.zip https://gitlab.winehq.org/api/v4/projects/wine%2Fvkd3d/jobs/artifacts/master/download?job=image-mac
- unzip image.zip
- export PATH="$PWD/image/bin:$PATH"
- git rebase $CI_MERGE_REQUEST_DIFF_BASE_SHA --exec ./gitlab/build-mac
- if [ -f build_failed ] ; then exit 1 ; fi
- if [ -f tests_failed ] ; then exit 2 ; fi
variables:
VKD3D_DISABLE_EXTENSIONS: "VK_EXT_descriptor_indexing"
VKD3D_SHADER_CONFIG: 'force_validation'
MVK_CONFIG_LOG_LEVEL: 1
artifacts:
when: always
paths:
- artifacts

View File

@@ -1,73 +0,0 @@
# FROM line will be added dynamically
WORKDIR /tmp
# Package spirv-tools from Debian has two problems for us: first, it
# doesn't have shared libraries; second, it's not multiarch. So we
# have to rebuild it with some tweaks. In order to make it multiarch
# we also have to drop the executables, but we don't care about those
# anyway.
RUN export DEBIAN_FRONTEND=noninteractive; \
echo 'path-exclude=/usr/share/doc/*' > /etc/dpkg/dpkg.cfg.d/99-exclude-cruft && \
echo 'path-exclude=/usr/share/locale/*' >> /etc/dpkg/dpkg.cfg.d/99-exclude-cruft && \
echo 'path-exclude=/usr/share/man/*' >> /etc/dpkg/dpkg.cfg.d/99-exclude-cruft && \
echo 'APT::Install-Recommends "false";' > /etc/apt/apt.conf && \
echo '#!/bin/sh' > /usr/sbin/policy-rc.d && \
echo 'exit 101' >> /usr/sbin/policy-rc.d && \
chmod +x /usr/sbin/policy-rc.d && \
dpkg --add-architecture i386 && \
sed -i -e 's|Types: deb|Types: deb deb-src|g' /etc/apt/sources.list.d/* && \
apt-get update && \
apt-get dist-upgrade -y && \
apt-get install -y build-essential pkg-config gcc-mingw-w64 crossbuild-essential-i386 \
autoconf automake libtool flex bison curl \
git ca-certificates rsync \
doxygen doxygen-latex graphviz \
mesa-vulkan-drivers mesa-vulkan-drivers:i386 \
vulkan-tools spirv-headers \
libegl-dev libegl-dev:i386 \
libvulkan-dev libvulkan-dev:i386 \
libncurses-dev libncurses-dev:i386 \
libopengl-dev libopengl-dev:i386 \
libxcb1-dev libxcb1-dev:i386 \
libxcb-util-dev libxcb-util-dev:i386 \
libxcb-icccm4-dev libxcb-icccm4-dev:i386 \
libxcb-keysyms1-dev libxcb-keysyms1-dev:i386 && \
apt-get build-dep -y spirv-tools && \
apt-get build-dep -y -ai386 spirv-tools && \
git clone --depth 1 --branch wine-3.21 https://gitlab.winehq.org/wine/wine.git && \
cd wine && \
mkdir build && \
cd build && \
../configure --enable-win64 --without-x --without-freetype && \
make tools/widl/widl && \
cp tools/widl/widl /usr/local/bin && \
cd ../.. && \
rm -rf wine && \
apt-get source spirv-tools && \
cd spirv-tools-* && \
sed -i -e 's|-DBUILD_SHARED_LIBS=OFF|-DBUILD_SHARED_LIBS=ON|g' debian/rules && \
sed -i -e 's|dh_install$|dh_install \&\& rm debian/spirv-tools/usr/bin/*|g' debian/rules && \
sed -i '/Architecture: any/a Multi-Arch: same' debian/control && \
dpkg-buildpackage -uc -us && \
cd .. && \
rm -f spirv-tools-dbgsym_*.deb && \
dpkg -i spirv-tools_*.deb && \
rm -fr * && \
apt-get source spirv-tools && \
cd spirv-tools-* && \
sed -i -e 's|-DBUILD_SHARED_LIBS=OFF|-DBUILD_SHARED_LIBS=ON|g' debian/rules && \
sed -i -e 's|dh_install$|dh_install \&\& rm debian/spirv-tools/usr/bin/*|g' debian/rules && \
sed -i '/Architecture: any/a Multi-Arch: same' debian/control && \
CONFIG_SITE=/etc/dpkg-cross/cross-config.amd64 DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -ai386 -Pcross,nocheck -uc -us && \
cd .. && \
rm -f spirv-tools-dbgsym_*.deb && \
dpkg -i spirv-tools_*.deb && \
rm -fr * && \
apt-get clean && \
curl -L -s https://github.com/microsoft/DirectXShaderCompiler/releases/download/v1.7.2308/linux_dxc_2023_08_14.x86_64.tar.gz | tar zx -C /usr/local ./lib/libdxcompiler.so ./lib/libdxil.so && \
groupadd host-render -g 800 && \
useradd -m gitlab -G host-render
USER gitlab

View File

@@ -1,49 +0,0 @@
image-linux:
stage: image
rules:
- if: $CI_PIPELINE_SOURCE == 'push' && $CI_PROJECT_PATH == "wine/vkd3d" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
changes:
- .gitlab-ci.yml
- gitlab/image.yml
- gitlab/image.docker
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
variables:
IMAGE_SOURCE: "$CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX/debian:bookworm"
IMAGE_LOCAL: "$CI_REGISTRY_IMAGE:debian-bookworm"
DOCKER_FILE: "$CI_PROJECT_DIR/gitlab/image.docker"
script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(printf "%s:%s" "$CI_REGISTRY_USER" "$CI_REGISTRY_PASSWORD" | base64 | tr -d '\n')\"},\"$CI_DEPENDENCY_PROXY_SERVER\":{\"auth\":\"$(printf "%s:%s" "$CI_DEPENDENCY_PROXY_USER" "$CI_DEPENDENCY_PROXY_PASSWORD" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
- sed -i "1iFROM $IMAGE_SOURCE" "$DOCKER_FILE"
- /kaniko/executor --context "$CI_PROJECT_DIR" --dockerfile "$DOCKER_FILE" --destination "$IMAGE_LOCAL"
image-mac:
stage: image
rules:
- if: $CI_PIPELINE_SOURCE == 'push' && $CI_PROJECT_PATH == "wine/vkd3d" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
changes:
- .gitlab-ci.yml
- gitlab/image.yml
interruptible: true
tags:
- mac
script:
- mkdir image
- cd image
- mkdir bin
- export PATH="/usr/local/opt/bison/bin:/usr/local/opt/flex/bin:$PATH"
- git clone --depth 1 --branch wine-3.21 https://gitlab.winehq.org/wine/wine.git
- cd wine
- mkdir build
- cd build
- ../configure --enable-win64 --without-x --without-freetype
- make tools/widl/widl
- cd ../..
- cp wine/build/tools/widl/widl bin
- rm -fr wine
- cd ..
artifacts:
paths:
- image

Some files were not shown because too many files have changed in this diff Show More