11/*
2- * Copyright 2024 Diligent Graphics LLC
2+ * Copyright 2024-2025 Diligent Graphics LLC
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
3131
3232#include " PipelineState.h"
3333#include " RefCntAutoPtr.hpp"
34+ #include " PipelineStateBase.hpp"
3435
3536namespace Diligent
3637{
@@ -42,15 +43,15 @@ class ProxyPipelineState : public Base
4243{
4344public:
4445 template <typename ... Args>
45- ProxyPipelineState (Args&&... args) :
46- Base{std::forward<Args>(args)...}
46+ ProxyPipelineState (const PipelineStateDesc& PSODesc, Args&&... args) :
47+ Base{std::forward<Args>(args)...},
48+ m_Name{PSODesc.Name != nullptr ? PSODesc.Name : " " },
49+ m_Desc{m_Name.c_str (), PSODesc.PipelineType }
4750 {}
4851
4952 virtual const PipelineStateDesc& DILIGENT_CALL_TYPE GetDesc () const override
5053 {
51- DEV_CHECK_ERR (m_pPipeline, " Internal pipeline is null" );
52- static constexpr PipelineStateDesc NullDesc;
53- return m_pPipeline ? m_pPipeline->GetDesc () : NullDesc;
54+ return m_pPipeline ? m_pPipeline->GetDesc () : m_Desc;
5455 }
5556
5657 virtual Int32 DILIGENT_CALL_TYPE GetUniqueID () const override
@@ -62,7 +63,10 @@ class ProxyPipelineState : public Base
6263 virtual void DILIGENT_CALL_TYPE SetUserData (IObject* pUserData) override
6364 {
6465 DEV_CHECK_ERR (m_pPipeline, " Internal pipeline is null" );
65- m_pPipeline->SetUserData (pUserData);
66+ if (m_pPipeline)
67+ {
68+ m_pPipeline->SetUserData (pUserData);
69+ }
6670 }
6771
6872 virtual IObject* DILIGENT_CALL_TYPE GetUserData () const override
@@ -104,7 +108,7 @@ class ProxyPipelineState : public Base
104108 virtual Uint32 DILIGENT_CALL_TYPE GetStaticVariableCount (SHADER_TYPE ShaderType) const override
105109 {
106110 DEV_CHECK_ERR (m_pPipeline, " Internal pipeline is null" );
107- return m_pPipeline->GetStaticVariableCount (ShaderType);
111+ return m_pPipeline ? m_pPipeline ->GetStaticVariableCount (ShaderType) : 0 ;
108112 }
109113
110114 virtual IShaderResourceVariable* DILIGENT_CALL_TYPE GetStaticVariableByName (SHADER_TYPE ShaderType, const Char* Name) override
@@ -122,7 +126,10 @@ class ProxyPipelineState : public Base
122126 virtual void DILIGENT_CALL_TYPE CreateShaderResourceBinding (IShaderResourceBinding** ppShaderResourceBinding, bool InitStaticResources) override
123127 {
124128 DEV_CHECK_ERR (m_pPipeline, " Internal pipeline is null" );
125- m_pPipeline->CreateShaderResourceBinding (ppShaderResourceBinding, InitStaticResources);
129+ if (m_pPipeline)
130+ {
131+ m_pPipeline->CreateShaderResourceBinding (ppShaderResourceBinding, InitStaticResources);
132+ }
126133 }
127134
128135 virtual void DILIGENT_CALL_TYPE InitializeStaticSRBResources (IShaderResourceBinding* pShaderResourceBinding) const override
@@ -168,6 +175,9 @@ class ProxyPipelineState : public Base
168175 }
169176
170177protected:
178+ const std::string m_Name;
179+ const PipelineStateDesc m_Desc;
180+
171181 RefCntAutoPtr<IPipelineState> m_pPipeline;
172182};
173183
0 commit comments