Codestyle fixes and optimizations

This commit is contained in:
Wojtek Figat
2024-01-29 13:46:50 +01:00
parent 1b33a2aa0d
commit bb00d29098
25 changed files with 163 additions and 486 deletions

View File

@@ -250,23 +250,18 @@ void SetupDebugLayerCallback()
{
default:
createInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT;
// Fall-through...
case 4:
createInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT;
// Fall-through...
case 3:
createInfo.messageType |= VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
// Fall-through...
case 2:
createInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT;
createInfo.messageType |= VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
// Fall-through...
case 1:
createInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
createInfo.messageType |= VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT;
break;
case 0:
// Nothing to do
break;
}
const VkResult result = vkCreateDebugUtilsMessengerEXT(GPUDeviceVulkan::Instance, &createInfo, nullptr, &Messenger);
@@ -288,21 +283,16 @@ void SetupDebugLayerCallback()
{
default:
createInfo.flags |= VK_DEBUG_REPORT_DEBUG_BIT_EXT;
// Fall-through...
case 4:
createInfo.flags |= VK_DEBUG_REPORT_INFORMATION_BIT_EXT;
// Fall-through...
case 3:
createInfo.flags |= VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT;
// Fall-through...
case 2:
createInfo.flags |= VK_DEBUG_REPORT_WARNING_BIT_EXT;
// Fall-through...
case 1:
createInfo.flags |= VK_DEBUG_REPORT_ERROR_BIT_EXT;
break;
case 0:
// Nothing to do
break;
}
const VkResult result = vkCreateDebugReportCallbackEXT(GPUDeviceVulkan::Instance, &createInfo, nullptr, &MsgCallback);
@@ -354,14 +344,14 @@ DeferredDeletionQueueVulkan::~DeferredDeletionQueueVulkan()
ASSERT(_entries.IsEmpty());
}
void DeferredDeletionQueueVulkan::ReleaseResources(bool deleteImmediately)
void DeferredDeletionQueueVulkan::ReleaseResources(bool immediately)
{
const uint64 checkFrame = Engine::FrameCount - VULKAN_RESOURCE_DELETE_SAFE_FRAMES_COUNT;
ScopeLock lock(_locker);
for (int32 i = 0; i < _entries.Count(); i++)
{
Entry* e = &_entries.Get()[i];
if (deleteImmediately || (checkFrame > e->FrameNumber && (e->CmdBuffer == nullptr || e->FenceCounter < e->CmdBuffer->GetFenceSignaledCounter())))
if (immediately || (checkFrame > e->FrameNumber && (e->CmdBuffer == nullptr || e->FenceCounter < e->CmdBuffer->GetFenceSignaledCounter())))
{
if (e->AllocationHandle == VK_NULL_HANDLE)
{
@@ -2077,7 +2067,6 @@ GPUConstantBuffer* GPUDeviceVulkan::CreateConstantBuffer(uint32 size, const Stri
SemaphoreVulkan::SemaphoreVulkan(GPUDeviceVulkan* device)
: _device(device)
{
// Create semaphore
VkSemaphoreCreateInfo info;
RenderToolsVulkan::ZeroStruct(info, VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO);
VALIDATE_VULKAN_RESULT(vkCreateSemaphore(device->Device, &info, nullptr, &_semaphoreHandle));
@@ -2090,21 +2079,6 @@ SemaphoreVulkan::~SemaphoreVulkan()
_semaphoreHandle = VK_NULL_HANDLE;
}
FenceVulkan::~FenceVulkan()
{
ASSERT(_handle == VK_NULL_HANDLE);
}
FenceVulkan::FenceVulkan(GPUDeviceVulkan* device, FenceManagerVulkan* owner, bool createSignaled)
: _signaled(createSignaled)
, _owner(owner)
{
VkFenceCreateInfo info;
RenderToolsVulkan::ZeroStruct(info, VK_STRUCTURE_TYPE_FENCE_CREATE_INFO);
info.flags = createSignaled ? VK_FENCE_CREATE_SIGNALED_BIT : 0;
VALIDATE_VULKAN_RESULT(vkCreateFence(device->Device, &info, nullptr, &_handle));
}
FenceManagerVulkan::~FenceManagerVulkan()
{
ASSERT(_usedFences.IsEmpty());
@@ -2113,68 +2087,63 @@ FenceManagerVulkan::~FenceManagerVulkan()
void FenceManagerVulkan::Dispose()
{
ScopeLock lock(_device->_fenceLock);
ASSERT(_usedFences.IsEmpty());
for (FenceVulkan* fence : _freeFences)
{
DestroyFence(fence);
}
_freeFences.Clear();
}
FenceVulkan* FenceManagerVulkan::AllocateFence(bool createSignaled)
{
ScopeLock lock(_device->_fenceLock);
FenceVulkan* fence;
if (_freeFences.HasItems())
{
fence = _freeFences.Last();
_freeFences.RemoveLast();
_usedFences.Add(fence);
if (createSignaled)
{
fence->_signaled = true;
}
return fence;
fence->IsSignaled = true;
}
else
{
fence = New<FenceVulkan>();
fence->IsSignaled = createSignaled;
VkFenceCreateInfo info;
RenderToolsVulkan::ZeroStruct(info, VK_STRUCTURE_TYPE_FENCE_CREATE_INFO);
info.flags = createSignaled ? VK_FENCE_CREATE_SIGNALED_BIT : 0;
VALIDATE_VULKAN_RESULT(vkCreateFence(_device->Device, &info, nullptr, &fence->Handle));
_usedFences.Add(fence);
}
fence = New<FenceVulkan>(_device, this, createSignaled);
_usedFences.Add(fence);
return fence;
}
bool FenceManagerVulkan::WaitForFence(FenceVulkan* fence, uint64 timeInNanoseconds)
bool FenceManagerVulkan::WaitForFence(FenceVulkan* fence, uint64 timeInNanoseconds) const
{
ASSERT(_usedFences.Contains(fence));
ASSERT(!fence->_signaled);
const VkResult result = vkWaitForFences(_device->Device, 1, &fence->_handle, true, timeInNanoseconds);
ASSERT(!fence->IsSignaled);
const VkResult result = vkWaitForFences(_device->Device, 1, &fence->Handle, true, timeInNanoseconds);
LOG_VULKAN_RESULT(result);
if (result == VK_SUCCESS)
{
fence->_signaled = true;
fence->IsSignaled = true;
return false;
}
return true;
}
void FenceManagerVulkan::ResetFence(FenceVulkan* fence)
void FenceManagerVulkan::ResetFence(FenceVulkan* fence) const
{
if (fence->_signaled)
if (fence->IsSignaled)
{
VALIDATE_VULKAN_RESULT(vkResetFences(_device->Device, 1, &fence->_handle));
fence->_signaled = false;
VALIDATE_VULKAN_RESULT(vkResetFences(_device->Device, 1, &fence->Handle));
fence->IsSignaled = false;
}
}
void FenceManagerVulkan::ReleaseFence(FenceVulkan*& fence)
{
ScopeLock lock(_device->_fenceLock);
ResetFence(fence);
_usedFences.Remove(fence);
_freeFences.Add(fence);
@@ -2184,37 +2153,31 @@ void FenceManagerVulkan::ReleaseFence(FenceVulkan*& fence)
void FenceManagerVulkan::WaitAndReleaseFence(FenceVulkan*& fence, uint64 timeInNanoseconds)
{
ScopeLock lock(_device->_fenceLock);
if (!fence->IsSignaled())
{
if (!fence->IsSignaled)
WaitForFence(fence, timeInNanoseconds);
}
ResetFence(fence);
_usedFences.Remove(fence);
_freeFences.Add(fence);
fence = nullptr;
}
bool FenceManagerVulkan::CheckFenceState(FenceVulkan* fence)
bool FenceManagerVulkan::CheckFenceState(FenceVulkan* fence) const
{
ASSERT(_usedFences.Contains(fence));
ASSERT(!fence->_signaled);
const VkResult result = vkGetFenceStatus(_device->Device, fence->GetHandle());
ASSERT(!fence->IsSignaled);
const VkResult result = vkGetFenceStatus(_device->Device, fence->Handle);
if (result == VK_SUCCESS)
{
fence->_signaled = true;
fence->IsSignaled = true;
return true;
}
return false;
}
void FenceManagerVulkan::DestroyFence(FenceVulkan* fence)
void FenceManagerVulkan::DestroyFence(FenceVulkan* fence) const
{
vkDestroyFence(_device->Device, fence->GetHandle(), nullptr);
fence->_handle = VK_NULL_HANDLE;
vkDestroyFence(_device->Device, fence->Handle, nullptr);
fence->Handle = VK_NULL_HANDLE;
Delete(fence);
}