Files
XCEngine/engine/include/XCEngine/RHI/Vulkan/VulkanCommandQueue.h

44 lines
1.3 KiB
C++

#pragma once
#include "XCEngine/RHI/RHICommandQueue.h"
#include "XCEngine/RHI/RHIFence.h"
#include "XCEngine/RHI/Vulkan/VulkanCommon.h"
namespace XCEngine {
namespace RHI {
class VulkanDevice;
class VulkanCommandQueue : public RHICommandQueue {
public:
VulkanCommandQueue() = default;
~VulkanCommandQueue() override = default;
bool Initialize(VulkanDevice* device, CommandQueueType type);
void Shutdown() override;
void ExecuteCommandLists(uint32_t count, void** lists) override;
void Signal(RHIFence* fence, uint64_t value) override;
void Wait(RHIFence* fence, uint64_t value) override;
uint64_t GetCompletedValue() override;
void WaitForIdle() override;
CommandQueueType GetType() const override { return m_type; }
uint64_t GetTimestampFrequency() const override { return 1000000000ull; }
void* GetNativeHandle() override { return m_queue; }
void WaitForPreviousFrame() override {}
uint64_t GetCurrentFrame() const override { return m_currentFrame; }
VkQueue GetQueue() const { return m_queue; }
private:
VulkanDevice* m_device = nullptr;
VkQueue m_queue = VK_NULL_HANDLE;
CommandQueueType m_type = CommandQueueType::Direct;
uint64_t m_currentFrame = 0;
};
} // namespace RHI
} // namespace XCEngine