From: Conor McCarthy cmccarthy@codeweavers.com
All return paths in d3d12_command_queue_flush_ops_locked() must leave the op mutex locked. --- libs/vkd3d/command.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index e5ead7d3..6eddcfa2 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -6781,16 +6781,16 @@ static bool d3d12_command_queue_op_array_append(struct d3d12_command_queue_op_ar return true; }
-static HRESULT d3d12_command_queue_fixup_after_flush(struct d3d12_command_queue *queue, unsigned int done_count) +static void d3d12_command_queue_delete_aux_ops(struct d3d12_command_queue *queue, + unsigned int done_count) { - HRESULT hr; - queue->aux_op_queue.count -= done_count; memmove(queue->aux_op_queue.ops, &queue->aux_op_queue.ops[done_count], queue->aux_op_queue.count * sizeof(*queue->aux_op_queue.ops)); +}
- vkd3d_mutex_lock(&queue->op_mutex); - +static HRESULT d3d12_command_queue_fixup_after_flush_locked(struct d3d12_command_queue *queue) +{ d3d12_command_queue_swap_queues(queue);
d3d12_command_queue_op_array_append(&queue->op_queue, queue->aux_op_queue.count, queue->aux_op_queue.ops); @@ -6798,11 +6798,7 @@ static HRESULT d3d12_command_queue_fixup_after_flush(struct d3d12_command_queue queue->aux_op_queue.count = 0; queue->is_flushing = false;
- hr = d3d12_command_queue_record_as_blocked(queue); - - vkd3d_mutex_unlock(&queue->op_mutex); - - return hr; + return d3d12_command_queue_record_as_blocked(queue); }
static HRESULT d3d12_command_queue_flush_ops(struct d3d12_command_queue *queue, bool *flushed_any) @@ -6855,7 +6851,9 @@ static HRESULT d3d12_command_queue_flush_ops_locked(struct d3d12_command_queue * if (op->u.wait.value > fence->max_pending_value) { vkd3d_mutex_unlock(&fence->mutex); - return d3d12_command_queue_fixup_after_flush(queue, i); + d3d12_command_queue_delete_aux_ops(queue, i); + vkd3d_mutex_lock(&queue->op_mutex); + return d3d12_command_queue_fixup_after_flush_locked(queue); } d3d12_command_queue_wait_locked(queue, fence, op->u.wait.value); d3d12_fence_decref(fence);
From: Henri Verbeet hverbeet@codeweavers.com
Commit d27fee64ab51c60078215f461a797edd32bc8871 inadvertently stopped exporting D3D12CreateDevice(). --- libs/vkd3d-utils/vkd3d_utils_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libs/vkd3d-utils/vkd3d_utils_main.c b/libs/vkd3d-utils/vkd3d_utils_main.c index 3911c11b..aa1ac5fe 100644 --- a/libs/vkd3d-utils/vkd3d_utils_main.c +++ b/libs/vkd3d-utils/vkd3d_utils_main.c @@ -85,7 +85,7 @@ HRESULT WINAPI D3D12CreateDeviceVKD3D(IUnknown *adapter, D3D_FEATURE_LEVEL minim return vkd3d_create_device(&device_create_info, iid, device); }
-HRESULT WINAPI D3D12CreateDevice(IUnknown *adapter, +VKD3D_UTILS_API HRESULT WINAPI D3D12CreateDevice(IUnknown *adapter, D3D_FEATURE_LEVEL minimum_feature_level, REFIID iid, void **device) { return D3D12CreateDeviceVKD3D(adapter, minimum_feature_level, iid, device, VKD3D_API_VERSION_1_0);
From: Giovanni Mascellani gmascellani@codeweavers.com
--- ANNOUNCE | 66 +++++++++++++--------------------------------------- configure.ac | 2 +- 2 files changed, 17 insertions(+), 51 deletions(-)
diff --git a/ANNOUNCE b/ANNOUNCE index abc46f45..0127ce42 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,17 +1,12 @@ -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.7.1 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. - - Miscellaneous bug fixes. +This is a bugfix release, only containing targeted fixes for a couple +of defects that had slipped in in vkd3d 1.7.
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.7.1.tar.xz
The current source can also be pulled directly from the git repository:
@@ -22,49 +17,20 @@ for the complete list.
----------------------------------------------------------------
-What's new in vkd3d 1.7 -======================= - +What's new in vkd3d 1.7.1 +=========================
-*** 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. +*** libvkd3d
-- HLSL static variables are now properly zero-initialised. +- Release 1.7 has a bug that causes an internal mutex in its command + queue implementation to be unlocked too early under certain usage + patterns. This is known to further cause internal inconcistencies + that manifest as program deadlocks for some programs. In release + 1.7.1 the mutex is correctly kept locked until required.
-- The Direct3D shader model 4 and 5 disassembler outputs sample counts for - multi-sampled resource declarations. +*** libvkd3d-utils
-- 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. +- Symbol D3D12CreateDevice is mistakenly not exported in release 1.7, + breaking library clients that need it. The symbol is exported again + in release 1.7.1. diff --git a/configure.ac b/configure.ac index 29225c8c..bcf683ea 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.69]) -AC_INIT([vkd3d],[1.7]) +AC_INIT([vkd3d],[1.7.1])
AC_CONFIG_AUX_DIR([bin]) AC_CONFIG_MACRO_DIR([m4])
This merge request was approved by Giovanni Mascellani.
+ patterns. This is known to further cause internal inconcistencies
Typo, "inconsistencies".