Add material render state and pipeline caching
This commit is contained in:
@@ -265,4 +265,42 @@ TEST(RenderMaterialUtility_Test, MatchesBuiltinForwardPassMetadata) {
|
||||
EXPECT_FALSE(MatchesBuiltinPass(&depthOnlyMaterial, BuiltinMaterialPass::Forward));
|
||||
}
|
||||
|
||||
TEST(RenderMaterialUtility_Test, MapsMaterialRenderStateToRhiDescriptors) {
|
||||
Material material;
|
||||
MaterialRenderState renderState;
|
||||
renderState.cullMode = MaterialCullMode::Back;
|
||||
renderState.blendEnable = true;
|
||||
renderState.srcBlend = MaterialBlendFactor::SrcAlpha;
|
||||
renderState.dstBlend = MaterialBlendFactor::InvSrcAlpha;
|
||||
renderState.srcBlendAlpha = MaterialBlendFactor::One;
|
||||
renderState.dstBlendAlpha = MaterialBlendFactor::InvSrcAlpha;
|
||||
renderState.blendOp = MaterialBlendOp::Add;
|
||||
renderState.blendOpAlpha = MaterialBlendOp::Subtract;
|
||||
renderState.colorWriteMask = 0x7;
|
||||
renderState.depthTestEnable = true;
|
||||
renderState.depthWriteEnable = false;
|
||||
renderState.depthFunc = MaterialComparisonFunc::LessEqual;
|
||||
material.SetRenderState(renderState);
|
||||
|
||||
const XCEngine::RHI::RasterizerDesc rasterizerState = BuildRasterizerState(&material);
|
||||
const XCEngine::RHI::BlendDesc blendState = BuildBlendState(&material);
|
||||
const XCEngine::RHI::DepthStencilStateDesc depthStencilState = BuildDepthStencilState(&material);
|
||||
|
||||
EXPECT_EQ(rasterizerState.cullMode, static_cast<uint32_t>(XCEngine::RHI::CullMode::Back));
|
||||
EXPECT_EQ(rasterizerState.frontFace, static_cast<uint32_t>(XCEngine::RHI::FrontFace::CounterClockwise));
|
||||
|
||||
EXPECT_TRUE(blendState.blendEnable);
|
||||
EXPECT_EQ(blendState.srcBlend, static_cast<uint32_t>(XCEngine::RHI::BlendFactor::SrcAlpha));
|
||||
EXPECT_EQ(blendState.dstBlend, static_cast<uint32_t>(XCEngine::RHI::BlendFactor::InvSrcAlpha));
|
||||
EXPECT_EQ(blendState.srcBlendAlpha, static_cast<uint32_t>(XCEngine::RHI::BlendFactor::One));
|
||||
EXPECT_EQ(blendState.dstBlendAlpha, static_cast<uint32_t>(XCEngine::RHI::BlendFactor::InvSrcAlpha));
|
||||
EXPECT_EQ(blendState.blendOp, static_cast<uint32_t>(XCEngine::RHI::BlendOp::Add));
|
||||
EXPECT_EQ(blendState.blendOpAlpha, static_cast<uint32_t>(XCEngine::RHI::BlendOp::Subtract));
|
||||
EXPECT_EQ(blendState.colorWriteMask, 0x7);
|
||||
|
||||
EXPECT_TRUE(depthStencilState.depthTestEnable);
|
||||
EXPECT_FALSE(depthStencilState.depthWriteEnable);
|
||||
EXPECT_EQ(depthStencilState.depthFunc, static_cast<uint32_t>(XCEngine::RHI::ComparisonFunc::LessEqual));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user