diff --git a/ANNOUNCE b/ANNOUNCE index 8a80ea4e..a2728968 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,96 +1,50 @@ -The Wine team is proud to announce that release 1.4 of vkd3d, the Direct3D to +The Wine team is proud to announce that release 1.5 of vkd3d, the Direct3D to Vulkan translation library, is now available. This release contains improvements that are listed in the release notes below. The main highlights are: - - Many improvements to the HLSL compiler. - - A new descriptor heap implementation using the VK_EXT_descriptor_indexing - extension. - - A new fence implementation using the VK_KHR_timeline_semaphore extension. + - Support for various HLSL features and intrinsics. + - Typed unordered access view loads of multicomponent formats. + - Miscellaneous bug fixes. The source is available from the following location: - https://dl.winehq.org/vkd3d/source/vkd3d-1.4.tar.xz + https://dl.winehq.org/vkd3d/source/vkd3d-1.5.tar.xz The current source can also be pulled directly from the git repository: - https://source.winehq.org/git/vkd3d.git/ + https://gitlab.winehq.org/wine/vkd3d.git Vkd3d is available thanks to the work of multiple people. See the file AUTHORS for the complete list. ---------------------------------------------------------------- -What's new in vkd3d 1.4 +What's new in vkd3d 1.5 ======================= -*** libvkd3d - -- A new descriptor heap implementation using the VK_EXT_descriptor_indexing - extension. In particular, the new implementation is more efficient when - large descriptor heaps are used by multiple command lists. The new - `virtual_heaps' configuration option can be used to select the original - implementation even when the VK_EXT_descriptor_indexing extension is - available. - -- A new fence implementation using the VK_KHR_timeline_semaphore 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: - - vkd3d_set_log_callback() allows writing log output via a custom callback. - This can be used to integrate vkd3d's log output with other logging - systems. - - *** libvkd3d-shader - New features for the HLSL source type: - - Support for integer arithmetic, bitwise and shift operations. - - Support for matrix and vector subscripting. - - Support for the mul() intrinsic function. - - Support for matrix copying, casting, and entry-wise operations. - - Support for complex initialisers. - - Support for the `nointerpolation' modifier. This modifier is applied by - default to integer variables. - - 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. - -- The disassembler supports the shader model 5 `msad' instruction. + - Improved support for HLSL object types (like e.g. `Texture2D') inside + structures and arrays. + - Implicitly sized array initialisers. + - Support for the dot() intrinsic function. + - Support for the ldexp() intrinsic function. + - Support for the lerp() intrinsic function. + - Support for the logical `and', `or', and `not' operators in shader model 4 + and 5 targets. + - Support for casts from `bool' types in shader model 4 and 5 targets. + - Constant folding for integer bitwise operations. + - Constant folding for integer min() and max(). - New interfaces: - - vkd3d_shader_set_log_callback() allows writing log output via a custom - callback. - - -*** libvkd3d-utils - -- New interfaces: - - vkd3d_utils_set_log_callback() allows writing log output via a custom - callback. - - -*** build - -- The minimum required version of Vulkan-Headers and SPIRV-Headers for this - release is version 1.2.139. - -- The SONAME_LIBVULKAN configure variable can be used to specify the shared - 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. - -- The `crosstests' target no longer builds Win32/PE demos or tests when these - were not enabled at configure time. + - The VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV compile option can be used to + specify the SPIR-V format to use for typed unordered access view loads. + When set to `Unknown', and the `shaderStorageImageReadWithoutFormat' + feature is enabled in the target environment, this allows typed loads from + multicomponent format unordered access views. If left unspecified, a R32 + format will be used, like in previous versions of libvkd3d-shader. diff --git a/AUTHORS b/AUTHORS index 18a8b207..a3d3a1aa 100644 --- a/AUTHORS +++ b/AUTHORS @@ -16,6 +16,7 @@ Isabella Bosia Jactry Zeng Joshua Ashton Józef Kucia +Martin Storsjö Matteo Bruni Nikolay Sivov Philip Rebohle diff --git a/Makefile.am b/Makefile.am index 962036ff..cc06a839 100644 --- a/Makefile.am +++ b/Makefile.am @@ -242,7 +242,7 @@ libvkd3d_shader_la_SOURCES = \ libs/vkd3d-shader/vkd3d_shader_main.c \ 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_LDFLAGS = $(AM_LDFLAGS) -version-info 3:0:2 +libvkd3d_shader_la_LDFLAGS = $(AM_LDFLAGS) -version-info 4:0:3 libvkd3d_shader_la_LIBADD = libvkd3d-common.la @SPIRV_TOOLS_LIBS@ -lm if HAVE_LD_VERSION_SCRIPT libvkd3d_shader_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d-shader/vkd3d_shader.map @@ -276,7 +276,7 @@ libvkd3d_la_SOURCES = \ libs/vkd3d/vkd3d_shaders.h \ libs/vkd3d/vulkan_procs.h libvkd3d_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_SOURCE -libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 5:0:4 +libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 6:0:5 libvkd3d_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la @DL_LIBS@ @PTHREAD_LIBS@ if HAVE_LD_VERSION_SCRIPT libvkd3d_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d/vkd3d.map @@ -288,7 +288,7 @@ libvkd3d_utils_la_SOURCES = \ libs/vkd3d-utils/vkd3d_utils_main.c \ libs/vkd3d-utils/vkd3d_utils_private.h libvkd3d_utils_la_CFLAGS = $(AM_CFLAGS) -DLIBVKD3D_UTILS_SOURCE -libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 4:0:3 +libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 4:1:3 libvkd3d_utils_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la libvkd3d.la @PTHREAD_LIBS@ if HAVE_LD_VERSION_SCRIPT libvkd3d_utils_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libs/vkd3d-utils/vkd3d_utils.map diff --git a/configure.ac b/configure.ac index 423b3e76..577b3983 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.69]) -AC_INIT([vkd3d],[1.4]) +AC_INIT([vkd3d],[1.5]) AC_CONFIG_AUX_DIR([bin]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/demos/demo_xcb.h b/demos/demo_xcb.h index e4d6145c..878b2c6a 100644 --- a/demos/demo_xcb.h +++ b/demos/demo_xcb.h @@ -19,7 +19,7 @@ #define VK_NO_PROTOTYPES #define VK_USE_PLATFORM_XCB_KHR -#define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_4 +#define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_5 #include "config.h" #include #include diff --git a/include/vkd3d.h b/include/vkd3d.h index 724d68c4..2a87e3d2 100644 --- a/include/vkd3d.h +++ b/include/vkd3d.h @@ -61,6 +61,7 @@ enum vkd3d_api_version VKD3D_API_VERSION_1_2, VKD3D_API_VERSION_1_3, VKD3D_API_VERSION_1_4, + VKD3D_API_VERSION_1_5, VKD3D_FORCE_32_BIT_ENUM(VKD3D_API_VERSION), }; diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h index b1c9e306..088f3e63 100644 --- a/include/vkd3d_shader.h +++ b/include/vkd3d_shader.h @@ -46,6 +46,7 @@ enum vkd3d_shader_api_version VKD3D_SHADER_API_VERSION_1_2, VKD3D_SHADER_API_VERSION_1_3, VKD3D_SHADER_API_VERSION_1_4, + VKD3D_SHADER_API_VERSION_1_5, VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_API_VERSION), }; diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index 04dd133f..0e8ff39b 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -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_GENERATOR_ID 18 -#define VKD3D_SPIRV_GENERATOR_VERSION 4 +#define VKD3D_SPIRV_GENERATOR_VERSION 5 #define VKD3D_SPIRV_GENERATOR_MAGIC vkd3d_make_u32(VKD3D_SPIRV_GENERATOR_VERSION, VKD3D_SPIRV_GENERATOR_ID) struct vkd3d_spirv_stream diff --git a/libs/vkd3d-utils/vkd3d_utils_main.c b/libs/vkd3d-utils/vkd3d_utils_main.c index f5e1e0e7..a220b2df 100644 --- a/libs/vkd3d-utils/vkd3d_utils_main.c +++ b/libs/vkd3d-utils/vkd3d_utils_main.c @@ -210,7 +210,7 @@ HRESULT WINAPI D3DCompile2(const void *data, SIZE_T data_size, const char *filen option = &options[0]; option->name = VKD3D_SHADER_COMPILE_OPTION_API_VERSION; - option->value = VKD3D_SHADER_API_VERSION_1_4; + option->value = VKD3D_SHADER_API_VERSION_1_5; compile_info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_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[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_4}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_5}, }; TRACE("data %p, size %lu, filename %s, macros %p, include %p, preprocessed_blob %p, messages_blob %p.\n", diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 895a5a2e..57dba25a 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -1964,7 +1964,7 @@ static HRESULT create_shader_stage(struct d3d12_device *device, const struct vkd3d_shader_compile_option options[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_4}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_5}, {VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)}, }; @@ -2016,7 +2016,7 @@ static int vkd3d_scan_dxbc(const struct d3d12_device *device, const D3D12_SHADER const struct vkd3d_shader_compile_option options[] = { - {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_4}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_5}, {VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)}, }; diff --git a/programs/vkd3d-compiler/main.c b/programs/vkd3d-compiler/main.c index 2347bee0..731b1d45 100644 --- a/programs/vkd3d-compiler/main.c +++ b/programs/vkd3d-compiler/main.c @@ -726,7 +726,7 @@ int main(int argc, char **argv) if (!options.explicit_colour && !getenv("NO_COLOUR") && !getenv("NO_COLOR") && has_colour(output)) 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_API_VERSION, VKD3D_SHADER_API_VERSION_1_4); + add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_5); info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; info.next = &hlsl_source_info;