summaryrefslogtreecommitdiffstats
path: root/Graphics
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2020-04-01 04:13:05 +0000
committerassiduous <assiduous@diligentgraphics.com>2020-04-01 04:13:05 +0000
commit9d4d0de9c600ef29b7ead7716c1dcfd1e7000b0d (patch)
treeac220b4b6310d05c42cd53eaa42a7a291bd08d56 /Graphics
parentImproved PSO creation warnings (diff)
downloadDiligentCore-9d4d0de9c600ef29b7ead7716c1dcfd1e7000b0d.tar.gz
DiligentCore-9d4d0de9c600ef29b7ead7716c1dcfd1e7000b0d.zip
Added PipelineStateCreateInfo struct that is taken by IRenderDevice::CreateInfo instead of PipelineStateDesc struct (API version 240056)
Diffstat (limited to 'Graphics')
-rw-r--r--Graphics/GraphicsEngine/interface/APIInfo.h2
-rw-r--r--Graphics/GraphicsEngine/interface/PipelineState.h36
-rw-r--r--Graphics/GraphicsEngine/interface/RenderDevice.h6
-rw-r--r--Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.hpp6
-rw-r--r--Graphics/GraphicsEngineD3D11/include/RenderDeviceD3D11Impl.hpp4
-rw-r--r--Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp8
-rw-r--r--Graphics/GraphicsEngineD3D11/src/RenderDeviceD3D11Impl.cpp6
-rw-r--r--Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.hpp2
-rw-r--r--Graphics/GraphicsEngineD3D12/include/RenderDeviceD3D12Impl.hpp2
-rw-r--r--Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp8
-rw-r--r--Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp6
-rw-r--r--Graphics/GraphicsEngineMetal/include/PipelineStateMtlImpl.h6
-rw-r--r--Graphics/GraphicsEngineMetal/include/RenderDeviceMtlImpl.h2
-rw-r--r--Graphics/GraphicsEngineMetal/src/PipelineStateMtlImpl.mm10
-rw-r--r--Graphics/GraphicsEngineMetal/src/RenderDeviceMtlImpl.mm6
-rw-r--r--Graphics/GraphicsEngineOpenGL/include/PipelineStateGLImpl.hpp8
-rw-r--r--Graphics/GraphicsEngineOpenGL/include/RenderDeviceGLImpl.hpp10
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/PipelineStateGLImpl.cpp10
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/RenderDeviceGLImpl.cpp10
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/TexRegionRender.cpp8
-rw-r--r--Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/include/RenderDeviceVkImpl.hpp2
-rw-r--r--Graphics/GraphicsEngineVulkan/src/GenerateMipsVkHelper.cpp7
-rw-r--r--Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp8
-rw-r--r--Graphics/GraphicsEngineVulkan/src/RenderDeviceVkImpl.cpp6
25 files changed, 111 insertions, 70 deletions
diff --git a/Graphics/GraphicsEngine/interface/APIInfo.h b/Graphics/GraphicsEngine/interface/APIInfo.h
index 52bda8ba..93dec634 100644
--- a/Graphics/GraphicsEngine/interface/APIInfo.h
+++ b/Graphics/GraphicsEngine/interface/APIInfo.h
@@ -30,7 +30,7 @@
/// \file
/// Diligent API information
-#define DILIGENT_API_VERSION 240055
+#define DILIGENT_API_VERSION 240056
#include "../../../Primitives/interface/BasicTypes.h"
diff --git a/Graphics/GraphicsEngine/interface/PipelineState.h b/Graphics/GraphicsEngine/interface/PipelineState.h
index 12e5e5ff..913f557c 100644
--- a/Graphics/GraphicsEngine/interface/PipelineState.h
+++ b/Graphics/GraphicsEngine/interface/PipelineState.h
@@ -250,6 +250,42 @@ struct PipelineStateDesc DILIGENT_DERIVE(DeviceObjectAttribs)
};
typedef struct PipelineStateDesc PipelineStateDesc;
+
+/// Pipeline state creation flags
+DILIGENT_TYPED_ENUM(PSO_CREATE_FLAGS, Uint32)
+{
+ /// Null flag.
+ PSO_CREATE_FLAG_NONE = 0x00,
+
+ /// Silence missing variable warnings.
+
+ /// By default, the engine outputs a warning for every variable
+ /// provided as part of the pipeline resource layout description
+ /// that is not found in any of the designated shader stages.
+ /// Use this flag to silence these warnings.
+ PSO_CREATE_FLAG_SILENCE_MISSING_VARIABLE_WARNINGS = 0x01,
+
+ /// Silence missing static sampler warnings.
+
+ /// By default, the engine outputs a warning for every static sampler
+ /// provided as part of the pipeline resource layout description
+ /// that is not found in any of the designated shader stages.
+ /// Use this flag to silence these warnings.
+ PSO_CREATE_FLAG_SILENCE_MISSING_STATIC_SAMPLER_WARNINGS = 0x02,
+};
+
+
+/// Pipeline state creation attributes
+struct PipelineStateCreateInfo
+{
+ /// Pipeline state description
+ PipelineStateDesc PSODesc;
+
+ /// Pipeline state creation flags, see Diligent::PSO_CREATE_FLAGS.
+ PSO_CREATE_FLAGS Flags DEFAULT_INITIALIZER(PSO_CREATE_FLAG_NONE);
+};
+typedef struct PipelineStateCreateInfo PipelineStateCreateInfo;
+
// {06084AE5-6A71-4FE8-84B9-395DD489A28C}
static const struct INTERFACE_ID IID_PipelineState =
{0x6084ae5, 0x6a71, 0x4fe8, {0x84, 0xb9, 0x39, 0x5d, 0xd4, 0x89, 0xa2, 0x8c}};
diff --git a/Graphics/GraphicsEngine/interface/RenderDevice.h b/Graphics/GraphicsEngine/interface/RenderDevice.h
index 2c97ac60..23eae467 100644
--- a/Graphics/GraphicsEngine/interface/RenderDevice.h
+++ b/Graphics/GraphicsEngine/interface/RenderDevice.h
@@ -154,14 +154,14 @@ DILIGENT_BEGIN_INTERFACE(IRenderDevice, IObject)
/// Creates a new pipeline state object
- /// \param [in] PipelineDesc - Pipeline state description, see Diligent::PipelineStateDesc for details.
+ /// \param [in] PSOCreateInfo - Pipeline state create info, see Diligent::PipelineStateCreateInfo for details.
/// \param [out] ppPipelineState - Address of the memory location where the pointer to the
/// pipeline state interface will be stored.
/// The function calls AddRef(), so that the new object will contain
/// one reference.
VIRTUAL void METHOD(CreatePipelineState)(THIS_
- const PipelineStateDesc REF PipelineDesc,
- IPipelineState** ppPipelineState) PURE;
+ const PipelineStateCreateInfo REF PSOCreateInfo,
+ IPipelineState** ppPipelineState) PURE;
/// Creates a new fence object
diff --git a/Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.hpp b/Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.hpp
index d6d3a51b..716de475 100644
--- a/Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.hpp
+++ b/Graphics/GraphicsEngineD3D11/include/PipelineStateD3D11Impl.hpp
@@ -48,9 +48,9 @@ class PipelineStateD3D11Impl final : public PipelineStateBase<IPipelineStateD3D1
public:
using TPipelineStateBase = PipelineStateBase<IPipelineStateD3D11, RenderDeviceD3D11Impl>;
- PipelineStateD3D11Impl(IReferenceCounters* pRefCounters,
- class RenderDeviceD3D11Impl* pDeviceD3D11,
- const PipelineStateDesc& PipelineDesc);
+ PipelineStateD3D11Impl(IReferenceCounters* pRefCounters,
+ class RenderDeviceD3D11Impl* pDeviceD3D11,
+ const PipelineStateCreateInfo& CreateInfo);
~PipelineStateD3D11Impl();
virtual void DILIGENT_CALL_TYPE QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface) override final;
diff --git a/Graphics/GraphicsEngineD3D11/include/RenderDeviceD3D11Impl.hpp b/Graphics/GraphicsEngineD3D11/include/RenderDeviceD3D11Impl.hpp
index 3d8a8e8c..0daef6b3 100644
--- a/Graphics/GraphicsEngineD3D11/include/RenderDeviceD3D11Impl.hpp
+++ b/Graphics/GraphicsEngineD3D11/include/RenderDeviceD3D11Impl.hpp
@@ -70,8 +70,8 @@ public:
ISampler** ppSampler) override final;
/// Implementation of IRenderDevice::CreatePipelineState() in Direct3D11 backend.
- virtual void DILIGENT_CALL_TYPE CreatePipelineState(const PipelineStateDesc& PipelineDesc,
- IPipelineState** ppPipelineState) override final;
+ virtual void DILIGENT_CALL_TYPE CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo,
+ IPipelineState** ppPipelineState) override final;
/// Implementation of IRenderDevice::CreateFence() in Direct3D11 backend.
virtual void DILIGENT_CALL_TYPE CreateFence(const FenceDesc& Desc,
diff --git a/Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp b/Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp
index 984a34a6..0f5f6e07 100644
--- a/Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp
+++ b/Graphics/GraphicsEngineD3D11/src/PipelineStateD3D11Impl.cpp
@@ -36,15 +36,15 @@
namespace Diligent
{
-PipelineStateD3D11Impl::PipelineStateD3D11Impl(IReferenceCounters* pRefCounters,
- RenderDeviceD3D11Impl* pRenderDeviceD3D11,
- const PipelineStateDesc& PipelineDesc) :
+PipelineStateD3D11Impl::PipelineStateD3D11Impl(IReferenceCounters* pRefCounters,
+ RenderDeviceD3D11Impl* pRenderDeviceD3D11,
+ const PipelineStateCreateInfo& CreateInfo) :
// clang-format off
TPipelineStateBase
{
pRefCounters,
pRenderDeviceD3D11,
- PipelineDesc
+ CreateInfo.PSODesc
},
m_SRBMemAllocator{GetRawAllocator()},
m_StaticSamplers (STD_ALLOCATOR_RAW_MEM(StaticSamplerInfo, GetRawAllocator(), "Allocator for vector<StaticSamplerInfo>"))
diff --git a/Graphics/GraphicsEngineD3D11/src/RenderDeviceD3D11Impl.cpp b/Graphics/GraphicsEngineD3D11/src/RenderDeviceD3D11Impl.cpp
index 49b86852..e73bec3a 100644
--- a/Graphics/GraphicsEngineD3D11/src/RenderDeviceD3D11Impl.cpp
+++ b/Graphics/GraphicsEngineD3D11/src/RenderDeviceD3D11Impl.cpp
@@ -339,12 +339,12 @@ void RenderDeviceD3D11Impl::CreateSampler(const SamplerDesc& SamplerDesc, ISampl
});
}
-void RenderDeviceD3D11Impl::CreatePipelineState(const PipelineStateDesc& PipelineDesc, IPipelineState** ppPipelineState)
+void RenderDeviceD3D11Impl::CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo, IPipelineState** ppPipelineState)
{
- CreateDeviceObject("Pipeline state", PipelineDesc, ppPipelineState,
+ CreateDeviceObject("Pipeline state", PSOCreateInfo.PSODesc, ppPipelineState,
[&]() //
{
- PipelineStateD3D11Impl* pPipelineStateD3D11(NEW_RC_OBJ(m_PSOAllocator, "PipelineStateD3D11Impl instance", PipelineStateD3D11Impl)(this, PipelineDesc));
+ PipelineStateD3D11Impl* pPipelineStateD3D11(NEW_RC_OBJ(m_PSOAllocator, "PipelineStateD3D11Impl instance", PipelineStateD3D11Impl)(this, PSOCreateInfo));
pPipelineStateD3D11->QueryInterface(IID_PipelineState, reinterpret_cast<IObject**>(ppPipelineState));
OnCreateDeviceObject(pPipelineStateD3D11);
});
diff --git a/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.hpp b/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.hpp
index a3c0e1ac..7e5b5fdd 100644
--- a/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.hpp
+++ b/Graphics/GraphicsEngineD3D12/include/PipelineStateD3D12Impl.hpp
@@ -50,7 +50,7 @@ class PipelineStateD3D12Impl final : public PipelineStateBase<IPipelineStateD3D1
public:
using TPipelineStateBase = PipelineStateBase<IPipelineStateD3D12, RenderDeviceD3D12Impl>;
- PipelineStateD3D12Impl(IReferenceCounters* pRefCounters, RenderDeviceD3D12Impl* pDeviceD3D12, const PipelineStateDesc& PipelineDesc);
+ PipelineStateD3D12Impl(IReferenceCounters* pRefCounters, RenderDeviceD3D12Impl* pDeviceD3D12, const PipelineStateCreateInfo& CreateInfo);
~PipelineStateD3D12Impl();
virtual void DILIGENT_CALL_TYPE QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface) override final;
diff --git a/Graphics/GraphicsEngineD3D12/include/RenderDeviceD3D12Impl.hpp b/Graphics/GraphicsEngineD3D12/include/RenderDeviceD3D12Impl.hpp
index d2ce5e0b..303f8bfb 100644
--- a/Graphics/GraphicsEngineD3D12/include/RenderDeviceD3D12Impl.hpp
+++ b/Graphics/GraphicsEngineD3D12/include/RenderDeviceD3D12Impl.hpp
@@ -62,7 +62,7 @@ public:
virtual void DILIGENT_CALL_TYPE QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface) override final;
/// Implementation of IRenderDevice::CreatePipelineState() in Direct3D12 backend.
- virtual void DILIGENT_CALL_TYPE CreatePipelineState(const PipelineStateDesc& PipelineDesc, IPipelineState** ppPipelineState) override final;
+ virtual void DILIGENT_CALL_TYPE CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo, IPipelineState** ppPipelineState) override final;
/// Implementation of IRenderDevice::CreateBuffer() in Direct3D12 backend.
virtual void DILIGENT_CALL_TYPE CreateBuffer(const BufferDesc& BuffDesc,
diff --git a/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp
index 467ed491..7e864b67 100644
--- a/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp
+++ b/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp
@@ -67,10 +67,10 @@ private:
std::array<D3D12_PRIMITIVE_TOPOLOGY_TYPE, PRIMITIVE_TOPOLOGY_NUM_TOPOLOGIES> m_Map;
};
-PipelineStateD3D12Impl::PipelineStateD3D12Impl(IReferenceCounters* pRefCounters,
- RenderDeviceD3D12Impl* pDeviceD3D12,
- const PipelineStateDesc& PipelineDesc) :
- TPipelineStateBase{pRefCounters, pDeviceD3D12, PipelineDesc},
+PipelineStateD3D12Impl::PipelineStateD3D12Impl(IReferenceCounters* pRefCounters,
+ RenderDeviceD3D12Impl* pDeviceD3D12,
+ const PipelineStateCreateInfo& CreateInfo) :
+ TPipelineStateBase{pRefCounters, pDeviceD3D12, CreateInfo.PSODesc},
m_SRBMemAllocator{GetRawAllocator()}
{
auto pd3d12Device = pDeviceD3D12->GetD3D12Device();
diff --git a/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp
index e86c0373..0315f7f0 100644
--- a/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp
+++ b/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp
@@ -398,12 +398,12 @@ void RenderDeviceD3D12Impl::TestTextureFormat(TEXTURE_FORMAT TexFormat)
IMPLEMENT_QUERY_INTERFACE(RenderDeviceD3D12Impl, IID_RenderDeviceD3D12, TRenderDeviceBase)
-void RenderDeviceD3D12Impl::CreatePipelineState(const PipelineStateDesc& PipelineDesc, IPipelineState** ppPipelineState)
+void RenderDeviceD3D12Impl::CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo, IPipelineState** ppPipelineState)
{
- CreateDeviceObject("Pipeline State", PipelineDesc, ppPipelineState,
+ CreateDeviceObject("Pipeline State", PSOCreateInfo.PSODesc, ppPipelineState,
[&]() //
{
- PipelineStateD3D12Impl* pPipelineStateD3D12(NEW_RC_OBJ(m_PSOAllocator, "PipelineStateD3D12Impl instance", PipelineStateD3D12Impl)(this, PipelineDesc));
+ PipelineStateD3D12Impl* pPipelineStateD3D12(NEW_RC_OBJ(m_PSOAllocator, "PipelineStateD3D12Impl instance", PipelineStateD3D12Impl)(this, PSOCreateInfo));
pPipelineStateD3D12->QueryInterface(IID_PipelineState, reinterpret_cast<IObject**>(ppPipelineState));
OnCreateDeviceObject(pPipelineStateD3D12);
});
diff --git a/Graphics/GraphicsEngineMetal/include/PipelineStateMtlImpl.h b/Graphics/GraphicsEngineMetal/include/PipelineStateMtlImpl.h
index 470ce823..d6623102 100644
--- a/Graphics/GraphicsEngineMetal/include/PipelineStateMtlImpl.h
+++ b/Graphics/GraphicsEngineMetal/include/PipelineStateMtlImpl.h
@@ -43,9 +43,9 @@ class PipelineStateMtlImpl final : public PipelineStateBase<IPipelineStateMtl, R
public:
using TPipelineStateBase = PipelineStateBase<IPipelineStateMtl, RenderDeviceMtlImpl>;
- PipelineStateMtlImpl(IReferenceCounters* pRefCounters,
- class RenderDeviceMtlImpl* pDeviceMtl,
- const PipelineStateDesc& PipelineDesc);
+ PipelineStateMtlImpl(IReferenceCounters* pRefCounters,
+ class RenderDeviceMtlImpl* pDeviceMtl,
+ const PipelineStateCreateInfo& CreateInfo);
~PipelineStateMtlImpl();
virtual void QueryInterface(const Diligent::INTERFACE_ID& IID, IObject** ppInterface) override final;
diff --git a/Graphics/GraphicsEngineMetal/include/RenderDeviceMtlImpl.h b/Graphics/GraphicsEngineMetal/include/RenderDeviceMtlImpl.h
index e1f2070c..856795af 100644
--- a/Graphics/GraphicsEngineMetal/include/RenderDeviceMtlImpl.h
+++ b/Graphics/GraphicsEngineMetal/include/RenderDeviceMtlImpl.h
@@ -55,7 +55,7 @@ public:
virtual void CreateSampler(const SamplerDesc& SamplerDesc, ISampler** ppSampler) override final;
- virtual void CreatePipelineState(const PipelineStateDesc& PipelineDesc, IPipelineState** ppPipelineState) override final;
+ virtual void CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo, IPipelineState** ppPipelineState) override final;
virtual void CreateFence(const FenceDesc& Desc, IFence** ppFence) override final;
diff --git a/Graphics/GraphicsEngineMetal/src/PipelineStateMtlImpl.mm b/Graphics/GraphicsEngineMetal/src/PipelineStateMtlImpl.mm
index c0a1a011..5ea1b909 100644
--- a/Graphics/GraphicsEngineMetal/src/PipelineStateMtlImpl.mm
+++ b/Graphics/GraphicsEngineMetal/src/PipelineStateMtlImpl.mm
@@ -29,13 +29,13 @@
namespace Diligent
{
-PipelineStateMtlImpl::PipelineStateMtlImpl(IReferenceCounters* pRefCounters,
- RenderDeviceMtlImpl* pRenderDeviceMtl,
- const PipelineStateDesc& PipelineDesc) :
- TPipelineStateBase(pRefCounters, pRenderDeviceMtl, PipelineDesc)
+PipelineStateMtlImpl::PipelineStateMtlImpl(IReferenceCounters* pRefCounters,
+ RenderDeviceMtlImpl* pRenderDeviceMtl,
+ const PipelineStateCreateInfo& CreateInfo) :
+ TPipelineStateBase(pRefCounters, pRenderDeviceMtl, CreateInfo.PSODesc)
{
LOG_ERROR_AND_THROW("Pipeline states are not implemented in Metal backend");
- if (PipelineDesc.IsComputePipeline)
+ if (CreateInfo.PSODesc.IsComputePipeline)
{
}
diff --git a/Graphics/GraphicsEngineMetal/src/RenderDeviceMtlImpl.mm b/Graphics/GraphicsEngineMetal/src/RenderDeviceMtlImpl.mm
index c3a47300..a250c6b5 100644
--- a/Graphics/GraphicsEngineMetal/src/RenderDeviceMtlImpl.mm
+++ b/Graphics/GraphicsEngineMetal/src/RenderDeviceMtlImpl.mm
@@ -145,13 +145,13 @@ void RenderDeviceMtlImpl :: CreateSampler(const SamplerDesc& SamplerDesc, ISampl
}
-void RenderDeviceMtlImpl::CreatePipelineState(const PipelineStateDesc& PipelineDesc, IPipelineState** ppPipelineState)
+void RenderDeviceMtlImpl::CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo, IPipelineState** ppPipelineState)
{
- CreateDeviceObject( "Pipeline state", PipelineDesc, ppPipelineState,
+ CreateDeviceObject( "Pipeline state", PSOCreateInfo.PSODesc, ppPipelineState,
[&]()
{
PipelineStateMtlImpl* pPipelineStateMtl( NEW_RC_OBJ(m_PSOAllocator, "PipelineStateMtlImpl instance", PipelineStateMtlImpl)
- (this, PipelineDesc ) );
+ (this, PSOCreateInfo.PSODesc) );
pPipelineStateMtl->QueryInterface( IID_PipelineState, reinterpret_cast<IObject**>(ppPipelineState) );
OnCreateDeviceObject( pPipelineStateMtl );
}
diff --git a/Graphics/GraphicsEngineOpenGL/include/PipelineStateGLImpl.hpp b/Graphics/GraphicsEngineOpenGL/include/PipelineStateGLImpl.hpp
index ba07c754..dea1d6c8 100644
--- a/Graphics/GraphicsEngineOpenGL/include/PipelineStateGLImpl.hpp
+++ b/Graphics/GraphicsEngineOpenGL/include/PipelineStateGLImpl.hpp
@@ -49,10 +49,10 @@ class PipelineStateGLImpl final : public PipelineStateBase<IPipelineStateGL, Ren
public:
using TPipelineStateBase = PipelineStateBase<IPipelineStateGL, RenderDeviceGLImpl>;
- PipelineStateGLImpl(IReferenceCounters* pRefCounters,
- RenderDeviceGLImpl* pDeviceGL,
- const PipelineStateDesc& PipelineDesc,
- bool IsDeviceInternal = false);
+ PipelineStateGLImpl(IReferenceCounters* pRefCounters,
+ RenderDeviceGLImpl* pDeviceGL,
+ const PipelineStateCreateInfo& CreateInfo,
+ bool IsDeviceInternal = false);
~PipelineStateGLImpl();
/// Queries the specific interface, see IObject::QueryInterface() for details
diff --git a/Graphics/GraphicsEngineOpenGL/include/RenderDeviceGLImpl.hpp b/Graphics/GraphicsEngineOpenGL/include/RenderDeviceGLImpl.hpp
index 78646ecc..3887be7f 100644
--- a/Graphics/GraphicsEngineOpenGL/include/RenderDeviceGLImpl.hpp
+++ b/Graphics/GraphicsEngineOpenGL/include/RenderDeviceGLImpl.hpp
@@ -101,11 +101,11 @@ public:
ISampler** ppSampler) override final;
/// Implementation of IRenderDevice::CreatePipelineState() in OpenGL backend.
- void CreatePipelineState(const PipelineStateDesc& PipelineDesc,
- IPipelineState** ppPipelineState,
- bool bIsDeviceInternal);
- virtual void DILIGENT_CALL_TYPE CreatePipelineState(const PipelineStateDesc& PipelineDesc,
- IPipelineState** ppPipelineState) override final;
+ void CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo,
+ IPipelineState** ppPipelineState,
+ bool bIsDeviceInternal);
+ virtual void DILIGENT_CALL_TYPE CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo,
+ IPipelineState** ppPipelineState) override final;
/// Implementation of IRenderDevice::CreateFence() in OpenGL backend.
virtual void DILIGENT_CALL_TYPE CreateFence(const FenceDesc& Desc, IFence** ppFence) override final;
diff --git a/Graphics/GraphicsEngineOpenGL/src/PipelineStateGLImpl.cpp b/Graphics/GraphicsEngineOpenGL/src/PipelineStateGLImpl.cpp
index ccf9e565..72d504be 100644
--- a/Graphics/GraphicsEngineOpenGL/src/PipelineStateGLImpl.cpp
+++ b/Graphics/GraphicsEngineOpenGL/src/PipelineStateGLImpl.cpp
@@ -36,16 +36,16 @@
namespace Diligent
{
-PipelineStateGLImpl::PipelineStateGLImpl(IReferenceCounters* pRefCounters,
- RenderDeviceGLImpl* pDeviceGL,
- const PipelineStateDesc& PipelineDesc,
- bool bIsDeviceInternal) :
+PipelineStateGLImpl::PipelineStateGLImpl(IReferenceCounters* pRefCounters,
+ RenderDeviceGLImpl* pDeviceGL,
+ const PipelineStateCreateInfo& CreateInfo,
+ bool bIsDeviceInternal) :
// clang-format off
TPipelineStateBase
{
pRefCounters,
pDeviceGL,
- PipelineDesc,
+ CreateInfo.PSODesc,
bIsDeviceInternal
},
m_ResourceLayout {*this},
diff --git a/Graphics/GraphicsEngineOpenGL/src/RenderDeviceGLImpl.cpp b/Graphics/GraphicsEngineOpenGL/src/RenderDeviceGLImpl.cpp
index 407b4b22..dee2cd15 100644
--- a/Graphics/GraphicsEngineOpenGL/src/RenderDeviceGLImpl.cpp
+++ b/Graphics/GraphicsEngineOpenGL/src/RenderDeviceGLImpl.cpp
@@ -467,18 +467,18 @@ void RenderDeviceGLImpl::CreateSampler(const SamplerDesc& SamplerDesc, ISampler*
}
-void RenderDeviceGLImpl::CreatePipelineState(const PipelineStateDesc& PipelineDesc, IPipelineState** ppPipelineState)
+void RenderDeviceGLImpl::CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo, IPipelineState** ppPipelineState)
{
- CreatePipelineState(PipelineDesc, ppPipelineState, false);
+ CreatePipelineState(PSOCreateInfo, ppPipelineState, false);
}
-void RenderDeviceGLImpl::CreatePipelineState(const PipelineStateDesc& PipelineDesc, IPipelineState** ppPipelineState, bool bIsDeviceInternal)
+void RenderDeviceGLImpl::CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo, IPipelineState** ppPipelineState, bool bIsDeviceInternal)
{
CreateDeviceObject(
- "Pipeline state", PipelineDesc, ppPipelineState,
+ "Pipeline state", PSOCreateInfo.PSODesc, ppPipelineState,
[&]() //
{
- PipelineStateGLImpl* pPipelineStateOGL(NEW_RC_OBJ(m_PSOAllocator, "PipelineStateGLImpl instance", PipelineStateGLImpl)(this, PipelineDesc, bIsDeviceInternal));
+ PipelineStateGLImpl* pPipelineStateOGL(NEW_RC_OBJ(m_PSOAllocator, "PipelineStateGLImpl instance", PipelineStateGLImpl)(this, PSOCreateInfo, bIsDeviceInternal));
pPipelineStateOGL->QueryInterface(IID_PipelineState, reinterpret_cast<IObject**>(ppPipelineState));
OnCreateDeviceObject(pPipelineStateOGL);
} //
diff --git a/Graphics/GraphicsEngineOpenGL/src/TexRegionRender.cpp b/Graphics/GraphicsEngineOpenGL/src/TexRegionRender.cpp
index 2275a4d1..bd47e4ac 100644
--- a/Graphics/GraphicsEngineOpenGL/src/TexRegionRender.cpp
+++ b/Graphics/GraphicsEngineOpenGL/src/TexRegionRender.cpp
@@ -105,8 +105,10 @@ TexRegionRender::TexRegionRender(class RenderDeviceGLImpl* pDeviceGL)
CBDesc.CPUAccessFlags = CPU_ACCESS_WRITE;
pDeviceGL->CreateBuffer(CBDesc, nullptr, &m_pConstantBuffer, IsInternalDeviceObject);
- PipelineStateDesc PSODesc;
- auto& GraphicsPipeline = PSODesc.GraphicsPipeline;
+ PipelineStateCreateInfo PSOCreateInfo;
+ PipelineStateDesc& PSODesc = PSOCreateInfo.PSODesc;
+
+ auto& GraphicsPipeline = PSODesc.GraphicsPipeline;
GraphicsPipeline.RasterizerDesc.CullMode = CULL_MODE_NONE;
GraphicsPipeline.RasterizerDesc.FillMode = FILL_MODE_SOLID;
@@ -158,7 +160,7 @@ TexRegionRender::TexRegionRender(class RenderDeviceGLImpl* pDeviceGL)
PSODesc.ResourceLayout.NumVariables = _countof(Vars);
PSODesc.ResourceLayout.Variables = Vars;
- pDeviceGL->CreatePipelineState(PSODesc, &m_pPSO[Dim * 3 + Fmt], IsInternalDeviceObject);
+ pDeviceGL->CreatePipelineState(PSOCreateInfo, &m_pPSO[Dim * 3 + Fmt], IsInternalDeviceObject);
}
}
m_pPSO[RESOURCE_DIM_TEX_2D * 3]->CreateShaderResourceBinding(&m_pSRB);
diff --git a/Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.hpp b/Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.hpp
index b636ddc9..aca69cac 100644
--- a/Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/PipelineStateVkImpl.hpp
@@ -57,7 +57,7 @@ class PipelineStateVkImpl final : public PipelineStateBase<IPipelineStateVk, Ren
public:
using TPipelineStateBase = PipelineStateBase<IPipelineStateVk, RenderDeviceVkImpl>;
- PipelineStateVkImpl(IReferenceCounters* pRefCounters, RenderDeviceVkImpl* pDeviceVk, const PipelineStateDesc& PipelineDesc);
+ PipelineStateVkImpl(IReferenceCounters* pRefCounters, RenderDeviceVkImpl* pDeviceVk, const PipelineStateCreateInfo& CreateInfo);
~PipelineStateVkImpl();
virtual void DILIGENT_CALL_TYPE QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface) override final;
diff --git a/Graphics/GraphicsEngineVulkan/include/RenderDeviceVkImpl.hpp b/Graphics/GraphicsEngineVulkan/include/RenderDeviceVkImpl.hpp
index f5d8a492..7204cad7 100644
--- a/Graphics/GraphicsEngineVulkan/include/RenderDeviceVkImpl.hpp
+++ b/Graphics/GraphicsEngineVulkan/include/RenderDeviceVkImpl.hpp
@@ -72,7 +72,7 @@ public:
virtual void DILIGENT_CALL_TYPE QueryInterface(const INTERFACE_ID& IID, IObject** ppInterface) override final;
/// Implementation of IRenderDevice::CreatePipelineState() in Vulkan backend.
- virtual void DILIGENT_CALL_TYPE CreatePipelineState(const PipelineStateDesc& PipelineDesc, IPipelineState** ppPipelineState) override final;
+ virtual void DILIGENT_CALL_TYPE CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo, IPipelineState** ppPipelineState) override final;
/// Implementation of IRenderDevice::CreateBuffer() in Vulkan backend.
virtual void DILIGENT_CALL_TYPE CreateBuffer(const BufferDesc& BuffDesc,
diff --git a/Graphics/GraphicsEngineVulkan/src/GenerateMipsVkHelper.cpp b/Graphics/GraphicsEngineVulkan/src/GenerateMipsVkHelper.cpp
index 9686d237..d01d49bd 100644
--- a/Graphics/GraphicsEngineVulkan/src/GenerateMipsVkHelper.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/GenerateMipsVkHelper.cpp
@@ -152,7 +152,10 @@ std::array<RefCntAutoPtr<IPipelineState>, 4> GenerateMipsVkHelper::CreatePSOs(TE
RefCntAutoPtr<IShader> pCS;
m_DeviceVkImpl.CreateShader(CSCreateInfo, &pCS);
- PipelineStateDesc PSODesc;
+
+ PipelineStateCreateInfo PSOCreateInfo;
+ PipelineStateDesc& PSODesc = PSOCreateInfo.PSODesc;
+
PSODesc.IsComputePipeline = true;
PSODesc.Name = name.c_str();
PSODesc.ComputePipeline.pCS = pCS;
@@ -166,7 +169,7 @@ std::array<RefCntAutoPtr<IPipelineState>, 4> GenerateMipsVkHelper::CreatePSOs(TE
PSODesc.ResourceLayout.StaticSamplers = &StaticSampler;
PSODesc.ResourceLayout.NumStaticSamplers = 1;
- m_DeviceVkImpl.CreatePipelineState(PSODesc, &PSOs[NonPowOfTwo]);
+ m_DeviceVkImpl.CreatePipelineState(PSOCreateInfo, &PSOs[NonPowOfTwo]);
PSOs[NonPowOfTwo]->GetStaticVariableByName(SHADER_TYPE_COMPUTE, "CB")->Set(m_ConstantsCB);
}
diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp
index 9e7b69c7..33be3b8e 100644
--- a/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/PipelineStateVkImpl.cpp
@@ -149,10 +149,10 @@ static std::vector<uint32_t> StripReflection(const std::vector<uint32_t>& Origin
return StrippedSPIRV;
}
-PipelineStateVkImpl::PipelineStateVkImpl(IReferenceCounters* pRefCounters,
- RenderDeviceVkImpl* pDeviceVk,
- const PipelineStateDesc& PipelineDesc) :
- TPipelineStateBase{pRefCounters, pDeviceVk, PipelineDesc},
+PipelineStateVkImpl::PipelineStateVkImpl(IReferenceCounters* pRefCounters,
+ RenderDeviceVkImpl* pDeviceVk,
+ const PipelineStateCreateInfo& CreateInfo) :
+ TPipelineStateBase{pRefCounters, pDeviceVk, CreateInfo.PSODesc},
m_SRBMemAllocator{GetRawAllocator()}
{
const auto& LogicalDevice = pDeviceVk->GetLogicalDevice();
diff --git a/Graphics/GraphicsEngineVulkan/src/RenderDeviceVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/RenderDeviceVkImpl.cpp
index 6f81e96c..4e6049b0 100644
--- a/Graphics/GraphicsEngineVulkan/src/RenderDeviceVkImpl.cpp
+++ b/Graphics/GraphicsEngineVulkan/src/RenderDeviceVkImpl.cpp
@@ -471,13 +471,13 @@ void RenderDeviceVkImpl::TestTextureFormat(TEXTURE_FORMAT TexFormat)
IMPLEMENT_QUERY_INTERFACE(RenderDeviceVkImpl, IID_RenderDeviceVk, TRenderDeviceBase)
-void RenderDeviceVkImpl::CreatePipelineState(const PipelineStateDesc& PipelineDesc, IPipelineState** ppPipelineState)
+void RenderDeviceVkImpl::CreatePipelineState(const PipelineStateCreateInfo& PSOCreateInfo, IPipelineState** ppPipelineState)
{
CreateDeviceObject(
- "Pipeline State", PipelineDesc, ppPipelineState,
+ "Pipeline State", PSOCreateInfo.PSODesc, ppPipelineState,
[&]() //
{
- PipelineStateVkImpl* pPipelineStateVk(NEW_RC_OBJ(m_PSOAllocator, "PipelineStateVkImpl instance", PipelineStateVkImpl)(this, PipelineDesc));
+ PipelineStateVkImpl* pPipelineStateVk(NEW_RC_OBJ(m_PSOAllocator, "PipelineStateVkImpl instance", PipelineStateVkImpl)(this, PSOCreateInfo));
pPipelineStateVk->QueryInterface(IID_PipelineState, reinterpret_cast<IObject**>(ppPipelineState));
OnCreateDeviceObject(pPipelineStateVk);
} //