#include "fixtures/RHITestFixture.h" #include "XCEngine/RHI/RHIFence.h" using namespace XCEngine::RHI; TEST_P(RHITestFixture, Fence_Create) { FenceDesc desc = {}; desc.initialValue = 0; desc.flags = 0; RHIFence* fence = GetDevice()->CreateFence(desc); ASSERT_NE(fence, nullptr); fence->Shutdown(); delete fence; } TEST_P(RHITestFixture, Fence_Signal) { FenceDesc desc = {}; desc.initialValue = 0; RHIFence* fence = GetDevice()->CreateFence(desc); ASSERT_NE(fence, nullptr); fence->Signal(); fence->Shutdown(); delete fence; } TEST_P(RHITestFixture, Fence_SignalWithValue) { FenceDesc desc = {}; desc.initialValue = 0; RHIFence* fence = GetDevice()->CreateFence(desc); ASSERT_NE(fence, nullptr); fence->Signal(5); fence->Shutdown(); delete fence; } TEST_P(RHITestFixture, Fence_Wait) { FenceDesc desc = {}; desc.initialValue = 0; RHIFence* fence = GetDevice()->CreateFence(desc); ASSERT_NE(fence, nullptr); fence->Signal(1); fence->Wait(1); fence->Shutdown(); delete fence; } TEST_P(RHITestFixture, Fence_GetCompletedValue) { FenceDesc desc = {}; desc.initialValue = 0; RHIFence* fence = GetDevice()->CreateFence(desc); ASSERT_NE(fence, nullptr); EXPECT_EQ(fence->GetCompletedValue(), 0u); fence->Signal(1); fence->Wait(1); EXPECT_EQ(fence->GetCompletedValue(), 1u); fence->Shutdown(); delete fence; } TEST_P(RHITestFixture, Fence_GetNativeHandle) { FenceDesc desc = {}; desc.initialValue = 0; RHIFence* fence = GetDevice()->CreateFence(desc); ASSERT_NE(fence, nullptr); EXPECT_NE(fence->GetNativeHandle(), nullptr); fence->Shutdown(); delete fence; } TEST_P(RHITestFixture, Fence_Timeline_SignalIncrement) { FenceDesc desc = {}; desc.initialValue = 0; RHIFence* fence = GetDevice()->CreateFence(desc); ASSERT_NE(fence, nullptr); fence->Signal(1); fence->Wait(1); EXPECT_GE(fence->GetCompletedValue(), 1u); fence->Signal(5); fence->Wait(5); EXPECT_GE(fence->GetCompletedValue(), 5u); fence->Signal(10); fence->Wait(10); EXPECT_GE(fence->GetCompletedValue(), 10u); fence->Shutdown(); delete fence; } TEST_P(RHITestFixture, Fence_Timeline_SignalDecrement) { FenceDesc desc = {}; desc.initialValue = 0; RHIFence* fence = GetDevice()->CreateFence(desc); ASSERT_NE(fence, nullptr); fence->Signal(5); fence->Wait(5); EXPECT_GE(fence->GetCompletedValue(), 5u); fence->Signal(3); fence->Wait(3); EXPECT_GE(fence->GetCompletedValue(), 3u); fence->Shutdown(); delete fence; } TEST_P(RHITestFixture, Fence_Timeline_MultipleSignals) { FenceDesc desc = {}; desc.initialValue = 0; RHIFence* fence = GetDevice()->CreateFence(desc); ASSERT_NE(fence, nullptr); fence->Signal(10); fence->Wait(10); EXPECT_GE(fence->GetCompletedValue(), 10u); fence->Signal(20); fence->Wait(20); EXPECT_GE(fence->GetCompletedValue(), 20u); fence->Signal(30); fence->Wait(30); EXPECT_GE(fence->GetCompletedValue(), 30u); fence->Shutdown(); delete fence; } TEST_P(RHITestFixture, Fence_Timeline_WaitSmallerThanCompleted) { FenceDesc desc = {}; desc.initialValue = 0; RHIFence* fence = GetDevice()->CreateFence(desc); ASSERT_NE(fence, nullptr); fence->Signal(5); fence->Wait(5); fence->Wait(3); EXPECT_GE(fence->GetCompletedValue(), 5u); fence->Shutdown(); delete fence; }