vkd3d: Introduce d3d12_fence_add_waiting_event().

This commit is contained in:
Henri Verbeet
2025-04-29 21:03:25 +02:00
parent 615dce0eaa
commit e54070c2d7
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

View File

@@ -1076,6 +1076,23 @@ static UINT64 STDMETHODCALLTYPE d3d12_fence_GetCompletedValue(ID3D12Fence1 *ifac
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,
UINT64 value, HANDLE event)
{
@@ -1116,19 +1133,13 @@ static HRESULT STDMETHODCALLTYPE d3d12_fence_SetEventOnCompletion(ID3D12Fence1 *
signal = vkd3d_signal_null_event;
}
if (!vkd3d_array_reserve((void **)&fence->events, &fence->events_size,
fence->event_count + 1, sizeof(*fence->events)))
if (!d3d12_fence_add_waiting_event(fence, event, signal, value))
{
WARN("Failed to add event.\n");
vkd3d_mutex_unlock(&fence->mutex);
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);
if (event == &null_event)