@@ -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