2020-12-05 13:08:24 +01:00
|
|
|
#pragma once
|
2019-12-07 14:28:35 +01:00
|
|
|
|
2020-12-24 11:49:08 +01:00
|
|
|
#include "VulkanAPI.h"
|
2019-12-07 14:28:35 +01:00
|
|
|
|
|
|
|
|
namespace vk
|
|
|
|
|
{
|
2020-12-24 11:49:08 +01:00
|
|
|
struct fence;
|
|
|
|
|
|
|
|
|
|
enum // callback commands
|
|
|
|
|
{
|
2021-01-27 18:19:36 +01:00
|
|
|
rctrl_queue_submit = 0x80000000,
|
|
|
|
|
rctrl_run_gc = 0x80000001
|
2020-12-24 11:49:08 +01:00
|
|
|
};
|
|
|
|
|
|
2019-12-07 14:28:35 +01:00
|
|
|
struct submit_packet
|
|
|
|
|
{
|
|
|
|
|
// Core components
|
|
|
|
|
VkQueue queue;
|
|
|
|
|
fence* pfence;
|
|
|
|
|
VkSubmitInfo submit_info;
|
|
|
|
|
|
|
|
|
|
// Pointer redirection storage
|
|
|
|
|
VkSemaphore wait_semaphore;
|
|
|
|
|
VkSemaphore signal_semaphore;
|
|
|
|
|
VkFlags wait_flags;
|
|
|
|
|
|
|
|
|
|
submit_packet(VkQueue _q, fence* _f, const VkSubmitInfo* info) :
|
|
|
|
|
queue(_q), pfence(_f), submit_info(*info),
|
|
|
|
|
wait_semaphore(0), signal_semaphore(0), wait_flags(0)
|
|
|
|
|
{
|
|
|
|
|
if (info->waitSemaphoreCount)
|
|
|
|
|
{
|
|
|
|
|
wait_semaphore = *info->pWaitSemaphores;
|
|
|
|
|
submit_info.pWaitSemaphores = &wait_semaphore;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (info->signalSemaphoreCount)
|
|
|
|
|
{
|
|
|
|
|
signal_semaphore = *info->pSignalSemaphores;
|
|
|
|
|
submit_info.pSignalSemaphores = &signal_semaphore;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (info->pWaitDstStageMask)
|
|
|
|
|
{
|
|
|
|
|
wait_flags = *info->pWaitDstStageMask;
|
|
|
|
|
submit_info.pWaitDstStageMask = &wait_flags;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|