Skip to content

Commit 2a2f4d2

Browse files
committed
More robust AddSpecializationConstant deep-copies tests and SerializePSOCreateInfo tests.
1 parent 07c3ff5 commit 2a2f4d2

2 files changed

Lines changed: 61 additions & 0 deletions

File tree

Tests/DiligentCoreTest/src/GraphicsEngine/GraphicsTypesXTest.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,6 +1174,58 @@ TEST(GraphicsTypesXTest, SpecializationConstants)
11741174
EXPECT_EQ(DescX, Ref);
11751175
}
11761176

1177+
// Test AddSpecializationConstant deep-copies raw bytes.
1178+
{
1179+
Uint8 MutableData[] = {10, 20, 30, 40, 50};
1180+
const Uint8 RefData[] = {10, 20, 30, 40, 50};
1181+
1182+
ComputePipelineStateCreateInfoX DescX;
1183+
DescX.AddSpecializationConstant({"SC_Bytes", SHADER_TYPE_PIXEL, static_cast<Uint32>(_countof(MutableData)), MutableData});
1184+
1185+
for (auto& Byte : MutableData)
1186+
Byte = 0;
1187+
1188+
ASSERT_EQ(DescX.NumSpecializationConstants, 1u);
1189+
const auto& SpecConst = DescX.pSpecializationConstants[0];
1190+
ASSERT_NE(SpecConst.pData, nullptr);
1191+
EXPECT_EQ(SpecConst.Size, static_cast<Uint32>(_countof(RefData)));
1192+
1193+
const auto* pData = static_cast<const Uint8*>(SpecConst.pData);
1194+
for (size_t i = 0; i < _countof(RefData); ++i)
1195+
EXPECT_EQ(pData[i], RefData[i]);
1196+
}
1197+
1198+
// Test create-info wrapper constructor deep-copies raw bytes.
1199+
{
1200+
const Uint8 RefData[] = {1, 2, 3, 4};
1201+
ComputePipelineStateCreateInfoX DescX;
1202+
{
1203+
Uint8 MutableData[] = {1, 2, 3, 4};
1204+
const SpecializationConstant SpecConst{
1205+
"SC_CtorBytes",
1206+
SHADER_TYPE_COMPUTE,
1207+
static_cast<Uint32>(_countof(MutableData)),
1208+
MutableData};
1209+
1210+
ComputePipelineStateCreateInfo SrcCI;
1211+
SrcCI.NumSpecializationConstants = 1;
1212+
SrcCI.pSpecializationConstants = &SpecConst;
1213+
DescX = ComputePipelineStateCreateInfoX{SrcCI};
1214+
1215+
for (auto& Byte : MutableData)
1216+
Byte = 0;
1217+
}
1218+
1219+
ASSERT_EQ(DescX.NumSpecializationConstants, 1u);
1220+
const auto& SpecConst = DescX.pSpecializationConstants[0];
1221+
ASSERT_NE(SpecConst.pData, nullptr);
1222+
EXPECT_EQ(SpecConst.Size, static_cast<Uint32>(_countof(RefData)));
1223+
1224+
const auto* pData = static_cast<const Uint8*>(SpecConst.pData);
1225+
for (size_t i = 0; i < _countof(RefData); ++i)
1226+
EXPECT_EQ(pData[i], RefData[i]);
1227+
}
1228+
11771229
// Test ClearSpecializationConstants
11781230
{
11791231
ComputePipelineStateCreateInfoX DescX;

Tests/DiligentCoreTest/src/GraphicsEngine/PSOSerializerTest.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,15 @@ static void TestSerializePSOCreateInfo(HelperType&& Helper)
306306

307307
EXPECT_TRUE(RSer.IsEnded());
308308
EXPECT_EQ(SrcPSO, DstPSO);
309+
if (SrcPSO.NumSpecializationConstants > 0)
310+
{
311+
ASSERT_NE(DstPSO.pSpecializationConstants, nullptr);
312+
for (Uint32 i = 0; i < SrcPSO.NumSpecializationConstants; ++i)
313+
{
314+
EXPECT_STREQ(SrcPSO.pSpecializationConstants[i].Name, DstPSO.pSpecializationConstants[i].Name);
315+
EXPECT_NE(SrcPSO.pSpecializationConstants[i].pData, DstPSO.pSpecializationConstants[i].pData);
316+
}
317+
}
309318

310319
for (size_t i = 0; i < DstPRSNames.size(); ++i)
311320
{

0 commit comments

Comments
 (0)