@@ -484,14 +484,22 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
484484
485485 IMPLEMENT_QUERY_INTERFACE_IN_PLACE (IID_PipelineState, TDeviceObjectBase)
486486
487+ virtual const PipelineStateDesc& DILIGENT_CALL_TYPE GetDesc () const override final
488+ {
489+ CheckPipelineReady ();
490+ return this ->m_Desc ;
491+ }
492+
487493 Uint32 GetBufferStride (Uint32 BufferSlot) const
488494 {
495+ CheckPipelineReady ();
489496 VERIFY_EXPR (this ->m_Desc .IsAnyGraphicsPipeline ());
490497 return BufferSlot < m_pGraphicsPipelineData->BufferSlotsUsed ? m_pGraphicsPipelineData->pStrides [BufferSlot] : 0 ;
491498 }
492499
493500 Uint32 GetNumBufferSlotsUsed () const
494501 {
502+ CheckPipelineReady ();
495503 VERIFY_EXPR (this ->m_Desc .IsAnyGraphicsPipeline ());
496504 return m_pGraphicsPipelineData->BufferSlotsUsed ;
497505 }
@@ -510,20 +518,23 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
510518
511519 virtual const GraphicsPipelineDesc& DILIGENT_CALL_TYPE GetGraphicsPipelineDesc () const override final
512520 {
521+ CheckPipelineReady ();
513522 VERIFY_EXPR (this ->m_Desc .IsAnyGraphicsPipeline ());
514523 VERIFY_EXPR (m_pGraphicsPipelineData != nullptr );
515524 return m_pGraphicsPipelineData->Desc ;
516525 }
517526
518527 virtual const RayTracingPipelineDesc& DILIGENT_CALL_TYPE GetRayTracingPipelineDesc () const override final
519528 {
529+ CheckPipelineReady ();
520530 VERIFY_EXPR (this ->m_Desc .IsRayTracingPipeline ());
521531 VERIFY_EXPR (m_pRayTracingPipelineData != nullptr );
522532 return m_pRayTracingPipelineData->Desc ;
523533 }
524534
525535 virtual const TilePipelineDesc& DILIGENT_CALL_TYPE GetTilePipelineDesc () const override final
526536 {
537+ CheckPipelineReady ();
527538 VERIFY_EXPR (this ->m_Desc .IsTilePipeline ());
528539 VERIFY_EXPR (m_pTilePipelineData != nullptr );
529540 return m_pTilePipelineData->Desc ;
@@ -557,9 +568,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
557568 virtual void DILIGENT_CALL_TYPE CreateShaderResourceBinding (IShaderResourceBinding** ppShaderResourceBinding,
558569 bool InitStaticResources) override final
559570 {
560- DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
561- " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
562- " . Use GetStatus() to check the pipeline state status." );
571+ CheckPipelineReady ();
563572
564573 *ppShaderResourceBinding = nullptr ;
565574
@@ -576,9 +585,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
576585 virtual IShaderResourceVariable* DILIGENT_CALL_TYPE GetStaticVariableByName (SHADER_TYPE ShaderType,
577586 const Char* Name) override final
578587 {
579- DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
580- " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
581- " . Use GetStatus() to check the pipeline state status." );
588+ CheckPipelineReady ();
582589
583590 if (!m_UsingImplicitSignature)
584591 {
@@ -600,9 +607,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
600607 virtual IShaderResourceVariable* DILIGENT_CALL_TYPE GetStaticVariableByIndex (SHADER_TYPE ShaderType,
601608 Uint32 Index) override final
602609 {
603- DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
604- " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
605- " . Use GetStatus() to check the pipeline state status." );
610+ CheckPipelineReady ();
606611
607612 if (!m_UsingImplicitSignature)
608613 {
@@ -623,9 +628,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
623628
624629 virtual Uint32 DILIGENT_CALL_TYPE GetStaticVariableCount (SHADER_TYPE ShaderType) const override final
625630 {
626- DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
627- " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
628- " . Use GetStatus() to check the pipeline state status." );
631+ CheckPipelineReady ();
629632
630633 if (!m_UsingImplicitSignature)
631634 {
@@ -648,9 +651,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
648651 IResourceMapping* pResourceMapping,
649652 BIND_SHADER_RESOURCES_FLAGS Flags) override final
650653 {
651- DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
652- " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
653- " . Use GetStatus() to check the pipeline state status." );
654+ CheckPipelineReady ();
654655
655656 if (!m_UsingImplicitSignature)
656657 {
@@ -664,9 +665,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
664665
665666 virtual void DILIGENT_CALL_TYPE InitializeStaticSRBResources (IShaderResourceBinding* pSRB) const override final
666667 {
667- DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
668- " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
669- " . Use GetStatus() to check the pipeline state status." );
668+ CheckPipelineReady ();
670669
671670 if (!m_UsingImplicitSignature)
672671 {
@@ -680,9 +679,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
680679
681680 virtual void DILIGENT_CALL_TYPE CopyStaticResources (IPipelineState* pDstPipeline) const override final
682681 {
683- DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
684- " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
685- " . Use GetStatus() to check the pipeline state status." );
682+ CheckPipelineReady ();
686683
687684 if (pDstPipeline == nullptr )
688685 {
@@ -710,31 +707,22 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
710707 // / Implementation of IPipelineState::GetResourceSignatureCount().
711708 virtual Uint32 DILIGENT_CALL_TYPE GetResourceSignatureCount () const override final
712709 {
713- DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
714- " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
715- " . Use GetStatus() to check the pipeline state status." );
716-
710+ CheckPipelineReady ();
717711 return m_SignatureCount;
718712 }
719713
720714 // / Implementation of IPipelineState::GetResourceSignature().
721715 virtual PipelineResourceSignatureImplType* DILIGENT_CALL_TYPE GetResourceSignature (Uint32 Index) const override final
722716 {
723- DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
724- " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
725- " . Use GetStatus() to check the pipeline state status." );
726-
717+ CheckPipelineReady ();
727718 VERIFY_EXPR (Index < m_SignatureCount);
728719 return m_Signatures[Index];
729720 }
730721
731722 // / Implementation of IPipelineState::IsCompatibleWith().
732723 virtual bool DILIGENT_CALL_TYPE IsCompatibleWith (const IPipelineState* pPSO) const override // May be overridden
733724 {
734- DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
735- " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
736- " . Use GetStatus() to check the pipeline state status." );
737-
725+ CheckPipelineReady ();
738726 DEV_CHECK_ERR (pPSO != nullptr , " pPSO must not be null" );
739727
740728 if (pPSO == this )
@@ -1148,6 +1136,14 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
11481136 }
11491137
11501138private:
1139+ void CheckPipelineReady () const
1140+ {
1141+ // It is OK to use m_Desc.Name as it is initialized by DeviceObjectBase
1142+ DEV_CHECK_ERR (m_Status.load () == PIPELINE_STATE_STATUS_READY, " Pipeline state '" , this ->m_Desc .Name ,
1143+ " ' is expected to be Ready, but its actual status is " , GetPipelineStateStatusString (m_Status.load ()),
1144+ " . Use GetStatus() to check the pipeline state status." );
1145+ }
1146+
11511147 static void ReserveResourceLayout (const PipelineResourceLayoutDesc& SrcLayout, FixedLinearAllocator& MemPool) noexcept
11521148 {
11531149 if (SrcLayout.Variables != nullptr )
0 commit comments