2026-03-30 02:22:17 +08:00
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
2026-04-02 19:17:22 +08:00
|
|
|
#include <XCEngine/Rendering/Passes/BuiltinObjectIdPass.h>
|
2026-03-30 02:22:17 +08:00
|
|
|
#include <XCEngine/Rendering/Pipelines/BuiltinForwardPipeline.h>
|
|
|
|
|
#include <XCEngine/Resources/Mesh/Mesh.h>
|
|
|
|
|
#include <XCEngine/RHI/RHIEnums.h>
|
|
|
|
|
|
|
|
|
|
using namespace XCEngine::Rendering::Pipelines;
|
2026-04-02 19:17:22 +08:00
|
|
|
using namespace XCEngine::Rendering::Passes;
|
2026-03-30 02:22:17 +08:00
|
|
|
using namespace XCEngine::Resources;
|
|
|
|
|
using namespace XCEngine::RHI;
|
|
|
|
|
|
|
|
|
|
TEST(BuiltinForwardPipeline_Test, UsesFloat3PositionInputLayoutForStaticMeshVertices) {
|
|
|
|
|
const InputLayoutDesc inputLayout = BuiltinForwardPipeline::BuildInputLayout();
|
|
|
|
|
|
2026-04-01 00:41:56 +08:00
|
|
|
ASSERT_EQ(inputLayout.elements.size(), 3u);
|
2026-03-30 02:22:17 +08:00
|
|
|
|
|
|
|
|
const InputElementDesc& position = inputLayout.elements[0];
|
|
|
|
|
EXPECT_EQ(position.semanticName, "POSITION");
|
|
|
|
|
EXPECT_EQ(position.semanticIndex, 0u);
|
|
|
|
|
EXPECT_EQ(position.format, static_cast<uint32_t>(Format::R32G32B32_Float));
|
|
|
|
|
EXPECT_EQ(position.inputSlot, 0u);
|
|
|
|
|
EXPECT_EQ(position.alignedByteOffset, 0u);
|
|
|
|
|
|
2026-04-01 00:41:56 +08:00
|
|
|
const InputElementDesc& normal = inputLayout.elements[1];
|
|
|
|
|
EXPECT_EQ(normal.semanticName, "NORMAL");
|
|
|
|
|
EXPECT_EQ(normal.semanticIndex, 0u);
|
|
|
|
|
EXPECT_EQ(normal.format, static_cast<uint32_t>(Format::R32G32B32_Float));
|
|
|
|
|
EXPECT_EQ(normal.inputSlot, 0u);
|
|
|
|
|
EXPECT_EQ(normal.alignedByteOffset, static_cast<uint32_t>(offsetof(StaticMeshVertex, normal)));
|
|
|
|
|
|
|
|
|
|
const InputElementDesc& texcoord = inputLayout.elements[2];
|
2026-03-30 02:22:17 +08:00
|
|
|
EXPECT_EQ(texcoord.semanticName, "TEXCOORD");
|
|
|
|
|
EXPECT_EQ(texcoord.semanticIndex, 0u);
|
|
|
|
|
EXPECT_EQ(texcoord.format, static_cast<uint32_t>(Format::R32G32_Float));
|
|
|
|
|
EXPECT_EQ(texcoord.inputSlot, 0u);
|
|
|
|
|
EXPECT_EQ(texcoord.alignedByteOffset, static_cast<uint32_t>(offsetof(StaticMeshVertex, uv0)));
|
|
|
|
|
}
|
2026-04-02 19:17:22 +08:00
|
|
|
|
|
|
|
|
TEST(BuiltinObjectIdPass_Test, UsesFloat3PositionInputLayoutForStaticMeshVertices) {
|
|
|
|
|
const InputLayoutDesc inputLayout = BuiltinObjectIdPass::BuildInputLayout();
|
|
|
|
|
|
|
|
|
|
ASSERT_EQ(inputLayout.elements.size(), 1u);
|
|
|
|
|
|
|
|
|
|
const InputElementDesc& position = inputLayout.elements[0];
|
|
|
|
|
EXPECT_EQ(position.semanticName, "POSITION");
|
|
|
|
|
EXPECT_EQ(position.semanticIndex, 0u);
|
|
|
|
|
EXPECT_EQ(position.format, static_cast<uint32_t>(Format::R32G32B32_Float));
|
|
|
|
|
EXPECT_EQ(position.inputSlot, 0u);
|
|
|
|
|
EXPECT_EQ(position.alignedByteOffset, static_cast<uint32_t>(offsetof(StaticMeshVertex, position)));
|
|
|
|
|
}
|