From 771e442af16228a977eebba82224f06f6d0202fe Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Wed, 21 Jun 2023 12:00:00 +0200 Subject: [PATCH] Release 1.8. --- ANNOUNCE | 107 +++++++++++++++++----------- AUTHORS | 2 + Makefile.am | 6 +- configure.ac | 2 +- demos/demo_xcb.h | 2 +- include/vkd3d.h | 1 + include/vkd3d_shader.h | 1 + libs/vkd3d-shader/spirv.c | 2 +- libs/vkd3d-utils/vkd3d_utils_main.c | 4 +- libs/vkd3d/state.c | 4 +- programs/vkd3d-compiler/main.c | 2 +- 11 files changed, 80 insertions(+), 53 deletions(-) diff --git a/ANNOUNCE b/ANNOUNCE index abc46f45..86d654d2 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,17 +1,16 @@ -The Wine team is proud to announce that release 1.7 of vkd3d, the Direct3D to +The Wine team is proud to announce that release 1.8 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: - - Support for many more HLSL features and intrinsics. - - Much improved support for the Direct3D shader model 1/2/3 HLSL profiles. - - Public vkd3d-shader API for parsing and serialising DXBC blobs. + - Support for still many more HLSL features and intrinsics. + - Performance improvements to vkd3d descriptor updates. - Miscellaneous bug fixes. The source is available from the following location: - https://dl.winehq.org/vkd3d/source/vkd3d-1.7.tar.xz + https://dl.winehq.org/vkd3d/source/vkd3d-1.8.tar.xz The current source can also be pulled directly from the git repository: @@ -22,49 +21,73 @@ for the complete list. ---------------------------------------------------------------- -What's new in vkd3d 1.7 +What's new in vkd3d 1.8 ======================= +*** libvkd3d + +- Performance improvements have been made to the code that handles descriptor + updates. In some applications the improvement can be quite significant. + +- Host-visible descriptor heaps are persistently mapped on creation. Some + applications access resource data from the CPU after calling Unmap(), and + that's supposed to work in practice. + +- 1-dimensional texture unordered-access views and shader resource views are + implemented. + +- Shader resource view, unordered access view, and constant buffer view root + descriptors with NULL GPU addresses are supported. + +- Direct3D 12 descriptor heap destruction is delayed until all contained + resources are destroyed. + + *** libvkd3d-shader - New features for the HLSL source type: - - Support for calling user-defined functions. - - Support for array parameters to user-defined functions. - - Much improved support for the Direct3D shader model 1/2/3 profiles. - - Support for the SV_DispatchThreadID, SV_GroupID, and SV_GroupThreadID - compute shader system-value semantics. - - Support for the optional "offset" parameter of the texture object Load() - method. - - Support for the all() intrinsic function. - - Support for the distance() intrinsic function. - - Support for the exp() and exp2() intrinsic functions. - - Support for the frac() intrinsic function. - - Support for the lit() intrinsic function. - - Support for the reflect() intrinsic function. - - Support for the sin() and cos() intrinsic functions. - - Support for the smoothstep() intrinsic function. - - Support for the sqrt() and rsqrt() intrinsic functions. - - Support for the step() intrinsic function. - - Support for the transpose() intrinsic function. - - Support for the case-insensitive variants of the "float" and "dword" data - types. - - Partial support for minimum precision data types like "min16float". These - are currently interpreted as their regular counterparts. - - Improved constant propagation support, in particular to constant - propagation through swizzles. + - Support for the ternary conditional operator "?:". + - Support for "discard" statements. + - Support for the "packoffset" keyword. + - Support for semantics on array types. + - Support for RWBuffer loads and stores. + - Register allocation for arrays and structures of resources and samplers + is implemented. + - Support for the SV_IsFrontFace pixel shader system-value semantics. + - Support for using constant expressions as array sizes and indices. + - Support for dynamic selection of vector components. + - Support for the following intrinsic functions: + - D3DCOLORtoUBYTE4() + - any() + - asfloat() + - ddx() and ddy() + - fmod() + - log(), log2(), and log10() + - sign() + - trunc() + - The SampleBias(), SampleCmp(), SampleCmpLevelZero(), and SampleGrad() + texture object methods are implemented. + - Support for the case-insensitive variants of the "vector" and "matrix" + data types. + - Parser support for the "unroll" loop attribute. A warning is output for + "unroll" without iteration count, and an error is output when an iteration + count is specified. Actual unrolling is not implemented yet. + - Parser support for RWStructuredBuffer resources. + - Parser support for SamplerComparisonState objects. Note that outputting + compiled effects is not supported yet, but parsing these allows shaders + containing SamplerComparisonState state objects to be compiled. -- HLSL static variables are now properly zero-initialised. +- More improvements to HLSL support for the Direct3D shader model 1/2/3 + profiles. -- The Direct3D shader model 4 and 5 disassembler outputs sample counts for - multi-sampled resource declarations. +- The section alignment of DXBC blobs produced by + vkd3d_shader_serialize_dxbc() matches those produced by d3dcompiler more + closely. -- New interfaces: - - vkd3d_shader_parse_dxbc() provides support for parsing DXBC blobs. - - vkd3d_shader_serialize_dxbc() provides support for serialising DXBC blobs. - - vkd3d_shader_free_dxbc() is used to free vkd3d_shader_dxbc_desc - structures, as returned by vkd3d_shader_parse_dxbc(). - - The VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE compile option - can be used to specify whether SPIR-V shaders targeting Vulkan - environments should write point sizes for geometry and tessellation - shaders. If left unspecified, point sizes will be written. +- The "main" function for shaders produced by the SPIR-V target is always + terminated, even when the source was a TPF shader without explicit "ret" + instruction. + +- Relative addressing of shader input registers is supported by SPIR-V + targets. diff --git a/AUTHORS b/AUTHORS index 622aecbb..6d4f0e06 100644 --- a/AUTHORS +++ b/AUTHORS @@ -8,6 +8,7 @@ Chip Davis Conor McCarthy David Gow Derek Lesho +Ethan Lee Fabian Maurer Francisco Casas Francois Gouget @@ -16,6 +17,7 @@ Hans-Kristian Arntzen Henri Verbeet Isabella Bosia Jactry Zeng +Jan Sikorski Joshua Ashton Józef Kucia Martin Storsjö diff --git a/Makefile.am b/Makefile.am index db67423b..fb5bc88f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -283,7 +283,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 6:0:5 +libvkd3d_shader_la_LDFLAGS = $(AM_LDFLAGS) -version-info 7:0:6 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 @@ -317,7 +317,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 8:0:7 +libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 9:0:8 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 @@ -329,7 +329,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:3:3 +libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 4:4: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 c69d8709..f9039158 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.69]) -AC_INIT([vkd3d],[1.7]) +AC_INIT([vkd3d],[1.8]) AC_CONFIG_AUX_DIR([bin]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/demos/demo_xcb.h b/demos/demo_xcb.h index 5adf44ee..5ebe0ff9 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_7 +#define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_8 #include "config.h" #include #include diff --git a/include/vkd3d.h b/include/vkd3d.h index e5159d5e..f36d9043 100644 --- a/include/vkd3d.h +++ b/include/vkd3d.h @@ -76,6 +76,7 @@ enum vkd3d_api_version VKD3D_API_VERSION_1_5, VKD3D_API_VERSION_1_6, VKD3D_API_VERSION_1_7, + VKD3D_API_VERSION_1_8, VKD3D_FORCE_32_BIT_ENUM(VKD3D_API_VERSION), }; diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h index 859b8c79..27424154 100644 --- a/include/vkd3d_shader.h +++ b/include/vkd3d_shader.h @@ -49,6 +49,7 @@ enum vkd3d_shader_api_version VKD3D_SHADER_API_VERSION_1_5, VKD3D_SHADER_API_VERSION_1_6, VKD3D_SHADER_API_VERSION_1_7, + VKD3D_SHADER_API_VERSION_1_8, VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_API_VERSION), }; diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index 080b2204..3542b5fa 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -201,7 +201,7 @@ enum vkd3d_shader_input_sysval_semantic vkd3d_siv_from_sysval_indexed(enum vkd3d #define VKD3D_SPIRV_VERSION 0x00010000 #define VKD3D_SPIRV_GENERATOR_ID 18 -#define VKD3D_SPIRV_GENERATOR_VERSION 7 +#define VKD3D_SPIRV_GENERATOR_VERSION 8 #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 aa1ac5fe..8a349ba8 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_7; + option->value = VKD3D_SHADER_API_VERSION_1_8; 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_7}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_8}, }; 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 c964ea8f..5e46b467 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -1958,7 +1958,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_7}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_8}, {VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)}, {VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE, 0}, }; @@ -2011,7 +2011,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_7}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_8}, {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 52488e86..efb3b48d 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_7); + add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_8); info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; info.next = &hlsl_source_info;