#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(static_cast(nullptr), color); cmdList->Close(); texture->Shutdown(); delete texture; 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(static_cast(nullptr), ResourceStates::Common, ResourceStates::RenderTarget); cmdList->Close(); texture->Shutdown(); delete texture; cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_TransitionBarrier_WithResourceView) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); cmdList->TransitionBarrier(static_cast(nullptr), ResourceStates::Common, ResourceStates::RenderTarget); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_SetRenderTargets_WithResourceView) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); cmdList->SetRenderTargets(0, static_cast(nullptr), static_cast(nullptr)); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_SetVertexBuffer_WithResourceView) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); RHIResourceView* buffer = nullptr; cmdList->SetVertexBuffers(0, 1, &buffer, nullptr, nullptr); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_SetIndexBuffer_WithResourceView) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); cmdList->SetIndexBuffer(static_cast(nullptr), 0); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_ClearRenderTarget_WithResourceView) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); float color[4] = { 1.0f, 0.0f, 0.0f, 1.0f }; cmdList->Reset(); cmdList->ClearRenderTarget(static_cast(nullptr), color); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_ClearDepthStencil_WithResourceView) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); cmdList->ClearDepthStencil(static_cast(nullptr), 1.0f, 0); cmdList->Close(); cmdList->Shutdown(); delete cmdList; } TEST_P(RHITestFixture, CommandList_CopyResource_WithResourceView) { CommandListDesc cmdDesc = {}; cmdDesc.commandListType = static_cast(CommandQueueType::Direct); RHICommandList* cmdList = GetDevice()->CreateCommandList(cmdDesc); ASSERT_NE(cmdList, nullptr); cmdList->Reset(); cmdList->CopyResource(static_cast(nullptr), static_cast(nullptr)); cmdList->Close(); cmdList->Shutdown(); delete cmdList; }