#include "fixtures/RHITestFixture.h" #include "XCEngine/RHI/RHICommandList.h" #include "XCEngine/RHI/RHITexture.h" using namespace XCEngine::RHI; TEST_P(RHITestFixture, CommandList_Reset_Close) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_SetPrimitiveTopology) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); cmdList->SetPrimitiveTopology(PrimitiveTopology::TriangleList); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_SetViewport) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); Viewport vp = { 0.0f, 0.0f, 800.0f, 600.0f, 0.0f, 1.0f }; cmdList->Reset(); cmdList->SetViewport(vp); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_SetViewports) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); Viewport viewports[2] = { { 0.0f, 0.0f, 400.0f, 300.0f, 0.0f, 1.0f }, { 400.0f, 300.0f, 400.0f, 300.0f, 0.0f, 1.0f } }; cmdList->Reset(); cmdList->SetViewports(2, viewports); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_SetScissorRect) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); Rect rect = { 0, 0, 800, 600 }; cmdList->Reset(); cmdList->SetScissorRect(rect); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_Draw) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); cmdList->SetPrimitiveTopology(PrimitiveTopology::TriangleList); cmdList->Draw(3); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_DrawIndexed) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); cmdList->SetPrimitiveTopology(PrimitiveTopology::TriangleList); cmdList->DrawIndexed(6); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_ClearRenderTarget) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); TextureDesc texDesc = {}; texDesc.width = 256; texDesc.height = 256; texDesc.format = static_cast(Format::R8G8B8A8_UNorm); texDesc.textureType = static_cast(TextureType::Texture2D); RHITexture* texture = GetDevice()->CreateTexture(texDesc); ASSERT_NE(texture, nullptr); float color[4] = { 1.0f, 0.0f, 0.0f, 1.0f }; cmdList->Reset(); cmdList->ClearRenderTarget(texture->GetNativeHandle(), color); cmdList->Close(); texture->Shutdown(); delete texture; cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_SetDepthStencilState) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); DepthStencilState dsState = {}; dsState.depthEnable = true; dsState.depthWriteMask = true; dsState.depthFunc = ComparisonFunc::Less; cmdList->Reset(); cmdList->SetDepthStencilState(dsState); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_SetBlendState) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); BlendState blendState = {}; blendState.alphaToCoverageEnable = false; blendState.independentBlendEnable = false; cmdList->Reset(); cmdList->SetBlendState(blendState); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_SetStencilRef) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); cmdList->SetStencilRef(0); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_TransitionBarrier) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); TextureDesc texDesc = {}; texDesc.width = 256; texDesc.height = 256; texDesc.format = static_cast(Format::R8G8B8A8_UNorm); texDesc.textureType = static_cast(TextureType::Texture2D); RHITexture* texture = GetDevice()->CreateTexture(texDesc); ASSERT_NE(texture, nullptr); cmdList->Reset(); cmdList->TransitionBarrier(texture->GetNativeHandle(), ResourceStates::Common, ResourceStates::RenderTarget); cmdList->Close(); texture->Shutdown(); delete texture; cmdList->Shutdown(); delete cmdList; }