Release 1.4.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Henri Verbeet 2022-06-22 16:09:04 +02:00 committed by Alexandre Julliard
parent 2cad32d7fa
commit 9d4df5e704
11 changed files with 68 additions and 124 deletions

166
ANNOUNCE
View File

@ -1,16 +1,17 @@
The Wine team is proud to announce that release 1.3 of vkd3d, the Direct3D to The Wine team is proud to announce that release 1.4 of vkd3d, the Direct3D to
Vulkan translation library, is now available. Vulkan translation library, is now available.
This release contains improvements that are listed in the release notes below. This release contains improvements that are listed in the release notes below.
The main highlights are: The main highlights are:
- Initial HLSL compilation support. - Many improvements to the HLSL compiler.
- Shader model 5.1 descriptor array support. - A new descriptor heap implementation using the VK_EXT_descriptor_indexing
- Support for disassembling Direct3D shaders. extension.
- A new fence implementation using the VK_KHR_timeline_semaphore extension.
The source is available from the following location: The source is available from the following location:
https://dl.winehq.org/vkd3d/source/vkd3d-1.3.tar.xz https://dl.winehq.org/vkd3d/source/vkd3d-1.4.tar.xz
The current source can also be pulled directly from the git repository: The current source can also be pulled directly from the git repository:
@ -21,136 +22,75 @@ for the complete list.
---------------------------------------------------------------- ----------------------------------------------------------------
What's new in vkd3d 1.3 What's new in vkd3d 1.4
======================= =======================
*** libvkd3d *** libvkd3d
- Newly implemented Direct3D 12 features: - A new descriptor heap implementation using the VK_EXT_descriptor_indexing
- Root signature support for unbounded descriptor tables. extension. In particular, the new implementation is more efficient when
- Unordered-access view counters in pixel shaders. These were previously large descriptor heaps are used by multiple command lists. The new
only supported in compute shaders. `virtual_heaps' configuration option can be used to select the original
- Output merger logical operations. implementation even when the VK_EXT_descriptor_indexing extension is
- Retrieving CPU/GPU timestamp calibration values. This requires support for available.
the VK_EXT_calibrated_timestamps extension.
- The `mirror_once' texture addressing mode. This requires support for the - A new fence implementation using the VK_KHR_timeline_semaphore extension.
VK_KHR_sampler_mirror_clamp_to_edge extension. The new implementation addresses a number of edge cases the original
implementation was unable to, as well as being somewhat more efficient.
- When the VK_EXT_robustness2 extension is available, it is used to implement
null views. This more accurately matches Direct3D 12 behaviour. For example,
all reads from such a null view return zeroes, while that isn't necessarily
the case for out-of-bounds reads with the original implementation.
- New interfaces: - New interfaces:
- The vkd3d_host_time_domain_info structure extends the - vkd3d_set_log_callback() allows writing log output via a custom callback.
vkd3d_instance_create_info structure, and can be used to specify how to This can be used to integrate vkd3d's log output with other logging
convert between timestamps and tick counts. If left unspecified, a tick systems.
is assumed to take 100 nanoseconds.
- Various bug fixes.
*** libvkd3d-shader *** libvkd3d-shader
- New features: - New features for the HLSL source type:
- Initial support for HLSL compilation and preprocessing. This is an ongoing - Support for integer arithmetic, bitwise and shift operations.
effort; although support for many features is already implemented, support - Support for matrix and vector subscripting.
for many more isn't yet. - Support for the mul() intrinsic function.
- Support for disassembling Direct3D byte-code shaders to Direct3D assembly. - Support for matrix copying, casting, and entry-wise operations.
- Support for parsing the legacy Direct3D byte-code format used by Direct3D - Support for complex initialisers.
shader model 1, 2, and 3 shaders. In the current vkd3d-shader release, - Support for the `nointerpolation' modifier. This modifier is applied by
only Direct3D assembly is supported as a target for these; we intend to default to integer variables.
support SPIR-V as a target in a future release. - Support for the SV_VertexID semantic.
- Support for matrix-typed varyings.
- Constant folding for a number of operators.
- Copy propagation across branches and loops. This allows use of non-numeric
variables anywhere in a program, as well as more optimised code for
accessing numeric variables within branches and loops.
- New features for the SPIR-V target: - The disassembler supports the shader model 5 `msad' instruction.
- Support for various aspects of Direct3D shader model 5.1 descriptor
arrays, including unbounded descriptor arrays, UAV counter arrays, dynamic
indexing of descriptor arrays, and non-uniform indexing of descriptor
arrays. With the exception of some special cases, this requires support
for the SPV_EXT_descriptor_indexing extension in the target environment.
- Support for double precision floating-point operations.
- Support for indirect addressing of tessellation control shader inputs.
- Stencil export. I.e., writing stencil values from shaders. This requires
support for the SPV_EXT_shader_stencil_export extension in the target
environment.
- Support for the Direct3D shader model 4+ `precise' modifier.
- Support for Direct3D shader model 4+ global resource memory barriers.
New interfaces: - New interfaces:
- vkd3d_shader_preprocess() provides support for preprocessing shaders. - vkd3d_shader_set_log_callback() allows writing log output via a custom
- The vkd3d_shader_preprocess_info structure extends the callback.
vkd3d_shader_compile_info structure, and can be used to specify
preprocessing parameters like preprocessor macro definitions.
- The vkd3d_shader_hlsl_source_info structure extends the
vkd3d_shader_compile_info structure, and can be used to specify HLSL
compilation parameters like the target profile and entry point.
- The vkd3d_shader_descriptor_offset_info structure extends the
vkd3d_shader_interface_info structure, and can be used to specify offsets
into descriptor arrays referenced by shader interface bindings. This
allows mapping multiple descriptor arrays in a shader to a single binding
point in the target environment, and helps with mapping between the
Direct3D 12 and Vulkan binding models.
- The VKD3D_SHADER_COMPILE_OPTION_API_VERSION compile option can
be used to specify the version of the libvkd3d-shader API the
application is targeting. If left unspecified,
VKD3D_SHADER_API_VERSION_1_2 will be used.
- Various shader translation fixes, for tessellation shaders in particular.
*** vkd3d-compiler
- New source and target types:
- The `hlsl' source type specifies High Level Shader Language source code.
- The `d3d-asm' target type specifies Direct3D assembly shaders.
- The `d3dbc' format specifies legacy Direct3D byte-code, which is used for
Direct3D shader model 1, 2, and 3 shaders.
- The existing `dxbc-tpf' format can now also be used as a target format.
- New command line options:
- `-E' can be used to specify the input should only be preprocessed.
- `-e'/`--entry' can be used to specify the entry point for HLSL and/or
SPIR-V shaders.
- `-p'/`--profile' can be used to specify the target profile for HLSL
shaders.
- When no source type is explicitly specified, vkd3d-compiler will attempt to
determine the source type from the provided input. Note that this is
intended as a convenience for interactive usage only, and the heuristics
used are subject to future change. Non-interactive usage of vkd3d-compiler,
for example in build scripts, should always explicitly specify source and
target types.
- When no target type is explicitly specified, a default will be chosen based
on the source type. Like the earlier mentioned source type detection, this
is intended for interactive usage only.
- vkd3d-compiler will default to colour output if it can determine that the
output is a colour-capable teleprinter.
- New environment variables:
- NO_COLOUR/NO_COLOR can be used to disable default colour output.
See the README for more detailed descriptions and how to use these.
*** libvkd3d-utils *** libvkd3d-utils
- New interfaces: - New interfaces:
- D3DCreateBlob() provides support for creating ID3DBlob objects. - vkd3d_utils_set_log_callback() allows writing log output via a custom
- D3DPreprocess() provides support for preprocessing HLSL source code. callback.
- D3DCompile() and D3DCompile2() provide support for compiling HLSL source
code.
*** build *** build
- The `gears' and `triangle' demo applications are installed as `vkd3d-gears' - The minimum required version of Vulkan-Headers and SPIRV-Headers for this
and `vkd3d-triangle'. These were originally intended more as documentation release is version 1.2.139.
than as end-user executables, but there's some value in using them for
diagnostic purposes, much like e.g. `glxgears'.
- The VULKAN_LIBS configure variable is used when detecting the Vulkan - The SONAME_LIBVULKAN configure variable can be used to specify the shared
library. object name of the Vulkan library. Because vkd3d loads the Vulkan library
dynamically, specifying this removes the need for a Vulkan import library at
build time.
- Builds for the Microsoft Windows target platform no longer require support - The `crosstests' target no longer builds Win32/PE demos or tests when these
for POSIX threads. Windows synchronisation primitives are used instead. were not enabled at configure time.
- If ncurses is available, it will be use by vkd3d-compiler to determine the
capabilities of the connected teleprinter, if any.

View File

@ -5,8 +5,10 @@ Atharva Nimbalkar
Biswapriyo Nath Biswapriyo Nath
Chip Davis Chip Davis
Conor McCarthy Conor McCarthy
David Gow
Derek Lesho Derek Lesho
Francisco Casas Francisco Casas
Francois Gouget
Giovanni Mascellani Giovanni Mascellani
Hans-Kristian Arntzen Hans-Kristian Arntzen
Henri Verbeet Henri Verbeet

View File

@ -237,7 +237,7 @@ libvkd3d_shader_la_SOURCES = \
libs/vkd3d-shader/vkd3d_shader_main.c \ libs/vkd3d-shader/vkd3d_shader_main.c \
libs/vkd3d-shader/vkd3d_shader_private.h libs/vkd3d-shader/vkd3d_shader_private.h
libvkd3d_shader_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_SHADER_SOURCE -I$(srcdir)/libs/vkd3d-shader @SPIRV_TOOLS_CFLAGS@ libvkd3d_shader_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_SHADER_SOURCE -I$(srcdir)/libs/vkd3d-shader @SPIRV_TOOLS_CFLAGS@
libvkd3d_shader_la_LDFLAGS = $(AM_LDFLAGS) -version-info 2:0:1 libvkd3d_shader_la_LDFLAGS = $(AM_LDFLAGS) -version-info 3:0:2
libvkd3d_shader_la_LIBADD = libvkd3d-common.la @SPIRV_TOOLS_LIBS@ -lm libvkd3d_shader_la_LIBADD = libvkd3d-common.la @SPIRV_TOOLS_LIBS@ -lm
if HAVE_LD_VERSION_SCRIPT if HAVE_LD_VERSION_SCRIPT
libvkd3d_shader_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d-shader/vkd3d_shader.map libvkd3d_shader_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d-shader/vkd3d_shader.map
@ -271,7 +271,7 @@ libvkd3d_la_SOURCES = \
libs/vkd3d/vkd3d_shaders.h \ libs/vkd3d/vkd3d_shaders.h \
libs/vkd3d/vulkan_procs.h libs/vkd3d/vulkan_procs.h
libvkd3d_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_SOURCE libvkd3d_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_SOURCE
libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 4:0:3 libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 5:0:4
libvkd3d_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la @DL_LIBS@ @PTHREAD_LIBS@ libvkd3d_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la @DL_LIBS@ @PTHREAD_LIBS@
if HAVE_LD_VERSION_SCRIPT if HAVE_LD_VERSION_SCRIPT
libvkd3d_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d/vkd3d.map libvkd3d_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d/vkd3d.map
@ -283,7 +283,7 @@ libvkd3d_utils_la_SOURCES = \
libs/vkd3d-utils/vkd3d_utils_main.c \ libs/vkd3d-utils/vkd3d_utils_main.c \
libs/vkd3d-utils/vkd3d_utils_private.h libs/vkd3d-utils/vkd3d_utils_private.h
libvkd3d_utils_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_UTILS_SOURCE libvkd3d_utils_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_UTILS_SOURCE
libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 3:0:2 libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 4:0:3
libvkd3d_utils_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la libvkd3d.la @PTHREAD_LIBS@ libvkd3d_utils_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la libvkd3d.la @PTHREAD_LIBS@
if HAVE_LD_VERSION_SCRIPT if HAVE_LD_VERSION_SCRIPT
libvkd3d_utils_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d-utils/vkd3d_utils.map libvkd3d_utils_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d-utils/vkd3d_utils.map

View File

@ -1,5 +1,5 @@
AC_PREREQ([2.69]) AC_PREREQ([2.69])
AC_INIT([vkd3d],[1.3]) AC_INIT([vkd3d],[1.4])
AC_CONFIG_AUX_DIR([bin]) AC_CONFIG_AUX_DIR([bin])
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR([m4])

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_3 #define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_4
#include "config.h" #include "config.h"
#include <vkd3d.h> #include <vkd3d.h>
#include <vkd3d_utils.h> #include <vkd3d_utils.h>

View File

@ -60,6 +60,7 @@ enum vkd3d_api_version
VKD3D_API_VERSION_1_1, VKD3D_API_VERSION_1_1,
VKD3D_API_VERSION_1_2, VKD3D_API_VERSION_1_2,
VKD3D_API_VERSION_1_3, VKD3D_API_VERSION_1_3,
VKD3D_API_VERSION_1_4,
}; };
typedef HRESULT (*PFN_vkd3d_signal_event)(HANDLE event); typedef HRESULT (*PFN_vkd3d_signal_event)(HANDLE event);

View File

@ -45,6 +45,7 @@ enum vkd3d_shader_api_version
VKD3D_SHADER_API_VERSION_1_1, VKD3D_SHADER_API_VERSION_1_1,
VKD3D_SHADER_API_VERSION_1_2, VKD3D_SHADER_API_VERSION_1_2,
VKD3D_SHADER_API_VERSION_1_3, VKD3D_SHADER_API_VERSION_1_3,
VKD3D_SHADER_API_VERSION_1_4,
}; };
/** The type of a chained structure. */ /** The type of a chained structure. */

View File

@ -206,7 +206,7 @@ static enum vkd3d_shader_input_sysval_semantic vkd3d_siv_from_sysval(enum vkd3d_
#define VKD3D_SPIRV_VERSION 0x00010000 #define VKD3D_SPIRV_VERSION 0x00010000
#define VKD3D_SPIRV_GENERATOR_ID 18 #define VKD3D_SPIRV_GENERATOR_ID 18
#define VKD3D_SPIRV_GENERATOR_VERSION 3 #define VKD3D_SPIRV_GENERATOR_VERSION 4
#define VKD3D_SPIRV_GENERATOR_MAGIC vkd3d_make_u32(VKD3D_SPIRV_GENERATOR_VERSION, VKD3D_SPIRV_GENERATOR_ID) #define VKD3D_SPIRV_GENERATOR_MAGIC vkd3d_make_u32(VKD3D_SPIRV_GENERATOR_VERSION, VKD3D_SPIRV_GENERATOR_ID)
struct vkd3d_spirv_stream struct vkd3d_spirv_stream

View File

@ -210,7 +210,7 @@ HRESULT WINAPI D3DCompile2(const void *data, SIZE_T data_size, const char *filen
option = &options[0]; option = &options[0];
option->name = VKD3D_SHADER_COMPILE_OPTION_API_VERSION; option->name = VKD3D_SHADER_COMPILE_OPTION_API_VERSION;
option->value = VKD3D_SHADER_API_VERSION_1_3; option->value = VKD3D_SHADER_API_VERSION_1_4;
compile_info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; compile_info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO;
compile_info.next = &preprocess_info; compile_info.next = &preprocess_info;
@ -315,7 +315,7 @@ HRESULT WINAPI D3DPreprocess(const void *data, SIZE_T size, const char *filename
static const struct vkd3d_shader_compile_option options[] = static const struct vkd3d_shader_compile_option options[] =
{ {
{VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_3}, {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_4},
}; };
TRACE("data %p, size %lu, filename %s, macros %p, include %p, preprocessed_blob %p, messages_blob %p.\n", TRACE("data %p, size %lu, filename %s, macros %p, include %p, preprocessed_blob %p, messages_blob %p.\n",

View File

@ -1957,7 +1957,7 @@ static HRESULT create_shader_stage(struct d3d12_device *device,
static const struct vkd3d_shader_compile_option options[] = static const struct vkd3d_shader_compile_option options[] =
{ {
{VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_3}, {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_4},
}; };
stage_desc->sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; stage_desc->sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
@ -2008,7 +2008,7 @@ static int vkd3d_scan_dxbc(const D3D12_SHADER_BYTECODE *code,
static const struct vkd3d_shader_compile_option options[] = static const struct vkd3d_shader_compile_option options[] =
{ {
{VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_3}, {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_4},
}; };
compile_info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; compile_info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO;

View File

@ -726,7 +726,7 @@ int main(int argc, char **argv)
if (!options.explicit_colour && !getenv("NO_COLOUR") && !getenv("NO_COLOR") && has_colour(output)) if (!options.explicit_colour && !getenv("NO_COLOUR") && !getenv("NO_COLOR") && has_colour(output))
options.formatting |= VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR; options.formatting |= VKD3D_SHADER_COMPILE_OPTION_FORMATTING_COLOUR;
add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_FORMATTING, options.formatting); add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_FORMATTING, options.formatting);
add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_3); add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_4);
info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO;
info.next = &hlsl_source_info; info.next = &hlsl_source_info;