@@ -412,7 +412,17 @@ void CreateGraphicsPSO(IRenderStateCache* pCache, bool PresentInCache, IShader*
412412 PsoCI.GraphicsPipeline .RTVFormats [0 ] = ColorBufferFormat;
413413 }
414414
415- EXPECT_EQ (pCache->CreateGraphicsPipelineState (PsoCI, ppPSO), PresentInCache);
415+ if (pCache != nullptr )
416+ {
417+ EXPECT_EQ (pCache->CreateGraphicsPipelineState (PsoCI, ppPSO), PresentInCache);
418+ }
419+ else
420+ {
421+ EXPECT_FALSE (PresentInCache);
422+ pEnv->GetDevice ()->CreateGraphicsPipelineState (PsoCI, ppPSO);
423+ ASSERT_NE (*ppPSO, nullptr );
424+ }
425+
416426 if (*ppPSO != nullptr )
417427 {
418428 const auto & Desc = (*ppPSO)->GetDesc ();
@@ -443,6 +453,10 @@ void TestGraphicsPSO(bool UseRenderPass)
443453 ASSERT_NE (pUncachedVS, nullptr );
444454 ASSERT_NE (pUncachedPS, nullptr );
445455
456+ RefCntAutoPtr<IPipelineState> pRefPSO;
457+ CreateGraphicsPSO (nullptr , false , pUncachedVS, pUncachedPS, UseRenderPass, &pRefPSO);
458+ ASSERT_NE (pRefPSO, nullptr );
459+
446460 for (Uint32 HotReload = 0 ; HotReload < 2 ; ++HotReload)
447461 {
448462 RefCntAutoPtr<IDataBlob> pData;
@@ -463,6 +477,8 @@ void TestGraphicsPSO(bool UseRenderPass)
463477 RefCntAutoPtr<IPipelineState> pPSO;
464478 CreateGraphicsPSO (pCache, pData != nullptr , pVS1, pPS1, UseRenderPass, &pPSO);
465479 ASSERT_NE (pPSO, nullptr );
480+ EXPECT_TRUE (pRefPSO->IsCompatibleWith (pPSO));
481+ EXPECT_TRUE (pPSO->IsCompatibleWith (pRefPSO));
466482
467483 VerifyGraphicsPSO (pPSO, UseRenderPass);
468484
@@ -476,6 +492,9 @@ void TestGraphicsPSO(bool UseRenderPass)
476492 {
477493 RefCntAutoPtr<IPipelineState> pPSO2;
478494 CreateGraphicsPSO (pCache, pData != nullptr , pUncachedVS, pUncachedPS, UseRenderPass, &pPSO2);
495+ ASSERT_NE (pPSO2, nullptr );
496+ EXPECT_TRUE (pRefPSO->IsCompatibleWith (pPSO2));
497+ EXPECT_TRUE (pPSO2->IsCompatibleWith (pRefPSO));
479498 VerifyGraphicsPSO (pPSO2, UseRenderPass);
480499 }
481500
@@ -539,7 +558,17 @@ void CreateComputePSO(IRenderStateCache* pCache, bool PresentInCache, IShader* p
539558 PsoCI.PSODesc .ResourceLayout .NumVariables = _countof (Variables);
540559 }
541560
542- EXPECT_EQ (pCache->CreateComputePipelineState (PsoCI, ppPSO), PresentInCache);
561+ if (pCache != nullptr )
562+ {
563+ EXPECT_EQ (pCache->CreateComputePipelineState (PsoCI, ppPSO), PresentInCache);
564+ }
565+ else
566+ {
567+ EXPECT_FALSE (PresentInCache);
568+ pEnv->GetDevice ()->CreateComputePipelineState (PsoCI, ppPSO);
569+ ASSERT_NE (*ppPSO, nullptr );
570+ }
571+
543572 if (*ppPSO != nullptr )
544573 {
545574 const auto & Desc = (*ppPSO)->GetDesc ();
@@ -569,6 +598,16 @@ void TestComputePSO(bool UseSignature)
569598 pDevice->GetEngineFactory ()->CreateDefaultShaderSourceStreamFactory (" shaders/RenderStateCache" , &pShaderSourceFactory);
570599 ASSERT_TRUE (pShaderSourceFactory);
571600
601+ RefCntAutoPtr<IPipelineState> pRefPSO;
602+ {
603+ RefCntAutoPtr<IShader> pUncachedCS;
604+ CreateComputeShader (nullptr , pShaderSourceFactory, pUncachedCS, false );
605+ ASSERT_NE (pUncachedCS, nullptr );
606+
607+ CreateComputePSO (nullptr , false , pUncachedCS, UseSignature, &pRefPSO);
608+ ASSERT_NE (pRefPSO, nullptr );
609+ }
610+
572611 for (Uint32 HotReload = 0 ; HotReload < 2 ; ++HotReload)
573612 {
574613 RefCntAutoPtr<IDataBlob> pData;
@@ -588,6 +627,8 @@ void TestComputePSO(bool UseSignature)
588627 RefCntAutoPtr<IPipelineState> pPSO;
589628 CreateComputePSO (pCache, pData != nullptr , pCS, UseSignature, &pPSO);
590629 ASSERT_NE (pPSO, nullptr );
630+ EXPECT_TRUE (pRefPSO->IsCompatibleWith (pPSO));
631+ EXPECT_TRUE (pPSO->IsCompatibleWith (pRefPSO));
591632
592633 VerifyComputePSO (pPSO, /* UseSignature = */ true );
593634
0 commit comments