3 Commits

Author SHA1 Message Date
Giovanni Mascellani
154acd2c2b Release 1.7.1. 2023-05-03 21:46:28 +02:00
Henri Verbeet
cb2acc35f2 vkd3d-utils: Export D3D12CreateDevice() once again.
Commit d27fee64ab inadvertently stopped
exporting D3D12CreateDevice().
2023-05-03 21:46:27 +02:00
Conor McCarthy
7b9b0179ec vkd3d: Leave the command queue op mutex locked after a partial flush.
All return paths in d3d12_command_queue_flush_ops_locked() must
leave the op mutex locked.
2023-05-03 21:46:25 +02:00
4 changed files with 27 additions and 63 deletions

View File

@@ -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
*** libvkd3d
- 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.
- 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 inconsistencies
that manifest as program deadlocks for some programs. In release
1.7.1 the mutex is correctly kept locked until required.
- HLSL static variables are now properly zero-initialised.
*** libvkd3d-utils
- The Direct3D shader model 4 and 5 disassembler outputs sample counts for
multi-sampled resource declarations.
- 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.

View File

@@ -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])

View File

@@ -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);

View File

@@ -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);