11/*
2- * Copyright 2019-2024 Diligent Graphics LLC
2+ * Copyright 2019-2025 Diligent Graphics LLC
33 * Copyright 2015-2019 Egor Yusov
44 *
55 * Licensed under the Apache License, Version 2.0 (the "License");
@@ -545,7 +545,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
545545 VERIFY_EXPR (this ->m_Desc .IsRayTracingPipeline ());
546546 VERIFY_EXPR (m_pRayTracingPipelineData != nullptr );
547547
548- const auto ShaderHandleSize = m_pRayTracingPipelineData->ShaderHandleSize ;
548+ const Uint32 ShaderHandleSize = m_pRayTracingPipelineData->ShaderHandleSize ;
549549 VERIFY (ShaderHandleSize <= DataSize, " DataSize (" , DataSize, " ) must be at least as large as the shader handle size (" , ShaderHandleSize, " )." );
550550
551551 if (Name == nullptr || Name[0 ] == ' \0 ' )
@@ -707,7 +707,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
707707 return ;
708708 }
709709
710- auto * pDstSign = static_cast <PipelineStateImplType*>(pDstPipeline)->GetResourceSignature (0 );
710+ PipelineResourceSignatureImplType * pDstSign = static_cast <PipelineStateImplType*>(pDstPipeline)->GetResourceSignature (0 );
711711 return this ->GetResourceSignature (0 )->CopyStaticResources (pDstSign);
712712 }
713713
@@ -738,17 +738,17 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
738738 RefCntAutoPtr<PipelineStateImplType> pPSOImpl{const_cast <IPipelineState*>(pPSO), PipelineStateImplType::IID_InternalImpl};
739739 VERIFY (pPSOImpl, " Unknown PSO implementation type" );
740740
741- const auto & lhs = *static_cast <const PipelineStateImplType*>(this );
742- const auto & rhs = *pPSOImpl;
741+ const PipelineStateImplType & lhs = *static_cast <const PipelineStateImplType*>(this );
742+ const PipelineStateImplType & rhs = *pPSOImpl;
743743
744- const auto SignCount = lhs.GetResourceSignatureCount ();
744+ const Uint32 SignCount = lhs.GetResourceSignatureCount ();
745745 if (SignCount != rhs.GetResourceSignatureCount ())
746746 return false ;
747747
748748 for (Uint32 s = 0 ; s < SignCount; ++s)
749749 {
750- const auto * pLhsSign = GetResourceSignature (s);
751- const auto * pRhsSign = rhs.GetResourceSignature (s);
750+ const PipelineResourceSignatureImplType * pLhsSign = GetResourceSignature (s);
751+ const PipelineResourceSignatureImplType * pRhsSign = rhs.GetResourceSignature (s);
752752 if (!PipelineResourceSignatureImplType::SignaturesCompatible (pLhsSign, pRhsSign))
753753 return false ;
754754 }
@@ -782,14 +782,14 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
782782 ReserveResourceLayout (CreateInfo.PSODesc .ResourceLayout , MemPool);
783783 ReserveResourceSignatures (CreateInfo, MemPool);
784784
785- const auto & InputLayout = CreateInfo.GraphicsPipeline .InputLayout ;
785+ const InputLayoutDesc & InputLayout = CreateInfo.GraphicsPipeline .InputLayout ;
786786 if (InputLayout.NumElements > 0 )
787787 {
788788 Uint32 BufferSlotsUsed = 0 ;
789789 MemPool.AddSpace <LayoutElement>(InputLayout.NumElements );
790790 for (Uint32 i = 0 ; i < InputLayout.NumElements ; ++i)
791791 {
792- auto & LayoutElem = InputLayout.LayoutElements [i];
792+ const LayoutElement & LayoutElem = InputLayout.LayoutElements [i];
793793 MemPool.AddSpaceForString (LayoutElem.HLSLSemantic );
794794 BufferSlotsUsed = std::max (BufferSlotsUsed, LayoutElem.BufferSlot + 1 );
795795 }
@@ -812,7 +812,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
812812 {
813813 size_t RTDataSize = sizeof (RayTracingPipelineData);
814814 // Reserve space for shader handles
815- const auto ShaderHandleSize = this ->GetDevice ()->GetAdapterInfo ().RayTracing .ShaderGroupHandleSize ;
815+ const Uint32 ShaderHandleSize = this ->GetDevice ()->GetAdapterInfo ().RayTracing .ShaderGroupHandleSize ;
816816 RTDataSize += size_t {ShaderHandleSize} *
817817 (size_t {CreateInfo.GeneralShaderCount } +
818818 size_t {CreateInfo.TriangleHitShaderCount } +
@@ -846,12 +846,11 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
846846 ReserveResourceSignatures (CreateInfo, MemPool);
847847 }
848848
849- public:
850849protected:
851850 template <typename ShaderImplType, typename PSOCreateInfoType>
852851 void Construct (const PSOCreateInfoType& CreateInfo)
853852 {
854- auto * const pThisImpl = static_cast <PipelineStateImplType*>(this );
853+ PipelineStateImplType * const pThisImpl = static_cast <PipelineStateImplType*>(this );
855854
856855 m_Status.store (PIPELINE_STATE_STATUS_COMPILING);
857856 if ((CreateInfo.Flags & PSO_CREATE_FLAG_ASYNCHRONOUS) != 0 && this ->m_pDevice ->GetShaderCompilationThreadPool () != nullptr )
@@ -937,10 +936,10 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
937936 void * Ptr = MemPool.ReleaseOwnership ();
938937 VERIFY_EXPR (Ptr == m_pPipelineDataRawMem);
939938
940- auto & GraphicsPipeline = this ->m_pGraphicsPipelineData ->Desc ;
941- auto & pRenderPass = this ->m_pGraphicsPipelineData ->pRenderPass ;
942- auto & BufferSlotsUsed = this ->m_pGraphicsPipelineData ->BufferSlotsUsed ;
943- auto & pStrides = this ->m_pGraphicsPipelineData ->pStrides ;
939+ GraphicsPipelineDesc& GraphicsPipeline = this ->m_pGraphicsPipelineData ->Desc ;
940+ RefCntAutoPtr<IRenderPass> & pRenderPass = this ->m_pGraphicsPipelineData ->pRenderPass ;
941+ Uint8& BufferSlotsUsed = this ->m_pGraphicsPipelineData ->BufferSlotsUsed ;
942+ Uint32*& pStrides = this ->m_pGraphicsPipelineData ->pStrides ;
944943
945944 GraphicsPipeline = CreateInfo.GraphicsPipeline ;
946945 CorrectGraphicsPipelineDesc (GraphicsPipeline, this ->GetDevice ()->GetDeviceInfo ().Features );
@@ -951,14 +950,14 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
951950 pRenderPass = GraphicsPipeline.pRenderPass ;
952951 if (pRenderPass)
953952 {
954- const auto & RPDesc = pRenderPass->GetDesc ();
953+ const RenderPassDesc & RPDesc = pRenderPass->GetDesc ();
955954 VERIFY_EXPR (GraphicsPipeline.SubpassIndex < RPDesc.SubpassCount );
956- const auto & Subpass = pRenderPass.template RawPtr <RenderPassImplType>()->GetSubpass (GraphicsPipeline.SubpassIndex );
955+ const SubpassDesc & Subpass = pRenderPass.template RawPtr <RenderPassImplType>()->GetSubpass (GraphicsPipeline.SubpassIndex );
957956
958957 GraphicsPipeline.NumRenderTargets = static_cast <Uint8>(Subpass.RenderTargetAttachmentCount );
959958 for (Uint32 rt = 0 ; rt < Subpass.RenderTargetAttachmentCount ; ++rt)
960959 {
961- const auto & RTAttachmentRef = Subpass.pRenderTargetAttachments [rt];
960+ const AttachmentReference & RTAttachmentRef = Subpass.pRenderTargetAttachments [rt];
962961 if (RTAttachmentRef.AttachmentIndex != ATTACHMENT_UNUSED)
963962 {
964963 VERIFY_EXPR (RTAttachmentRef.AttachmentIndex < RPDesc.AttachmentCount );
@@ -968,7 +967,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
968967
969968 if (Subpass.pDepthStencilAttachment != nullptr )
970969 {
971- const auto & DSAttachmentRef = *Subpass.pDepthStencilAttachment ;
970+ const AttachmentReference & DSAttachmentRef = *Subpass.pDepthStencilAttachment ;
972971 if (DSAttachmentRef.AttachmentIndex != ATTACHMENT_UNUSED)
973972 {
974973 VERIFY_EXPR (DSAttachmentRef.AttachmentIndex < RPDesc.AttachmentCount );
@@ -977,22 +976,22 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
977976 }
978977 }
979978
980- const auto & InputLayout = GraphicsPipeline.InputLayout ;
981- LayoutElement* pLayoutElements = nullptr ;
979+ const InputLayoutDesc& InputLayout = GraphicsPipeline.InputLayout ;
980+ LayoutElement* pLayoutElements = nullptr ;
982981 if (InputLayout.NumElements > 0 )
983982 {
984983 pLayoutElements = MemPool.ConstructArray <LayoutElement>(InputLayout.NumElements );
985984 for (size_t Elem = 0 ; Elem < InputLayout.NumElements ; ++Elem)
986985 {
987- const auto & SrcElem = InputLayout.LayoutElements [Elem];
988- pLayoutElements[Elem] = SrcElem;
986+ const LayoutElement & SrcElem = InputLayout.LayoutElements [Elem];
987+ pLayoutElements[Elem] = SrcElem;
989988 VERIFY_EXPR (SrcElem.HLSLSemantic != nullptr );
990989 pLayoutElements[Elem].HLSLSemantic = MemPool.CopyString (SrcElem.HLSLSemantic );
991990 }
992991
993992 // Correct description and compute offsets and tight strides
994- const auto Strides = ResolveInputLayoutAutoOffsetsAndStrides (pLayoutElements, InputLayout.NumElements );
995- BufferSlotsUsed = static_cast <Uint8>(Strides.size ());
993+ const std::vector<Uint32> Strides = ResolveInputLayoutAutoOffsetsAndStrides (pLayoutElements, InputLayout.NumElements );
994+ BufferSlotsUsed = static_cast <Uint8>(Strides.size ());
996995
997996 pStrides = MemPool.CopyConstructArray <Uint32>(Strides.data (), BufferSlotsUsed);
998997 }
@@ -1013,8 +1012,8 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
10131012 {
10141013 size_t RTDataSize = sizeof (RayTracingPipelineData);
10151014 // Allocate space for shader handles
1016- const auto ShaderHandleSize = this ->GetDevice ()->GetAdapterInfo ().RayTracing .ShaderGroupHandleSize ;
1017- const auto ShaderDataSize = ShaderHandleSize * (CreateInfo.GeneralShaderCount + CreateInfo.TriangleHitShaderCount + CreateInfo.ProceduralHitShaderCount );
1015+ const Uint32 ShaderHandleSize = this ->GetDevice ()->GetAdapterInfo ().RayTracing .ShaderGroupHandleSize ;
1016+ const Uint32 ShaderDataSize = ShaderHandleSize * (CreateInfo.GeneralShaderCount + CreateInfo.TriangleHitShaderCount + CreateInfo.ProceduralHitShaderCount );
10181017 RTDataSize += ShaderDataSize;
10191018 // Extra bytes were reserved to avoid compiler errors on zero-sized arrays
10201019 RTDataSize -= sizeof (RayTracingPipelineData::ShaderHandles);
@@ -1100,12 +1099,12 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
11001099 if (pSignature == nullptr )
11011100 continue ;
11021101
1103- const auto ResIndex = pSignature->FindResource (Stage, Name);
1102+ const Uint32 ResIndex = pSignature->FindResource (Stage, Name);
11041103 if (ResIndex != ResourceAttribution::InvalidResourceIndex)
11051104 return ResourceAttribution{pSignature, sign, ResIndex};
11061105 else
11071106 {
1108- const auto ImtblSamIndex = pSignature->FindImmutableSampler (Stage, Name);
1107+ const Uint32 ImtblSamIndex = pSignature->FindImmutableSampler (Stage, Name);
11091108 if (ImtblSamIndex != ResourceAttribution::InvalidSamplerIndex)
11101109 return ResourceAttribution{pSignature, sign, ResourceAttribution::InvalidResourceIndex, ImtblSamIndex};
11111110 }
@@ -1115,7 +1114,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
11151114
11161115 ResourceAttribution GetResourceAttribution (const char * Name, SHADER_TYPE Stage) const
11171116 {
1118- const auto * const pThis = static_cast <const PipelineStateImplType*>(this );
1117+ const PipelineStateImplType * const pThis = static_cast <const PipelineStateImplType*>(this );
11191118 return GetResourceAttribution (Name, Stage, pThis->m_Signatures , pThis->m_SignatureCount );
11201119 }
11211120
@@ -1138,7 +1137,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
11381137
11391138 static PSO_CREATE_INTERNAL_FLAGS GetInternalCreateFlags (const PipelineStateCreateInfo& CreateInfo)
11401139 {
1141- const auto * pInternalCI = static_cast <PSOCreateInternalInfo*>(CreateInfo.pInternalData );
1140+ const PSOCreateInternalInfo * pInternalCI = static_cast <PSOCreateInternalInfo*>(CreateInfo.pInternalData );
11421141 return pInternalCI != nullptr ? pInternalCI->Flags : PSO_CREATE_INTERNAL_FLAG_NONE;
11431142 }
11441143
@@ -1181,26 +1180,26 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
11811180 {
11821181 if (SrcLayout.Variables != nullptr )
11831182 {
1184- auto * const Variables = MemPool.ConstructArray <ShaderResourceVariableDesc>(SrcLayout.NumVariables );
1185- DstLayout.Variables = Variables;
1183+ ShaderResourceVariableDesc * const Variables = MemPool.ConstructArray <ShaderResourceVariableDesc>(SrcLayout.NumVariables );
1184+ DstLayout.Variables = Variables;
11861185 for (Uint32 i = 0 ; i < SrcLayout.NumVariables ; ++i)
11871186 {
1188- const auto & SrcVar = SrcLayout.Variables [i];
1189- Variables[i] = SrcVar;
1190- Variables[i].Name = MemPool.CopyString (SrcVar.Name );
1187+ const ShaderResourceVariableDesc & SrcVar{ SrcLayout.Variables [i]} ;
1188+ Variables[i] = SrcVar;
1189+ Variables[i].Name = MemPool.CopyString (SrcVar.Name );
11911190 }
11921191 }
11931192
11941193 if (SrcLayout.ImmutableSamplers != nullptr )
11951194 {
1196- auto * const ImmutableSamplers = MemPool.ConstructArray <ImmutableSamplerDesc>(SrcLayout.NumImmutableSamplers );
1197- DstLayout.ImmutableSamplers = ImmutableSamplers;
1195+ ImmutableSamplerDesc * const ImmutableSamplers = MemPool.ConstructArray <ImmutableSamplerDesc>(SrcLayout.NumImmutableSamplers );
1196+ DstLayout.ImmutableSamplers = ImmutableSamplers;
11981197 for (Uint32 i = 0 ; i < SrcLayout.NumImmutableSamplers ; ++i)
11991198 {
1200- const auto & SrcSmplr = SrcLayout.ImmutableSamplers [i];
1199+ const ImmutableSamplerDesc & SrcSmplr = SrcLayout.ImmutableSamplers [i];
12011200#ifdef DILIGENT_DEVELOPMENT
12021201 {
1203- const auto & BorderColor = SrcSmplr.Desc .BorderColor ;
1202+ const Float32* BorderColor = SrcSmplr.Desc .BorderColor ;
12041203 if (!((BorderColor[0 ] == 0 && BorderColor[1 ] == 0 && BorderColor[2 ] == 0 && BorderColor[3 ] == 0 ) ||
12051204 (BorderColor[0 ] == 0 && BorderColor[1 ] == 0 && BorderColor[2 ] == 0 && BorderColor[3 ] == 1 ) ||
12061205 (BorderColor[0 ] == 1 && BorderColor[1 ] == 1 && BorderColor[2 ] == 1 && BorderColor[3 ] == 1 )))
@@ -1231,7 +1230,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
12311230 Uint32 MaxSignatureBindingIndex = 0 ;
12321231 for (Uint32 i = 0 ; i < CreateInfo.ResourceSignaturesCount ; ++i)
12331232 {
1234- const auto * pSignature = ClassPtrCast<PipelineResourceSignatureImplType>(CreateInfo.ppResourceSignatures [i]);
1233+ const PipelineResourceSignatureImplType * pSignature = ClassPtrCast<PipelineResourceSignatureImplType>(CreateInfo.ppResourceSignatures [i]);
12351234 VERIFY (pSignature != nullptr , " Pipeline resource signature at index " , i, " is null. This error should've been caught by ValidatePipelineResourceSignatures." );
12361235
12371236 Uint32 Index = pSignature->GetDesc ().BindingIndex ;
@@ -1257,7 +1256,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
12571256 VERIFY_EXPR (CreateInfo.ResourceSignaturesCount != 0 && CreateInfo.ppResourceSignatures != nullptr );
12581257 for (Uint32 i = 0 ; i < CreateInfo.ResourceSignaturesCount ; ++i)
12591258 {
1260- auto * pSignature = ClassPtrCast<PipelineResourceSignatureImplType>(CreateInfo.ppResourceSignatures [i]);
1259+ PipelineResourceSignatureImplType * pSignature = ClassPtrCast<PipelineResourceSignatureImplType>(CreateInfo.ppResourceSignatures [i]);
12611260 VERIFY_EXPR (pSignature != nullptr );
12621261
12631262 const Uint32 Index = pSignature->GetDesc ().BindingIndex ;
@@ -1272,7 +1271,7 @@ class PipelineStateBase : public DeviceObjectBase<typename EngineImplTraits::Pip
12721271
12731272 for (Uint32 s = 0 , StageCount = pSignature->GetNumActiveShaderStages (); s < StageCount; ++s)
12741273 {
1275- const auto ShaderType = pSignature->GetActiveShaderStageType (s);
1274+ const SHADER_TYPE ShaderType = pSignature->GetActiveShaderStageType (s);
12761275 VERIFY (IsConsistentShaderType (ShaderType, CreateInfo.PSODesc .PipelineType ),
12771276 " Pipeline resource signature '" , pSignature->GetDesc ().Name , " ' at index " , Uint32{Index},
12781277 " has shader stage '" , GetShaderTypeLiteralName (ShaderType), " ' that is not compatible with pipeline type '" ,
0 commit comments