mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d: Introduce d3d12_fence_add_waiting_event().
This commit is contained in:
Notes:
Henri Verbeet
2025-05-06 19:05:21 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1476
@@ -1076,6 +1076,23 @@ static UINT64 STDMETHODCALLTYPE d3d12_fence_GetCompletedValue(ID3D12Fence1 *ifac
|
|||||||
return completed_value;
|
return completed_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool d3d12_fence_add_waiting_event(struct d3d12_fence *fence,
|
||||||
|
HANDLE event, PFN_vkd3d_signal_event signal, uint64_t value)
|
||||||
|
{
|
||||||
|
struct vkd3d_waiting_event *e;
|
||||||
|
|
||||||
|
if (!vkd3d_array_reserve((void **)&fence->events, &fence->events_size,
|
||||||
|
fence->event_count + 1, sizeof(*fence->events)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
e = &fence->events[fence->event_count++];
|
||||||
|
e->event = event;
|
||||||
|
e->signal = signal;
|
||||||
|
e->value = value;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT STDMETHODCALLTYPE d3d12_fence_SetEventOnCompletion(ID3D12Fence1 *iface,
|
static HRESULT STDMETHODCALLTYPE d3d12_fence_SetEventOnCompletion(ID3D12Fence1 *iface,
|
||||||
UINT64 value, HANDLE event)
|
UINT64 value, HANDLE event)
|
||||||
{
|
{
|
||||||
@@ -1116,19 +1133,13 @@ static HRESULT STDMETHODCALLTYPE d3d12_fence_SetEventOnCompletion(ID3D12Fence1 *
|
|||||||
signal = vkd3d_signal_null_event;
|
signal = vkd3d_signal_null_event;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!vkd3d_array_reserve((void **)&fence->events, &fence->events_size,
|
if (!d3d12_fence_add_waiting_event(fence, event, signal, value))
|
||||||
fence->event_count + 1, sizeof(*fence->events)))
|
|
||||||
{
|
{
|
||||||
WARN("Failed to add event.\n");
|
WARN("Failed to add event.\n");
|
||||||
vkd3d_mutex_unlock(&fence->mutex);
|
vkd3d_mutex_unlock(&fence->mutex);
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
fence->events[fence->event_count].event = event;
|
|
||||||
fence->events[fence->event_count].signal = signal;
|
|
||||||
fence->events[fence->event_count].value = value;
|
|
||||||
++fence->event_count;
|
|
||||||
|
|
||||||
vkd3d_mutex_unlock(&fence->mutex);
|
vkd3d_mutex_unlock(&fence->mutex);
|
||||||
|
|
||||||
if (event == &null_event)
|
if (event == &null_event)
|
||||||
|
Reference in New Issue
Block a user