Skip to content

Commit 7ef614b

Browse files
Render state cache: added test for creating SRB before reload
1 parent e33790f commit 7ef614b

File tree

1 file changed

+30
-8
lines changed

1 file changed

+30
-8
lines changed

Tests/DiligentCoreAPITest/src/RenderStateCacheTest.cpp

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -898,7 +898,7 @@ TEST(RenderStateCacheTest, RenderDeviceWithCache)
898898
}
899899

900900

901-
void TestPipelineReload(bool UseRenderPass)
901+
void TestPipelineReload(bool UseRenderPass, bool CreateSrbBeforeReload = false)
902902
{
903903
auto* pEnv = GPUTestingEnvironment::GetInstance();
904904
auto* pDevice = pEnv->GetDevice();
@@ -1043,6 +1043,24 @@ void TestPipelineReload(bool UseRenderPass)
10431043
pPSO->GetStaticVariableByName(SHADER_TYPE_VERTEX, "Colors")->Set(pConstBuff);
10441044
pPSO->GetStaticVariableByName(SHADER_TYPE_PIXEL, "g_Tex2D_Static0")->Set(RefTextures.GetView(0));
10451045

1046+
auto CreateSRB = [&]() {
1047+
pPSO->GetStaticVariableByName(SHADER_TYPE_PIXEL, "g_Tex2D_Static1")->Set(RefTextures.GetView(1));
1048+
1049+
RefCntAutoPtr<IShaderResourceBinding> pSRB;
1050+
pPSO->CreateShaderResourceBinding(&pSRB, true);
1051+
1052+
pSRB->GetVariableByName(SHADER_TYPE_PIXEL, "g_Tex2D_Mut")->Set(RefTextures.GetView(2));
1053+
pSRB->GetVariableByName(SHADER_TYPE_PIXEL, "g_Tex2D_Dyn")->Set(RefTextures.GetView(3));
1054+
return pSRB;
1055+
};
1056+
1057+
RefCntAutoPtr<IShaderResourceBinding> pSRB;
1058+
if (CreateSrbBeforeReload)
1059+
{
1060+
// Init SRB before reloading the PSO
1061+
pSRB = CreateSRB();
1062+
}
1063+
10461064
auto ModifyPSO = MakeCallback(
10471065
[&](PipelineStateCreateInfo& CreateInfo) {
10481066
ASSERT_STREQ(CreateInfo.PSODesc.Name, PSOName);
@@ -1053,13 +1071,12 @@ void TestPipelineReload(bool UseRenderPass)
10531071

10541072
EXPECT_EQ(pCache->Reload(ModifyPSO, ModifyPSO), pass == 0 ? 3u : 0u);
10551073

1056-
pPSO->GetStaticVariableByName(SHADER_TYPE_PIXEL, "g_Tex2D_Static1")->Set(RefTextures.GetView(1));
1057-
1058-
RefCntAutoPtr<IShaderResourceBinding> pSRB;
1059-
pPSO->CreateShaderResourceBinding(&pSRB, true);
1060-
1061-
pSRB->GetVariableByName(SHADER_TYPE_PIXEL, "g_Tex2D_Mut")->Set(RefTextures.GetView(2));
1062-
pSRB->GetVariableByName(SHADER_TYPE_PIXEL, "g_Tex2D_Dyn")->Set(RefTextures.GetView(3));
1074+
if (!pSRB)
1075+
{
1076+
// Init SRB after reloading the PSO
1077+
EXPECT_FALSE(CreateSrbBeforeReload);
1078+
pSRB = CreateSRB();
1079+
}
10631080

10641081
TestDraw(nullptr, nullptr, pPSO, UseRenderPass,
10651082
[&]() {
@@ -1083,4 +1100,9 @@ TEST(RenderStateCacheTest, Reload_RenderPass)
10831100
TestPipelineReload(/*UseRenderPass = */ true);
10841101
}
10851102

1103+
TEST(RenderStateCacheTest, Reload_SrbBeforeReload)
1104+
{
1105+
TestPipelineReload(/*UseRenderPass = */ false, /*TestSRB = */ true);
1106+
}
1107+
10861108
} // namespace

0 commit comments

Comments
 (0)