From: Henri Verbeet hverbeet@codeweavers.com
--- ANNOUNCE | 136 +++++++++++++++------------- 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, 88 insertions(+), 74 deletions(-)
diff --git a/ANNOUNCE b/ANNOUNCE index 86d654d27..286ca0b21 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,16 +1,16 @@ -The Wine team is proud to announce that release 1.8 of vkd3d, the Direct3D to +The Wine team is proud to announce that release 1.9 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 still many more HLSL features and intrinsics. - - Performance improvements to vkd3d descriptor updates. + - Yet more improvements to the HLSL compiler. + - A new utility to inspect the contents of DXBC blobs. - Miscellaneous bug fixes.
The source is available from the following location:
- https://dl.winehq.org/vkd3d/source/vkd3d-1.8.tar.xz + https://dl.winehq.org/vkd3d/source/vkd3d-1.9.tar.xz
The current source can also be pulled directly from the git repository:
@@ -21,73 +21,83 @@ for the complete list.
----------------------------------------------------------------
-What's new in vkd3d 1.8 +What's new in vkd3d 1.9 =======================
*** 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. +- Copying between depth/stencil and colour formats in + ID3D12GraphicsCommandList::CopyResource() is supported. +- The ID3D12Fence1 interface is supported.
*** libvkd3d-shader
+- vkd3d_shader_scan() supports retrieving descriptor information for `d3dbc' + shaders. This is one of the requirements for eventual SPIR-V generation from + `d3dbc' sources. + - New features for the HLSL source type: - - 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. - -- More improvements to HLSL support for the Direct3D shader model 1/2/3 - profiles. - -- The section alignment of DXBC blobs produced by - vkd3d_shader_serialize_dxbc() matches those produced by d3dcompiler more - closely. - -- 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. + - clip() + - ddx_coarse() and ddy_coarse() + - ddx_fine() and ddy_fine() + - tex1D(), tex2D(), texCUBE(), and tex3D() + - Constant folding support for more expression types. In particular: + - comparison operators + - floating-point min() and max() + - logical `and' and `or' + - dot products + - square roots + - logarithms + - Support for multi-sample texture object declarations without explicit + sample counts in shader model 4.1 and later shaders. + - Support for using constant expressions as sample counts in multi-sample + texture object declarations. + - Support for variable initialisers using variables declared earlier in the + same declaration list. E.g., `float a = 1, b = a, c = b + 1;'. + - The GetDimensions() texture object method is implemented. + - Matrix swizzles are implemented. + - Parser support for if-statement attributes like `[branch]' and + `[flatten]'. + - Support for the `inline' function modifier. + +- Previously, vkd3d_shader_compile() would in some cases return VKD3D_OK + despite compilation failing when targeting legacy Direct3D bytecode. These + cases have been fixed. + +- Various HLSL preprocessor fixes for edge cases related to stringification. + +- SPIR-V target support for the `linear noperspective centroid' input + interpolation mode. + +- New interfaces: + - The vkd3d_shader_scan_signature_info structure extends the + vkd3d_shader_compile_info structure, and can be used to retrieve + descriptions of `dxbc-tpf' and `d3dbc' shader inputs and outputs. + - vkd3d_shader_free_scan_signature_info() is used to free + vkd3d_shader_scan_signature_info structures. + - The VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ORDER compile option can be + used to specify the default matrix packing order for HLSL sources. + - The vkd3d_shader_varying_map_info structure extends the + vkd3d_shader_compile_info structure, and can be used to specify a mapping + between the outputs of a shader stage and the inputs of the next shader + stage. + - vkd3d_shader_build_varying_map() is used to build a mapping between the + outputs of a shader stage and the inputs of the next shader stage. + - The VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_RAW_BUFFER flag returned as part of + the vkd3d_shader_descriptor_info structure indicates the descriptor refers + to a byte-addressed (`raw') buffer resource. + + +*** vkd3d-compiler + +- The `--matrix-storage-order' option can used to specify the default matrix + storage order for HLSL sources. + + +*** vkd3d-dxbc + +- vkd3d-dxbc is a new utility that can be used to inspect the contents of DXBC + blobs. diff --git a/AUTHORS b/AUTHORS index 6d4f0e061..2dc8e8c36 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,4 +1,5 @@ Alexandre Julliard +Alistair Leslie-Hughes Andrew Eikum Andrey Gusev Atharva Nimbalkar @@ -9,6 +10,7 @@ Conor McCarthy David Gow Derek Lesho Ethan Lee +Evan Tang Fabian Maurer Francisco Casas Francois Gouget diff --git a/Makefile.am b/Makefile.am index d20e92725..744e46127 100644 --- a/Makefile.am +++ b/Makefile.am @@ -292,7 +292,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 7:0:6 +libvkd3d_shader_la_LDFLAGS = $(AM_LDFLAGS) -version-info 8:0:7 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 @@ -327,7 +327,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 9:0:8 +libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 10:0:9 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 @@ -339,7 +339,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:4:3 +libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 4:5: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 213ab22ee..52d233a42 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.69]) -AC_INIT([vkd3d],[1.8]) +AC_INIT([vkd3d],[1.9])
AC_CONFIG_AUX_DIR([bin]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/demos/demo_xcb.h b/demos/demo_xcb.h index f71e89f69..6eb3dc933 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_8 +#define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_9 #include "config.h" #include <vkd3d.h> #include <vkd3d_utils.h> diff --git a/include/vkd3d.h b/include/vkd3d.h index 3adce97be..ef426898a 100644 --- a/include/vkd3d.h +++ b/include/vkd3d.h @@ -77,6 +77,7 @@ enum vkd3d_api_version VKD3D_API_VERSION_1_6, VKD3D_API_VERSION_1_7, VKD3D_API_VERSION_1_8, + VKD3D_API_VERSION_1_9,
VKD3D_FORCE_32_BIT_ENUM(VKD3D_API_VERSION), }; diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h index 892d44404..01356ce39 100644 --- a/include/vkd3d_shader.h +++ b/include/vkd3d_shader.h @@ -50,6 +50,7 @@ enum vkd3d_shader_api_version VKD3D_SHADER_API_VERSION_1_6, VKD3D_SHADER_API_VERSION_1_7, VKD3D_SHADER_API_VERSION_1_8, + VKD3D_SHADER_API_VERSION_1_9,
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_API_VERSION), }; diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index 95f6914ac..8285b56a1 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -211,7 +211,7 @@ static inline bool register_is_constant_or_undef(const struct vkd3d_shader_regis
#define VKD3D_SPIRV_VERSION 0x00010000 #define VKD3D_SPIRV_GENERATOR_ID 18 -#define VKD3D_SPIRV_GENERATOR_VERSION 8 +#define VKD3D_SPIRV_GENERATOR_VERSION 9 #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 7a13d6caa..b0c025f46 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_8; + option->value = VKD3D_SHADER_API_VERSION_1_9;
compile_info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; compile_info.next = &preprocess_info; @@ -326,7 +326,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_8}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_9}, };
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 7ae46c862..0b92cffcd 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -1959,7 +1959,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_8}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_9}, {VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)}, {VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE, 0}, }; @@ -2013,7 +2013,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_8}, + {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_9}, {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 3341e037c..61e8d48a2 100644 --- a/programs/vkd3d-compiler/main.c +++ b/programs/vkd3d-compiler/main.c @@ -782,7 +782,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_8); + add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_9);
info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; info.next = &hlsl_source_info;