[vulkan] Add a function to explicitly wait on a packet

It's not currently used, but it was very handy for finding where the
cause of the 5s hang was ***not***.
This commit is contained in:
Bill Currie 2024-01-16 13:47:31 +09:00
parent bf0d1b4f6e
commit 4a99ef5723
2 changed files with 26 additions and 0 deletions

View file

@ -40,6 +40,7 @@ void QFV_FlushStagingBuffer (qfv_stagebuf_t *stage, size_t offset, size_t size);
qfv_packet_t *QFV_PacketAcquire (qfv_stagebuf_t *stage);
void *QFV_PacketExtend (qfv_packet_t *packet, size_t size);
void QFV_PacketSubmit (qfv_packet_t *packet);
VkResult QFV_PacketWait (qfv_packet_t *packet);
struct qfv_bufferbarrier_s;
void QFV_PacketCopyBuffer (qfv_packet_t *packet,
VkBuffer dstBuffer, VkDeviceSize offset,

View file

@ -105,6 +105,17 @@ QFV_DestroyStagingBuffer (qfv_stagebuf_t *stage)
for (int i = 0; i < count; i++) {
fences->a[i] = stage->packets.buffer[i].fence;
cmdBuf->a[i] = stage->packets.buffer[i].cmd;
#if 0
auto stat = dfunc->vkGetFenceStatus (device->dev, fences->a[i]);
if (stat != VK_SUCCESS) {
dstring_t *str = dstring_newstr ();
auto packet = &stage->packets.buffer[i];
BT_pcInfo (str, (intptr_t) packet->owner);
Sys_Printf ("QFV_DestroyStagingBuffer: %d live packet in %p:%s\n",
stat, stage, str->str);
dstring_delete (str);
}
#endif
}
dfunc->vkWaitForFences (device->dev, fences->size, fences->a, VK_TRUE,
5000000000ull);
@ -306,6 +317,20 @@ QFV_PacketSubmit (qfv_packet_t *packet)
dfunc->vkQueueSubmit (device->queue.queue, 1, &submitInfo, packet->fence);
}
VkResult
QFV_PacketWait (qfv_packet_t *packet)
{
auto stage = packet->stage;
auto device = stage->device;
auto dfunc = device->funcs;
VkResult res = dfunc->vkWaitForFences (device->dev, 1, &packet->fence,
VK_TRUE, ~0ull);
if (res != VK_SUCCESS) {
printf ("QFV_PacketWait: %d\n", res);
}
return res;
}
void
QFV_PacketCopyBuffer (qfv_packet_t *packet,
VkBuffer dstBuffer, VkDeviceSize offset,