#include "fixtures/RHITestFixture.h" #include "XCEngine/RHI/RHICommandQueue.h" #include "XCEngine/RHI/RHICommandList.h" #include "XCEngine/RHI/RHIFence.h" using namespace XCEngine::RHI; TEST_P(RHITestFixture, CommandQueue_ExecuteCommandLists) { CommandQueueDesc queueDesc = {}; queueDesc.queueType = static_cast(CommandQueueType::Direct); RHICommandQueue* queue = GetDevice()->CreateCommandQueue(queueDesc); ASSERT_NE(queue, nullptr); CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); void* cmdLists[] = { cmdList }; queue->ExecuteCommandLists(1, cmdLists); cmdList->Close(); cmdList->Shutdown(); delete cmdList; queue->Shutdown(); delete queue; } TEST_P(RHITestFixture, CommandQueue_SignalWaitFence) { CommandQueueDesc queueDesc = {}; queueDesc.queueType = static_cast(CommandQueueType::Direct); RHICommandQueue* queue = GetDevice()->CreateCommandQueue(queueDesc); ASSERT_NE(queue, nullptr); FenceDesc fenceDesc = {}; fenceDesc.initialValue = 0; RHIFence* fence = GetDevice()->CreateFence(fenceDesc); ASSERT_NE(fence, nullptr); queue->Signal(fence, 1); fence->Wait(1); EXPECT_EQ(fence->GetCompletedValue(), 1u); fence->Shutdown(); delete fence; queue->Shutdown(); delete queue; } TEST_P(RHITestFixture, CommandQueue_GetCompletedValue) { CommandQueueDesc queueDesc = {}; queueDesc.queueType = static_cast(CommandQueueType::Direct); RHICommandQueue* queue = GetDevice()->CreateCommandQueue(queueDesc); ASSERT_NE(queue, nullptr); uint64_t completedValue = queue->GetCompletedValue(); EXPECT_GE(completedValue, 0u); queue->Shutdown(); delete queue; } TEST_P(RHITestFixture, CommandQueue_WaitForIdle) { CommandQueueDesc queueDesc = {}; queueDesc.queueType = static_cast(CommandQueueType::Direct); RHICommandQueue* queue = GetDevice()->CreateCommandQueue(queueDesc); ASSERT_NE(queue, nullptr); queue->WaitForIdle(); queue->Shutdown(); delete queue; } TEST_P(RHITestFixture, CommandQueue_GetType) { CommandQueueDesc queueDesc = {}; queueDesc.queueType = static_cast(CommandQueueType::Direct); RHICommandQueue* queue = GetDevice()->CreateCommandQueue(queueDesc); ASSERT_NE(queue, nullptr); EXPECT_EQ(queue->GetType(), CommandQueueType::Direct); queue->Shutdown(); delete queue; } TEST_P(RHITestFixture, CommandQueue_GetTimestampFrequency) { CommandQueueDesc queueDesc = {}; queueDesc.queueType = static_cast(CommandQueueType::Direct); RHICommandQueue* queue = GetDevice()->CreateCommandQueue(queueDesc); ASSERT_NE(queue, nullptr); uint64_t frequency = queue->GetTimestampFrequency(); EXPECT_GT(frequency, 0u); queue->Shutdown(); delete queue; }