Release 1.10.

This commit is contained in:
Henri Verbeet 2023-12-06 12:00:00 +01:00 committed by Alexandre Julliard
parent ff674b5db5
commit 0c33f82f72
Notes: Alexandre Julliard 2023-12-06 23:24:41 +01:00
Approved-by: Henri Verbeet (@hverbeet)
Approved-by: Alexandre Julliard (@julliard)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/513
12 changed files with 139 additions and 82 deletions

190
ANNOUNCE
View File

@ -1,103 +1,155 @@
The Wine team is proud to announce that release 1.9 of vkd3d, the Direct3D to The Wine team is proud to announce that release 1.10 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:
- Yet more improvements to the HLSL compiler. - libvkd3d exposes various newer Direct3D 12 interfaces.
- A new utility to inspect the contents of DXBC blobs. - The HLSL compiler supports dynamic indexing of arrays.
- libvkd3d-utils implements various helper functions for manipulating DXBC
blobs.
- Miscellaneous bug fixes. - Miscellaneous bug fixes.
The source is available from the following location: The source is available from the following location:
https://dl.winehq.org/vkd3d/source/vkd3d-1.9.tar.xz <https://dl.winehq.org/vkd3d/source/vkd3d-1.10.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:
https://gitlab.winehq.org/wine/vkd3d.git <https://gitlab.winehq.org/wine/vkd3d.git>
Vkd3d is available thanks to the work of multiple people. See the file AUTHORS Vkd3d is available thanks to the work of multiple people. See the file AUTHORS
for the complete list. for the complete list.
---------------------------------------------------------------- # What's new in vkd3d 1.10
What's new in vkd3d 1.9 ### libvkd3d
=======================
- Creating pipeline state objects from pipeline state stream descriptions is
implemented.
- Depth-bounds testing is implemented.
- When the VK\_KHR\_maintenance2 extension is available, libvkd3d will
explicitly specify the usage flags of Vulkan image views. This is
particularly useful on MoltenVK, where 2D-array views of 3D textures are
subject to usage restrictions.
- The D3D12\_FORMAT\_SUPPORT2\_UAV\_TYPED\_LOAD and/or
D3D12\_FORMAT\_SUPPORT2\_UAV\_TYPED\_STORE feature flags are reported for
UAV formats when the shaderStorageImageReadWithoutFormat and/or
shaderStorageImageWriteWithoutFormat Vulkan device features are
supported.
- The ID3D12Device5 interface is supported.
- The ID3D12GraphicsCommandList5 interface is supported.
- The ID3D12Resource1 interface is supported.
*** libvkd3d ### libvkd3d-shader
- Copying between depth/stencil and colour formats in - New features for the HLSL source type:
ID3D12GraphicsCommandList::CopyResource() is supported. - Support for the following intrinsic functions:
- The ID3D12Fence1 interface is supported. - ceil()
- degrees() and radians()
- fwidth()
- tan()
- tex2Dlod(), tex2Dproj(), texCUBEproj(), and tex3Dproj()
- Constant folding support for more expression types. In particular:
- ternary operators and branches
- reciprocal square roots
- exponentials
- logical not on booleans
- bitwise complements
- left/right shifts
- ceil(), floor(), frac(), and saturate()
- Support for dynamic indexing of arrays.
- Support for break and continue statements.
- Support for switch statements.
- The linear, centroid, and noperspective interpolation modifiers
are supported.
- The RWTexture1DArray and RWTexture2DArray unordered access view
types are supported.
- \[loop\] attributes are accepted on loops.
- u/U and l/L suffixes on integer constants.
- Floating-point values are explicitly clamped to the upper and lower bounds
of the target type by ftoi and ftou instructions when targeting
SPIR-V. Similarly, NaNs are flushed to zero. Some hardware/drivers would
already do this implicitly, but behaviour for such inputs is undefined as
far as SPIR-V is concerned.
*** libvkd3d-shader - The VKD3D\_SHADER\_CONFIG environment variable can be used to modify the
behaviour of libvkd3d-shader at run-time, analogous to the existing
VKD3D\_CONFIG environment variable for libvkd3d. See the README for a list
of supported options.
- vkd3d_shader_scan() supports retrieving descriptor information for `d3dbc' - When scanning legacy Direct3D bytecode using vkd3d\_shader\_scan(),
shaders. This is one of the requirements for eventual SPIR-V generation from descriptor information for shader model 2 and 3 combined resource-sampler
`d3dbc' sources. pairs is returned in the vkd3d\_shader\_scan\_descriptor\_info structure.
Note that this information is not yet available for shader model 1
sources, although this will likely be added in a future release.
- New features for the HLSL source type: - The Direct3D shader assembly target supports the rasteriser ordered view
- Support for the following intrinsic functions: flag (\_rov) on unordered access view declarations.
- 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 - New interfaces:
despite compilation failing when targeting legacy Direct3D bytecode. These - The VKD3D\_SHADER\_COMPILE\_OPTION\_BACKWARD\_COMPATIBILITY compile
cases have been fixed. option can be used to specify backward compatibility options. The
VKD3D\_SHADER\_COMPILE\_OPTION\_BACKCOMPAT\_MAP\_SEMANTIC\_NAMES flag is
the only currently supported flag, and can be used to specify that
shader model 1-3 semantic names should be mapped to their shader model
4+ system value equivalents when compiling HLSL sources.
- The VKD3D\_SHADER\_COMPILE\_OPTION\_FRAGMENT\_COORDINATE\_ORIGIN compile
option can be used to specify the origin of fragment coordinates for
SPIR-V targets. This is especially useful in OpenGL environments, where
the origin may be different than in Direct3D or Vulkan environments.
- The vkd3d\_shader\_scan\_combined\_resource\_sampler\_info structure
extends the vkd3d\_shader\_compile\_info structure, and can be used to
retrieve information about the combined resource-sampler pairs used by a
shader. This is especially useful when compiling shaders for usage in
environments without separate binding points for samplers and resources,
like OpenGL.
- vkd3d\_shader\_free\_scan\_combined\_resource\_sampler\_info() is used
to free vkd3d\_shader\_scan\_combined\_resource\_sampler\_info
structures.
- Various HLSL preprocessor fixes for edge cases related to stringification. ### libvkd3d-utils
- SPIR-V target support for the `linear noperspective centroid' input - Passing the D3DCOMPILE\_ENABLE\_BACKWARDS\_COMPATIBILITY flag to
interpolation mode. D3DCompile() and D3DCompile2() will enable mapping shader model 1-3
semantic names to their shader model 4+ system value equivalents.
- New interfaces: - New interfaces:
- The vkd3d_shader_scan_signature_info structure extends the - D3DGetBlobPart() is used to retrieve specific parts of DXBC blobs.
vkd3d_shader_compile_info structure, and can be used to retrieve - D3DGetDebugInfo() is used to retrieve debug information from DXBC blobs.
descriptions of `dxbc-tpf' and `d3dbc' shader inputs and outputs. - D3DGetInputAndOutputSignatureBlob() is used to retrieve input and output
- vkd3d_shader_free_scan_signature_info() is used to free signatures from DXBC blobs.
vkd3d_shader_scan_signature_info structures. - D3DGetInputSignatureBlob() is used to retrieve input signatures from
- The VKD3D_SHADER_COMPILE_OPTION_PACK_MATRIX_ORDER compile option can be DXBC blobs.
used to specify the default matrix packing order for HLSL sources. - D3DGetOutputSignatureBlob() is used to retrieve output signatures from
- The vkd3d_shader_varying_map_info structure extends the DXBC blobs.
vkd3d_shader_compile_info structure, and can be used to specify a mapping - D3DStripShader() is used to remove specific parts from DXBC blobs.
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
*** vkd3d-compiler - The --fragment-coordinate-origin option can be used to specify the
origin of fragment coordinates for SPIR-V targets.
- The `--matrix-storage-order' option can used to specify the default matrix - The --semantic-compat-map option can be used to specify that shader
storage order for HLSL sources. model 1-3 semantic names should be mapped to their shader model 4+ system
value equivalents when compiling HLSL sources.
### vkd3d-dxbc
*** vkd3d-dxbc - The --list and --list-data options now also output the offsets of
sections inside the input data.
- vkd3d-dxbc is a new utility that can be used to inspect the contents of DXBC ### build
blobs.
- The minimum required version of Vulkan-Headers for this release is version
1.2.148.
- When available, the libEGL and libOpenGL libraries are used to run the
vkd3d tests in additional configurations. These libraries are not used by
vkd3d itself.
- The SONAME\_LIBDXCOMPILER configure variable can be used specify the
shared object name of the dxcompiler library. When available, it's used to
run the vkd3d tests in additional configurations. The dxcompiler library
is not used by vkd3d itself.

View File

@ -1,3 +1,4 @@
Akihiro Sagawa
Alexandre Julliard Alexandre Julliard
Alistair Leslie-Hughes Alistair Leslie-Hughes
Andrew Eikum Andrew Eikum
@ -18,6 +19,7 @@ Giovanni Mascellani
Hans-Kristian Arntzen Hans-Kristian Arntzen
Henri Verbeet Henri Verbeet
Isabella Bosia Isabella Bosia
Jacek Caban
Jactry Zeng Jactry Zeng
Jan Sikorski Jan Sikorski
Joshua Ashton Joshua Ashton
@ -25,6 +27,7 @@ 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

View File

@ -307,7 +307,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 8:0:7 libvkd3d_shader_la_LDFLAGS = $(AM_LDFLAGS) -version-info 9:0:8
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
@ -342,7 +342,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 10:0:9 libvkd3d_la_LDFLAGS = $(AM_LDFLAGS) -version-info 11:0:10
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
@ -354,7 +354,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 4:5:3 libvkd3d_utils_la_LDFLAGS = $(AM_LDFLAGS) -version-info 5:0:4
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.9]) AC_INIT([vkd3d],[1.10])
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_9 #define VKD3D_UTILS_API_VERSION VKD3D_API_VERSION_1_10
#include "config.h" #include "config.h"
#include <vkd3d.h> #include <vkd3d.h>
#include <vkd3d_utils.h> #include <vkd3d_utils.h>

View File

@ -78,6 +78,7 @@ enum vkd3d_api_version
VKD3D_API_VERSION_1_7, VKD3D_API_VERSION_1_7,
VKD3D_API_VERSION_1_8, VKD3D_API_VERSION_1_8,
VKD3D_API_VERSION_1_9, VKD3D_API_VERSION_1_9,
VKD3D_API_VERSION_1_10,
VKD3D_FORCE_32_BIT_ENUM(VKD3D_API_VERSION), VKD3D_FORCE_32_BIT_ENUM(VKD3D_API_VERSION),
}; };

View File

@ -51,6 +51,7 @@ enum vkd3d_shader_api_version
VKD3D_SHADER_API_VERSION_1_7, VKD3D_SHADER_API_VERSION_1_7,
VKD3D_SHADER_API_VERSION_1_8, VKD3D_SHADER_API_VERSION_1_8,
VKD3D_SHADER_API_VERSION_1_9, VKD3D_SHADER_API_VERSION_1_9,
VKD3D_SHADER_API_VERSION_1_10,
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_API_VERSION), VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_API_VERSION),
}; };

View File

@ -231,7 +231,7 @@ static inline bool register_is_constant_or_undef(const struct vkd3d_shader_regis
#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 9 #define VKD3D_SPIRV_GENERATOR_VERSION 10
#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

@ -239,7 +239,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_9; option->value = VKD3D_SHADER_API_VERSION_1_10;
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;
@ -362,7 +362,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_9}, {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_10},
}; };
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

@ -2142,7 +2142,7 @@ static HRESULT create_shader_stage(struct d3d12_device *device,
const struct vkd3d_shader_compile_option options[] = const struct vkd3d_shader_compile_option options[] =
{ {
{VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_9}, {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_10},
{VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)}, {VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)},
{VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE, 0}, {VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE, 0},
}; };
@ -2196,7 +2196,7 @@ static int vkd3d_scan_dxbc(const struct d3d12_device *device, const D3D12_SHADER
const struct vkd3d_shader_compile_option options[] = const struct vkd3d_shader_compile_option options[] =
{ {
{VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_9}, {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_10},
{VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)}, {VKD3D_SHADER_COMPILE_OPTION_TYPED_UAV, typed_uav_compile_option(device)},
}; };
@ -3855,7 +3855,7 @@ static int compile_hlsl_cs(const struct vkd3d_shader_code *hlsl, struct vkd3d_sh
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_9}, {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_10},
}; };
info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO; info.type = VKD3D_SHADER_STRUCTURE_TYPE_COMPILE_INFO;

View File

@ -827,7 +827,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_9); add_compile_option(&options, VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_10);
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;

View File

@ -417,7 +417,7 @@ static bool compile_shader(struct gl_runner *runner, ID3DBlob *blob, struct vkd3
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_9}, {VKD3D_SHADER_COMPILE_OPTION_API_VERSION, VKD3D_SHADER_API_VERSION_1_10},
{VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN, {VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN,
VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN_LOWER_LEFT}, VKD3D_SHADER_COMPILE_OPTION_FRAGMENT_COORDINATE_ORIGIN_LOWER_LEFT},
}; };