44 lines
1.3 KiB
C++
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
|