Diligent Engine  v.2.4.g
PipelineResourceSignatureBase.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2019-2021 Diligent Graphics LLC
3  * Copyright 2015-2019 Egor Yusov
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * In no event and under no legal theory, whether in tort (including negligence),
18  * contract, or otherwise, unless required by applicable law (such as deliberate
19  * and grossly negligent acts) or agreed to in writing, shall any Contributor be
20  * liable for any damages, including any direct, indirect, special, incidental,
21  * or consequential damages of any character arising as a result of this License or
22  * out of the use or inability to use the software (including but not limited to damages
23  * for loss of goodwill, work stoppage, computer failure or malfunction, or any and
24  * all other commercial damages or losses), even if such Contributor has been advised
25  * of the possibility of such damages.
26  */
27 
28 #pragma once
29 
32 
33 #include <array>
34 #include <limits>
35 #include <algorithm>
36 #include <memory>
37 
38 #include "PrivateConstants.h"
40 #include "DeviceObjectBase.hpp"
41 #include "RenderDeviceBase.hpp"
42 #include "FixedLinearAllocator.hpp"
43 #include "BasicMath.hpp"
44 #include "StringTools.hpp"
45 #include "PlatformMisc.hpp"
46 #include "SRBMemoryAllocator.hpp"
48 #include "HashUtils.hpp"
49 
50 namespace Diligent
51 {
52 
55  const DeviceFeatures& Features) noexcept(false);
56 
57 static constexpr Uint32 InvalidImmutableSamplerIndex = ~0u;
62  Uint32 NumImtblSamplers,
63  SHADER_TYPE ShaderStages,
64  const char* ResourceName,
65  const char* SamplerSuffix);
66 
69  const PipelineResourceSignatureDesc& Desc1) noexcept;
70 
73 
75 
77 template <typename EngineImplTraits>
78 class PipelineResourceSignatureBase : public DeviceObjectBase<typename EngineImplTraits::PipelineResourceSignatureInterface, typename EngineImplTraits::RenderDeviceImplType, PipelineResourceSignatureDesc>
79 {
80 public:
81  // Base interface this class inherits (IPipelineResourceSignatureD3D12, PipelineResourceSignatureVk, etc.)
82  using BaseInterface = typename EngineImplTraits::PipelineResourceSignatureInterface;
83 
84  // Render device implementation type (RenderDeviceD3D12Impl, RenderDeviceVkImpl, etc.).
85  using RenderDeviceImplType = typename EngineImplTraits::RenderDeviceImplType;
86 
87  // Shader resource cache implementation type (ShaderResourceCacheD3D12, ShaderResourceCacheVk, etc.)
88  using ShaderResourceCacheImplType = typename EngineImplTraits::ShaderResourceCacheImplType;
89 
90  // Shader variable manager implementation type (ShaderVariableManagerD3D12, ShaderVariableManagerVk, etc.)
91  using ShaderVariableManagerImplType = typename EngineImplTraits::ShaderVariableManagerImplType;
92 
93  // Shader resource binding implementation type (ShaderResourceBindingD3D12Impl, ShaderResourceBindingVkImpl, etc.)
94  using ShaderResourceBindingImplType = typename EngineImplTraits::ShaderResourceBindingImplType;
95 
96  // Pipeline resource signature implementation type (PipelineResourceSignatureD3D12Impl, PipelineResourceSignatureVkImpl, etc.)
97  using PipelineResourceSignatureImplType = typename EngineImplTraits::PipelineResourceSignatureImplType;
98 
100 
107  RenderDeviceImplType* pDevice,
108  const PipelineResourceSignatureDesc& Desc,
109  bool bIsDeviceInternal = false) :
110  TDeviceObjectBase{pRefCounters, pDevice, Desc, bIsDeviceInternal},
112  {
113  // Don't read from m_Desc until it was allocated and copied in CopyDescription()
114  this->m_Desc.Resources = nullptr;
115  this->m_Desc.ImmutableSamplers = nullptr;
116  this->m_Desc.CombinedSamplerSuffix = nullptr;
117 
118  ValidatePipelineResourceSignatureDesc(Desc, pDevice->GetDeviceCaps().Features);
119 
120  // Determine shader stages that have any resources as well as
121  // shader stages that have static resources.
122  for (Uint32 i = 0; i < Desc.NumResources; ++i)
123  {
124  const auto& ResDesc = Desc.Resources[i];
125 
126  m_ShaderStages |= ResDesc.ShaderStages;
127  if (ResDesc.VarType == SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
128  m_StaticResShaderStages |= ResDesc.ShaderStages;
129  }
130 
132  {
134  DEV_CHECK_ERR(m_PipelineType != PIPELINE_TYPE_INVALID, "Failed to deduce pipeline type from shader stages");
135  }
136 
137  {
138  Uint32 StaticVarStageIdx = 0;
139  for (auto StaticResStages = m_StaticResShaderStages; StaticResStages != SHADER_TYPE_UNKNOWN; ++StaticVarStageIdx)
140  {
141  const auto StageBit = ExtractLSB(StaticResStages);
142  const auto ShaderTypeInd = GetShaderTypePipelineIndex(StageBit, m_PipelineType);
143  m_StaticResStageIndex[ShaderTypeInd] = static_cast<Int8>(StaticVarStageIdx);
144  }
145  VERIFY_EXPR(StaticVarStageIdx == GetNumStaticResStages());
146  }
147  }
148 
150  {
151  VERIFY(m_IsDestructed, "This object must be explicitly destructed with Destruct()");
152  }
153 
154  IMPLEMENT_QUERY_INTERFACE_IN_PLACE(IID_PipelineResourceSignature, TDeviceObjectBase)
155 
156 
158  {
160  {
161  LOG_WARNING_MESSAGE("Unable to get the number of static variables in shader stage ", GetShaderTypeLiteralName(ShaderType),
162  " as the stage is invalid for ", GetPipelineTypeString(m_PipelineType), " pipeline resource signature '", this->m_Desc.Name, "'.");
163  return 0;
164  }
165 
166  const auto ShaderTypeInd = GetShaderTypePipelineIndex(ShaderType, m_PipelineType);
167  const auto VarMngrInd = m_StaticResStageIndex[ShaderTypeInd];
168  if (VarMngrInd < 0)
169  return 0;
170 
171  VERIFY_EXPR(static_cast<Uint32>(VarMngrInd) < GetNumStaticResStages());
172  return m_StaticVarsMgrs[VarMngrInd].GetVariableCount();
173  }
174 
177  const Char* Name) override final
178  {
180  {
181  LOG_WARNING_MESSAGE("Unable to find static variable '", Name, "' in shader stage ", GetShaderTypeLiteralName(ShaderType),
182  " as the stage is invalid for ", GetPipelineTypeString(m_PipelineType), " pipeline resource signature '", this->m_Desc.Name, "'.");
183  return nullptr;
184  }
185 
186  const auto ShaderTypeInd = GetShaderTypePipelineIndex(ShaderType, m_PipelineType);
187  const auto VarMngrInd = m_StaticResStageIndex[ShaderTypeInd];
188  if (VarMngrInd < 0)
189  return nullptr;
190 
191  VERIFY_EXPR(static_cast<Uint32>(VarMngrInd) < GetNumStaticResStages());
192  return m_StaticVarsMgrs[VarMngrInd].GetVariable(Name);
193  }
194 
197  Uint32 Index) override final
198  {
200  {
201  LOG_WARNING_MESSAGE("Unable to get static variable at index ", Index, " in shader stage ", GetShaderTypeLiteralName(ShaderType),
202  " as the stage is invalid for ", GetPipelineTypeString(m_PipelineType), " pipeline resource signature '", this->m_Desc.Name, "'.");
203  return nullptr;
204  }
205 
206  const auto ShaderTypeInd = GetShaderTypePipelineIndex(ShaderType, m_PipelineType);
207  const auto VarMngrInd = m_StaticResStageIndex[ShaderTypeInd];
208  if (VarMngrInd < 0)
209  return nullptr;
210 
211  VERIFY_EXPR(static_cast<Uint32>(VarMngrInd) < GetNumStaticResStages());
212  return m_StaticVarsMgrs[VarMngrInd].GetVariable(Index);
213  }
214 
217  IResourceMapping* pResourceMapping,
218  Uint32 Flags) override final
219  {
220  const auto PipelineType = GetPipelineType();
221  for (Uint32 ShaderInd = 0; ShaderInd < m_StaticResStageIndex.size(); ++ShaderInd)
222  {
223  const auto VarMngrInd = m_StaticResStageIndex[ShaderInd];
224  if (VarMngrInd >= 0)
225  {
226  VERIFY_EXPR(static_cast<Uint32>(VarMngrInd) < GetNumStaticResStages());
227  // ShaderInd is the shader type pipeline index here
228  const auto ShaderType = GetShaderTypeFromPipelineIndex(ShaderInd, PipelineType);
229  if (ShaderFlags & ShaderType)
230  {
231  m_StaticVarsMgrs[VarMngrInd].BindResources(pResourceMapping, Flags);
232  }
233  }
234  }
235  }
236 
239  bool InitStaticResources) override final
240  {
241  auto* pThisImpl{static_cast<PipelineResourceSignatureImplType*>(this)};
242  auto& SRBAllocator{pThisImpl->m_pDevice->GetSRBAllocator()};
243  auto* pResBindingImpl{NEW_RC_OBJ(SRBAllocator, "ShaderResourceBinding instance", ShaderResourceBindingImplType)(pThisImpl)};
244  if (InitStaticResources)
245  pThisImpl->InitializeStaticSRBResources(pResBindingImpl);
246  pResBindingImpl->QueryInterface(IID_ShaderResourceBinding, reinterpret_cast<IObject**>(ppShaderResourceBinding));
247  }
248 
251  {
252  DEV_CHECK_ERR(pSRB != nullptr, "SRB must not be null");
253 
254  auto* const pSRBImpl = ValidatedCast<ShaderResourceBindingImplType>(pSRB);
255  if (pSRBImpl->StaticResourcesInitialized())
256  {
257  LOG_WARNING_MESSAGE("Static resources have already been initialized in this shader resource binding object.");
258  return;
259  }
260 
261  const auto* const pThisImpl = static_cast<const PipelineResourceSignatureImplType*>(this);
262 #ifdef DILIGENT_DEVELOPMENT
263  {
264  const auto* pSRBSignature = pSRBImpl->GetPipelineResourceSignature();
265  DEV_CHECK_ERR(pSRBSignature->IsCompatibleWith(pThisImpl), "Shader resource binding is not compatible with resource signature '", pThisImpl->m_Desc.Name, "'.");
266  }
267 #endif
268 
269  auto& ResourceCache = pSRBImpl->GetResourceCache();
270  pThisImpl->CopyStaticResources(ResourceCache);
271 
272  pSRBImpl->SetStaticResourcesInitialized();
273  }
274 
276  virtual bool DILIGENT_CALL_TYPE IsCompatibleWith(const IPipelineResourceSignature* pPRS) const override final
277  {
278  if (pPRS == nullptr)
279  return IsEmpty();
280 
281  if (this == pPRS)
282  return true;
283 
284  const auto& This = *static_cast<const PipelineResourceSignatureImplType*>(this);
285  const auto& Other = *ValidatedCast<const PipelineResourceSignatureImplType>(pPRS);
286 
287  if (This.GetHash() != Other.GetHash())
288  return false;
289 
290  if (!PipelineResourceSignaturesCompatible(This.GetDesc(), Other.GetDesc()))
291  return false;
292 
293  const auto ResCount = This.GetTotalResourceCount();
294  VERIFY_EXPR(ResCount == Other.GetTotalResourceCount());
295  for (Uint32 r = 0; r < ResCount; ++r)
296  {
297  const auto& Res = This.GetResourceAttribs(r);
298  const auto& OtherRes = Other.GetResourceAttribs(r);
299  if (!Res.IsCompatibleWith(OtherRes))
300  return false;
301  }
302 
303  return true;
304  }
305 
307  {
308  return GetHash() != Other.GetHash();
309  }
310 
311  size_t GetHash() const { return m_Hash; }
312 
314 
315  const char* GetCombinedSamplerSuffix() const { return this->m_Desc.CombinedSamplerSuffix; }
316 
317  bool IsUsingCombinedSamplers() const { return this->m_Desc.CombinedSamplerSuffix != nullptr; }
319 
322 
323  std::pair<Uint32, Uint32> GetResourceIndexRange(SHADER_RESOURCE_VARIABLE_TYPE VarType) const
324  {
325  return std::pair<Uint32, Uint32>{m_ResourceOffsets[VarType], m_ResourceOffsets[VarType + 1]};
326  }
327 
328  // Returns the number of shader stages that have resources.
330  {
331  return PlatformMisc::CountOneBits(Uint32{m_ShaderStages});
332  }
333 
334  // Returns the number of shader stages that have static resources.
336  {
337  return PlatformMisc::CountOneBits(Uint32{m_StaticResShaderStages});
338  }
339 
340  // Returns the type of the active shader stage with the given index.
342  {
343  VERIFY_EXPR(StageIndex < GetNumActiveShaderStages());
344 
345  SHADER_TYPE Stages = m_ShaderStages;
346  for (Uint32 Index = 0; Stages != SHADER_TYPE_UNKNOWN; ++Index)
347  {
348  auto StageBit = ExtractLSB(Stages);
349 
350  if (Index == StageIndex)
351  return StageBit;
352  }
353 
354  UNEXPECTED("Index is out of range");
355  return SHADER_TYPE_UNKNOWN;
356  }
357 
358  static constexpr Uint32 InvalidResourceIndex = ~0u;
361  Uint32 FindResource(SHADER_TYPE ShaderStage, const char* ResourceName) const
362  {
363  for (Uint32 r = 0; r < this->m_Desc.NumResources; ++r)
364  {
365  const auto& ResDesc = this->m_Desc.Resources[r];
366  if ((ResDesc.ShaderStages & ShaderStage) != 0 && strcmp(ResDesc.Name, ResourceName) == 0)
367  return r;
368  }
369 
370  return InvalidResourceIndex;
371  }
372 
375  Uint32 FindImmutableSampler(SHADER_TYPE ShaderStage, const char* ResourceName) const
376  {
377  return Diligent::FindImmutableSampler(this->m_Desc.ImmutableSamplers, this->m_Desc.NumImmutableSamplers,
378  ShaderStage, ResourceName, GetCombinedSamplerSuffix());
379  }
380 
382  {
383  VERIFY_EXPR(ResIndex < this->m_Desc.NumResources);
384  return this->m_Desc.Resources[ResIndex];
385  }
386 
388  {
389  VERIFY_EXPR(SampIndex < this->m_Desc.NumImmutableSamplers);
390  return this->m_Desc.ImmutableSamplers[SampIndex];
391  }
392 
394  const PipelineResourceSignatureImplType* pSign1)
395  {
396  if (pSign0 == pSign1)
397  return true;
398 
399  bool IsNull0 = pSign0 == nullptr || pSign0->IsEmpty();
400  bool IsNull1 = pSign1 == nullptr || pSign1->IsEmpty();
401  if (IsNull0 && IsNull1)
402  return true;
403 
404  if (IsNull0 != IsNull1)
405  return false;
406 
407  VERIFY_EXPR(pSign0 != nullptr && pSign1 != nullptr);
408  return pSign0->IsCompatibleWith(pSign1);
409  }
410 
412  {
413  return m_SRBMemAllocator;
414  }
415 
416  // Processes resources with the allowed variable types in the allowed shader stages
417  // and calls user-provided handler for each resource.
418  template <typename HandlerType>
419  void ProcessResources(const SHADER_RESOURCE_VARIABLE_TYPE* AllowedVarTypes,
420  Uint32 NumAllowedTypes,
421  SHADER_TYPE AllowedStages,
422  HandlerType Handler) const
423  {
424  if (AllowedVarTypes == nullptr)
425  NumAllowedTypes = 1;
426 
427  for (Uint32 TypeIdx = 0; TypeIdx < NumAllowedTypes; ++TypeIdx)
428  {
429  const auto IdxRange = AllowedVarTypes != nullptr ?
430  GetResourceIndexRange(AllowedVarTypes[TypeIdx]) :
431  std::make_pair<Uint32, Uint32>(0, GetTotalResourceCount());
432  for (Uint32 ResIdx = IdxRange.first; ResIdx < IdxRange.second; ++ResIdx)
433  {
434  const auto& ResDesc = GetResourceDesc(ResIdx);
435  VERIFY_EXPR(AllowedVarTypes == nullptr || ResDesc.VarType == AllowedVarTypes[TypeIdx]);
436 
437  if ((ResDesc.ShaderStages & AllowedStages) != 0)
438  {
439  Handler(ResDesc, ResIdx);
440  }
441  }
442  }
443  }
444 
445  bool IsEmpty() const
446  {
447  return GetTotalResourceCount() == 0 && GetImmutableSamplerCount() == 0;
448  }
449 
450 protected:
451  template <typename TReserveCustomData>
453  const PipelineResourceSignatureDesc& Desc,
454  TReserveCustomData ReserveCustomData) noexcept(false)
455  {
456  FixedLinearAllocator Allocator{RawAllocator};
457 
458  ReserveSpaceForDescription(Allocator, Desc);
459 
460  const auto NumStaticResStages = GetNumStaticResStages();
461  if (NumStaticResStages > 0)
462  {
463  Allocator.AddSpace<ShaderResourceCacheImplType>(1);
464  Allocator.AddSpace<ShaderVariableManagerImplType>(NumStaticResStages);
465  }
466 
467  ReserveCustomData(Allocator);
468 
469  Allocator.Reserve();
470  // The memory is now owned by PipelineResourceSignatureBase and will be freed by Destruct().
471  m_pRawMemory = decltype(m_pRawMemory){Allocator.ReleaseOwnership(), STDDeleterRawMem<void>{RawAllocator}};
472 
473  CopyDescription(Allocator, Desc);
474 
475  if (NumStaticResStages > 0)
476  {
478 
479  static_assert(std::is_nothrow_constructible<ShaderVariableManagerImplType, decltype(*this), ShaderResourceCacheImplType&>::value,
480  "Constructor of ShaderVariableManagerImplType must be noexcept, so we can safely construct all manager objects");
481  m_StaticVarsMgrs = Allocator.ConstructArray<ShaderVariableManagerImplType>(NumStaticResStages, std::ref(*this), std::ref(*m_pStaticResCache));
482  }
483 
484  return Allocator;
485  }
486 
487 private:
488  static void ReserveSpaceForDescription(FixedLinearAllocator& Allocator, const PipelineResourceSignatureDesc& Desc)
489  {
490  Allocator.AddSpace<PipelineResourceDesc>(Desc.NumResources);
492 
493  for (Uint32 i = 0; i < Desc.NumResources; ++i)
494  {
495  const auto& Res = Desc.Resources[i];
496 
497  VERIFY(Res.Name != nullptr, "Name can't be null. This error should've been caught by ValidatePipelineResourceSignatureDesc().");
498  VERIFY(Res.Name[0] != '\0', "Name can't be empty. This error should've been caught by ValidatePipelineResourceSignatureDesc().");
499  VERIFY(Res.ShaderStages != SHADER_TYPE_UNKNOWN, "ShaderStages can't be SHADER_TYPE_UNKNOWN. This error should've been caught by ValidatePipelineResourceSignatureDesc().");
500  VERIFY(Res.ArraySize != 0, "ArraySize can't be 0. This error should've been caught by ValidatePipelineResourceSignatureDesc().");
501 
502  Allocator.AddSpaceForString(Res.Name);
503  }
504 
505  for (Uint32 i = 0; i < Desc.NumImmutableSamplers; ++i)
506  {
507  const auto* SamOrTexName = Desc.ImmutableSamplers[i].SamplerOrTextureName;
508  VERIFY(SamOrTexName != nullptr, "SamplerOrTextureName can't be null. This error should've been caught by ValidatePipelineResourceSignatureDesc().");
509  VERIFY(SamOrTexName[0] != '\0', "SamplerOrTextureName can't be empty. This error should've been caught by ValidatePipelineResourceSignatureDesc().");
510  Allocator.AddSpaceForString(SamOrTexName);
511  }
512 
515  }
516 
517  void CopyDescription(FixedLinearAllocator& Allocator, const PipelineResourceSignatureDesc& Desc) noexcept(false)
518  {
521 
522  for (Uint32 i = 0; i < Desc.NumResources; ++i)
523  {
524  const auto& SrcRes = Desc.Resources[i];
525  auto& DstRes = pResources[i];
526 
527  DstRes = SrcRes;
528  VERIFY_EXPR(SrcRes.Name != nullptr && SrcRes.Name[0] != '\0');
529  DstRes.Name = Allocator.CopyString(SrcRes.Name);
530 
531  ++m_ResourceOffsets[DstRes.VarType + 1];
532  }
533 
534  // Sort resources by variable type (all static -> all mutable -> all dynamic)
535  std::sort(pResources, pResources + Desc.NumResources,
536  [](const PipelineResourceDesc& lhs, const PipelineResourceDesc& rhs) {
537  return lhs.VarType < rhs.VarType;
538  });
539 
540  for (size_t i = 1; i < m_ResourceOffsets.size(); ++i)
542 
543 #ifdef DILIGENT_DEBUG
545  for (Uint32 VarType = 0; VarType < SHADER_RESOURCE_VARIABLE_TYPE_NUM_TYPES; ++VarType)
546  {
547  auto IdxRange = GetResourceIndexRange(static_cast<SHADER_RESOURCE_VARIABLE_TYPE>(VarType));
548  for (Uint32 idx = IdxRange.first; idx < IdxRange.second; ++idx)
549  VERIFY(pResources[idx].VarType == VarType, "Unexpected resource var type");
550  }
551 #endif
552 
553  for (Uint32 i = 0; i < Desc.NumImmutableSamplers; ++i)
554  {
555  const auto& SrcSam = Desc.ImmutableSamplers[i];
556  auto& DstSam = pSamplers[i];
557 
558  DstSam = SrcSam;
559  VERIFY_EXPR(SrcSam.SamplerOrTextureName != nullptr && SrcSam.SamplerOrTextureName[0] != '\0');
560  DstSam.SamplerOrTextureName = Allocator.CopyString(SrcSam.SamplerOrTextureName);
561  }
562 
563  this->m_Desc.Resources = pResources;
564  this->m_Desc.ImmutableSamplers = pSamplers;
565 
568  }
569 
570 protected:
571  void Destruct()
572  {
573  VERIFY(!m_IsDestructed, "This object has already been destructed");
574 
575  this->m_Desc.Resources = nullptr;
576  this->m_Desc.ImmutableSamplers = nullptr;
577  this->m_Desc.CombinedSamplerSuffix = nullptr;
578 
579  auto& RawAllocator = GetRawAllocator();
580 
581  if (m_StaticVarsMgrs != nullptr)
582  {
583  for (auto Idx : m_StaticResStageIndex)
584  {
585  if (Idx >= 0)
586  {
587  m_StaticVarsMgrs[Idx].Destroy(RawAllocator);
588  m_StaticVarsMgrs[Idx].~ShaderVariableManagerImplType();
589  }
590  }
591  m_StaticVarsMgrs = nullptr;
592  }
593 
594  if (m_pStaticResCache != nullptr)
595  {
596  m_pStaticResCache->~ShaderResourceCacheImplType();
597  m_pStaticResCache = nullptr;
598  }
599 
600  m_StaticResStageIndex.fill(-1);
601 
602  m_pRawMemory.reset();
603 
604 #if DILIGENT_DEBUG
605  m_IsDestructed = true;
606 #endif
607  }
608 
609  // Finds a sampler that is assigned to texture Tex, when combined texture samplers are used.
610  // Returns an index of the sampler in m_Desc.Resources array, or InvalidSamplerValue if there is
611  // no such sampler, or if combined samplers are not used.
612  Uint32 FindAssignedSampler(const PipelineResourceDesc& Tex, Uint32 InvalidSamplerValue) const
613  {
615  Uint32 SamplerInd = InvalidSamplerValue;
617  {
618  const auto IdxRange = GetResourceIndexRange(Tex.VarType);
619 
620  for (Uint32 i = IdxRange.first; i < IdxRange.second; ++i)
621  {
622  const auto& Res = this->m_Desc.Resources[i];
623  VERIFY_EXPR(Tex.VarType == Res.VarType);
624 
625  if (Res.ResourceType == SHADER_RESOURCE_TYPE_SAMPLER &&
626  (Tex.ShaderStages & Res.ShaderStages) != 0 &&
627  StreqSuff(Res.Name, Tex.Name, GetCombinedSamplerSuffix()))
628  {
629  VERIFY_EXPR((Res.ShaderStages & Tex.ShaderStages) == Tex.ShaderStages);
630  SamplerInd = i;
631  break;
632  }
633  }
634  }
635  return SamplerInd;
636  }
637 
639  {
640  const auto* const pThisImpl = static_cast<const PipelineResourceSignatureImplType*>(this);
641 
643  for (Uint32 i = 0; i < this->m_Desc.NumResources; ++i)
644  {
645  const auto& Attr = pThisImpl->GetResourceAttribs(i);
646  HashCombine(m_Hash, Attr.GetHash());
647  }
648  }
649 
650 protected:
651  std::unique_ptr<void, STDDeleterRawMem<void>> m_pRawMemory;
652 
653  // Static resource cache for all static resources
655 
656  // Static variables manager for every shader stage
657  ShaderVariableManagerImplType* m_StaticVarsMgrs = nullptr; // [GetNumStaticResStages()]
658 
659  size_t m_Hash = 0;
660 
661  // Resource offsets (e.g. index of the first resource), for each variable type.
662  std::array<Uint16, SHADER_RESOURCE_VARIABLE_TYPE_NUM_TYPES + 1> m_ResourceOffsets = {};
663 
664  // Shader stages that have resources.
666 
667  // Shader stages that have static resources.
669 
671 
672  // Index of the shader stage that has static resources, for every shader
673  // type in the pipeline (given by GetShaderTypePipelineIndex(ShaderType, m_PipelineType)).
674  std::array<Int8, MAX_SHADERS_IN_PIPELINE> m_StaticResStageIndex = {-1, -1, -1, -1, -1, -1};
675  static_assert(MAX_SHADERS_IN_PIPELINE == 6, "Please update the initializer list above");
676 
677  // Allocator for shader resource binding object instances.
679 
680 #ifdef DILIGENT_DEBUG
681  bool m_IsDestructed = false;
682 #endif
683 };
684 
685 } // namespace Diligent
Diligent::FixedLinearAllocator
Implementation of a linear allocator on a fixed-size memory page.
Definition: FixedLinearAllocator.hpp:45
Diligent::PipelineResourceSignatureBase::m_StaticResShaderStages
SHADER_TYPE m_StaticResShaderStages
Definition: PipelineResourceSignatureBase.hpp:668
ShaderResourceCacheCommon.hpp
Diligent::IReferenceCounters
Base interface for a reference counter object that stores the number of strong and weak references an...
Definition: ReferenceCounters.h:44
Diligent::PipelineResourceSignatureBase::IsUsingSeparateSamplers
bool IsUsingSeparateSamplers() const
Definition: PipelineResourceSignatureBase.hpp:318
Diligent::PipelineResourceSignatureBase::InitializeStaticSRBResources
virtual void InitializeStaticSRBResources(IShaderResourceBinding *pSRB) const override final
Implementation of IPipelineResourceSignature::InitializeStaticSRBResources.
Definition: PipelineResourceSignatureBase.hpp:250
Diligent::PipelineResourceSignatureBase::GetPipelineType
PIPELINE_TYPE GetPipelineType() const
Definition: PipelineResourceSignatureBase.hpp:313
Diligent::ValidatePipelineResourceSignatureDesc
void ValidatePipelineResourceSignatureDesc(const PipelineResourceSignatureDesc &Desc, const DeviceFeatures &Features) noexcept(false)
Validates pipeline resource signature description and throws an exception in case of an error.
Definition: PipelineResourceSignatureBase.cpp:40
Diligent::SRBMemoryAllocator
Definition: SRBMemoryAllocator.hpp:37
Diligent::PipelineResourceSignatureBase::GetNumActiveShaderStages
Uint32 GetNumActiveShaderStages() const
Definition: PipelineResourceSignatureBase.hpp:329
Diligent::IShaderResourceVariable
Shader resource variable.
Definition: ShaderResourceVariable.h:117
Diligent::Char
char Char
Definition: BasicTypes.h:64
Diligent::ResourceCacheContentType::Signature
@ Signature
Static resources of a pipeline resource signature.
Diligent::IShaderResourceBinding
Shader resource binding interface.
Definition: ShaderResourceBinding.h:58
Diligent::DeviceFeatures
struct DeviceFeatures DeviceFeatures
Definition: GraphicsTypes.h:1750
Diligent::StreqSuff
bool StreqSuff(const char *RefStr, const char *Str, const char *Suff, bool NoSuffixAllowed=false)
Definition: StringTools.hpp:110
Diligent::IPipelineResourceSignature
Pipeline resource signature interface.
Definition: PipelineResourceSignature.h:226
DeviceObjectBase.hpp
Diligent::PipelineResourceSignatureDesc
Pipeline resource signature description.
Definition: PipelineResourceSignature.h:166
PipelineResourceSignature.h
Diligent::SHADER_TYPE
SHADER_TYPE
Describes the shader type.
Definition: GraphicsTypes.h:65
Diligent::ExtractLSB
std::enable_if< std::is_integral< T >::value, T >::type ExtractLSB(T &bits)
Returns the least-signficant bit and clears it in the input argument.
Definition: BasicMath.hpp:2195
Diligent::PipelineResourceDesc::ShaderStages
SHADER_TYPE ShaderStages
Shader stages that this resource applies to. When multiple shader stages are specified,...
Definition: PipelineResourceSignature.h:130
Diligent::PipelineResourceSignatureDesc::Resources
const PipelineResourceDesc * Resources
A pointer to an array of resource descriptions. See Diligent::PipelineResourceDesc.
Definition: PipelineResourceSignature.h:169
BasicMath.hpp
Diligent::PipelineResourceSignatureBase::FindResource
Uint32 FindResource(SHADER_TYPE ShaderStage, const char *ResourceName) const
Finds a resource with the given name in the specified shader stage and returns its index in m_Desc....
Definition: PipelineResourceSignatureBase.hpp:361
Diligent::SHADER_RESOURCE_TYPE_TEXTURE_SRV
@ SHADER_RESOURCE_TYPE_TEXTURE_SRV
Shader resource view of a texture (sampled image)
Definition: Shader.h:365
Flags
Uint32 Flags
Definition: DXBCUtils.cpp:71
Diligent::PipelineResourceSignatureBase::IsIncompatibleWith
bool IsIncompatibleWith(const PipelineResourceSignatureImplType &Other) const
Definition: PipelineResourceSignatureBase.hpp:306
Diligent::IObject
Base interface for all dynamic objects in the engine.
Definition: Object.h:41
Diligent::SHADER_RESOURCE_TYPE_SAMPLER
@ SHADER_RESOURCE_TYPE_SAMPLER
Sampler (separate sampler)
Definition: Shader.h:377
Diligent::SHADER_RESOURCE_VARIABLE_TYPE_NUM_TYPES
@ SHADER_RESOURCE_VARIABLE_TYPE_NUM_TYPES
Total number of shader variable types.
Definition: ShaderResourceVariable.h:65
Diligent::PIPELINE_TYPE
PIPELINE_TYPE
Pipeline type.
Definition: PipelineState.h:295
UNEXPECTED
#define UNEXPECTED(...)
Definition: DebugUtilities.hpp:77
Diligent::PipelineResourceSignatureBase::m_StaticResStageIndex
std::array< Int8, MAX_SHADERS_IN_PIPELINE > m_StaticResStageIndex
Definition: PipelineResourceSignatureBase.hpp:674
Diligent::PipelineResourceSignatureBase< EngineGLImplTraits >::PipelineResourceSignatureImplType
typename EngineGLImplTraits ::PipelineResourceSignatureImplType PipelineResourceSignatureImplType
Definition: PipelineResourceSignatureBase.hpp:97
Diligent::ImmutableSamplerDesc::SamplerOrTextureName
const Char * SamplerOrTextureName
The name of the sampler itself or the name of the texture variable that this immutable sampler is ass...
Definition: PipelineResourceSignature.h:58
Diligent::PipelineResourceSignatureBase::GetStaticVariableByIndex
virtual IShaderResourceVariable * GetStaticVariableByIndex(SHADER_TYPE ShaderType, Uint32 Index) override final
Implementation of IPipelineResourceSignature::GetStaticVariableByIndex.
Definition: PipelineResourceSignatureBase.hpp:196
Diligent::PipelineResourceSignatureBase::Destruct
void Destruct()
Definition: PipelineResourceSignatureBase.hpp:571
Diligent::DeviceObjectBase< EngineImplTraits::PipelineResourceSignatureInterface, EngineImplTraits::RenderDeviceImplType, PipelineResourceSignatureDesc >::m_Desc
PipelineResourceSignatureDesc m_Desc
Object description.
Definition: DeviceObjectBase.hpp:182
Diligent::PipelineResourceSignaturesCompatible
bool PipelineResourceSignaturesCompatible(const PipelineResourceSignatureDesc &Desc0, const PipelineResourceSignatureDesc &Desc1) noexcept
Returns true if two pipeline resource signature descriptions are compatible, and false otherwise.
Definition: PipelineResourceSignatureBase.cpp:328
Diligent::PipelineResourceSignatureBase::GetStaticVariableCount
virtual Uint32 GetStaticVariableCount(SHADER_TYPE ShaderType) const override final
Implementation of IPipelineResourceSignature::GetStaticVariableCount.
Definition: PipelineResourceSignatureBase.hpp:157
PrivateConstants.h
Diligent::PipelineResourceSignatureDesc::CombinedSamplerSuffix
const Char * CombinedSamplerSuffix
If UseCombinedTextureSamplers is true, defines the suffix added to the texture variable name to get c...
Definition: PipelineResourceSignature.h:201
Diligent::PipelineResourceSignatureBase::FindAssignedSampler
Uint32 FindAssignedSampler(const PipelineResourceDesc &Tex, Uint32 InvalidSamplerValue) const
Definition: PipelineResourceSignatureBase.hpp:612
Diligent::FixedLinearAllocator::ConstructArray
NODISCARD T * ConstructArray(size_t count, const Args &... args)
Definition: FixedLinearAllocator.hpp:224
DEV_CHECK_ERR
#define DEV_CHECK_ERR(...)
Definition: DebugUtilities.hpp:90
Diligent::PipelineResourceSignatureBase::CalculateHash
void CalculateHash()
Definition: PipelineResourceSignatureBase.hpp:638
Diligent::PipelineResourceSignatureDesc
struct PipelineResourceSignatureDesc PipelineResourceSignatureDesc
Definition: PipelineResourceSignature.h:209
Diligent::FindImmutableSampler
Uint32 FindImmutableSampler(const ImmutableSamplerDesc *ImtblSamplers, Uint32 NumImtblSamplers, SHADER_TYPE ShaderStages, const char *ResourceName, const char *SamplerSuffix)
Finds an immutable sampler for the resource name 'ResourceName' that is defined in shader stages 'Sha...
Definition: PipelineResourceSignatureBase.cpp:294
Diligent::PipelineResourceSignatureBase::GetImmutableSamplerDesc
const ImmutableSamplerDesc & GetImmutableSamplerDesc(Uint32 SampIndex) const
Definition: PipelineResourceSignatureBase.hpp:387
Diligent::PipelineResourceSignatureDesc::NumResources
Uint32 NumResources
The number of resources in Resources array.
Definition: PipelineResourceSignature.h:172
Diligent::PipelineResourceSignatureBase::TDeviceObjectBase
DeviceObjectBase< BaseInterface, RenderDeviceImplType, PipelineResourceSignatureDesc > TDeviceObjectBase
Definition: PipelineResourceSignatureBase.hpp:99
RenderDeviceBase.hpp
Diligent::PipelineResourceDesc::VarType
SHADER_RESOURCE_VARIABLE_TYPE VarType
Resource variable type, see Diligent::SHADER_RESOURCE_VARIABLE_TYPE.
Definition: PipelineResourceSignature.h:139
Diligent::PipelineResourceSignatureBase::GetImmutableSamplerCount
Uint32 GetImmutableSamplerCount() const
Definition: PipelineResourceSignatureBase.hpp:321
Diligent::PipelineResourceSignatureBase::ProcessResources
void ProcessResources(const SHADER_RESOURCE_VARIABLE_TYPE *AllowedVarTypes, Uint32 NumAllowedTypes, SHADER_TYPE AllowedStages, HandlerType Handler) const
Definition: PipelineResourceSignatureBase.hpp:419
Diligent::FixedLinearAllocator::CopyString
NODISCARD Char * CopyString(const char *Str)
Definition: FixedLinearAllocator.hpp:251
Diligent::PipelineResourceSignatureBase::GetActiveShaderStageType
SHADER_TYPE GetActiveShaderStageType(Uint32 StageIndex) const
Definition: PipelineResourceSignatureBase.hpp:341
Diligent::PipelineResourceSignatureBase::~PipelineResourceSignatureBase
~PipelineResourceSignatureBase()
Definition: PipelineResourceSignatureBase.hpp:149
Diligent::PipelineResourceSignatureBase::BindStaticResources
virtual void BindStaticResources(Uint32 ShaderFlags, IResourceMapping *pResourceMapping, Uint32 Flags) override final
Implementation of IPipelineResourceSignature::BindStaticResources.
Definition: PipelineResourceSignatureBase.hpp:216
Diligent::PipelineResourceSignatureBase::GetHash
size_t GetHash() const
Definition: PipelineResourceSignatureBase.hpp:311
Diligent::Int8
int8_t Int8
8-bit signed integer
Definition: BasicTypes.h:48
Diligent::PipelineResourceSignatureDesc::NumImmutableSamplers
Uint32 NumImmutableSamplers
The number of immutable samplers in ImmutableSamplers array.
Definition: PipelineResourceSignature.h:178
Diligent::PipelineResourceSignatureBase::GetTotalResourceCount
Uint32 GetTotalResourceCount() const
Definition: PipelineResourceSignatureBase.hpp:320
Diligent::GetRawAllocator
IMemoryAllocator & GetRawAllocator()
Returns raw memory allocator.
Definition: EngineMemory.cpp:51
SRBMemoryAllocator.hpp
Diligent::PipelineResourceSignatureBase::GetCombinedSamplerSuffix
const char * GetCombinedSamplerSuffix() const
Definition: PipelineResourceSignatureBase.hpp:315
Diligent::IsConsistentShaderType
bool IsConsistentShaderType(SHADER_TYPE ShaderType, PIPELINE_TYPE PipelineType)
Definition: GraphicsAccessories.cpp:1388
Diligent::FixedLinearAllocator::AddSpace
void AddSpace(size_t size, size_t alignment) noexcept
Definition: FixedLinearAllocator.hpp:106
IMPLEMENT_QUERY_INTERFACE_IN_PLACE
#define IMPLEMENT_QUERY_INTERFACE_IN_PLACE(InterfaceID, ParentClassName)
Definition: ObjectBase.hpp:59
Diligent::PipelineResourceSignatureBase::m_StaticVarsMgrs
ShaderVariableManagerImplType * m_StaticVarsMgrs
Definition: PipelineResourceSignatureBase.hpp:657
FixedLinearAllocator.hpp
Diligent::GetShaderTypePipelineIndex
Int32 GetShaderTypePipelineIndex(SHADER_TYPE ShaderType, PIPELINE_TYPE PipelineType)
Definition: GraphicsAccessories.cpp:1422
Diligent::PipelineResourceSignatureBase::GetResourceIndexRange
std::pair< Uint32, Uint32 > GetResourceIndexRange(SHADER_RESOURCE_VARIABLE_TYPE VarType) const
Definition: PipelineResourceSignatureBase.hpp:323
DILIGENT_CALL_TYPE
#define DILIGENT_CALL_TYPE
Definition: CommonDefinitions.h:45
Diligent::PipelineResourceSignatureBase::m_ShaderStages
SHADER_TYPE m_ShaderStages
Definition: PipelineResourceSignatureBase.hpp:665
Diligent::PipelineResourceSignatureBase::m_PipelineType
PIPELINE_TYPE m_PipelineType
Definition: PipelineResourceSignatureBase.hpp:670
Diligent::PipelineResourceSignatureBase::GetResourceDesc
const PipelineResourceDesc & GetResourceDesc(Uint32 ResIndex) const
Definition: PipelineResourceSignatureBase.hpp:381
Diligent::PipelineResourceSignatureBase::m_ResourceOffsets
std::array< Uint16, SHADER_RESOURCE_VARIABLE_TYPE_NUM_TYPES+1 > m_ResourceOffsets
Definition: PipelineResourceSignatureBase.hpp:662
Diligent::PipelineResourceSignatureBase::IsEmpty
bool IsEmpty() const
Definition: PipelineResourceSignatureBase.hpp:445
Diligent::PipelineResourceDesc
Pipeline resource description.
Definition: PipelineResourceSignature.h:120
Diligent::Uint32
uint32_t Uint32
32-bit unsigned integer
Definition: BasicTypes.h:51
Diligent::SHADER_TYPE_UNKNOWN
@ SHADER_TYPE_UNKNOWN
Unknown shader type.
Definition: GraphicsTypes.h:67
Diligent::PipelineResourceSignatureBase::m_pRawMemory
std::unique_ptr< void, STDDeleterRawMem< void > > m_pRawMemory
Definition: PipelineResourceSignatureBase.hpp:651
Diligent::PipelineResourceSignatureDesc::UseCombinedTextureSamplers
bool UseCombinedTextureSamplers
If set to true, textures will be combined with texture samplers. The CombinedSamplerSuffix member def...
Definition: PipelineResourceSignature.h:194
Diligent::PipelineResourceSignatureBase::m_Hash
size_t m_Hash
Definition: PipelineResourceSignatureBase.hpp:659
Diligent::FixedLinearAllocator::AddSpaceForString
void AddSpaceForString(const Char *str) noexcept
Definition: FixedLinearAllocator.hpp:141
Diligent::PipelineResourceSignatureBase::IsUsingCombinedSamplers
bool IsUsingCombinedSamplers() const
Definition: PipelineResourceSignatureBase.hpp:317
Diligent::PipelineResourceSignatureBase< EngineGLImplTraits >::BaseInterface
typename EngineGLImplTraits ::PipelineResourceSignatureInterface BaseInterface
Definition: PipelineResourceSignatureBase.hpp:82
Diligent::CalculatePipelineResourceSignatureDescHash
size_t CalculatePipelineResourceSignatureDescHash(const PipelineResourceSignatureDesc &Desc) noexcept
Calculates hash of the pipeline resource signature description.
Definition: PipelineResourceSignatureBase.cpp:359
Diligent::PipelineResourceSignatureBase::m_SRBMemAllocator
SRBMemoryAllocator m_SRBMemAllocator
Definition: PipelineResourceSignatureBase.hpp:675
Diligent::PIPELINE_TYPE_INVALID
@ PIPELINE_TYPE_INVALID
Definition: PipelineState.h:312
Diligent::STDDeleter
Definition: STDAllocator.hpp:182
Diligent::PipelineResourceSignatureBase::IsCompatibleWith
virtual bool IsCompatibleWith(const IPipelineResourceSignature *pPRS) const override final
Implementation of IPipelineResourceSignature::IsCompatibleWith.
Definition: PipelineResourceSignatureBase.hpp:276
Diligent::PipelineResourceDesc::ResourceType
SHADER_RESOURCE_TYPE ResourceType
Resource type, see Diligent::SHADER_RESOURCE_TYPE.
Definition: PipelineResourceSignature.h:136
StringTools.hpp
Diligent::GetShaderTypeFromPipelineIndex
SHADER_TYPE GetShaderTypeFromPipelineIndex(Int32 Index, PIPELINE_TYPE PipelineType)
Definition: GraphicsAccessories.cpp:1466
Diligent::SHADER_RESOURCE_VARIABLE_TYPE_STATIC
@ SHADER_RESOURCE_VARIABLE_TYPE_STATIC
Shader resource bound to the variable is the same for all SRB instances. It must be set once directly...
Definition: ShaderResourceVariable.h:52
Diligent::PipelineResourceSignatureBase::FindImmutableSampler
Uint32 FindImmutableSampler(SHADER_TYPE ShaderStage, const char *ResourceName) const
Finds an immutable with the given name in the specified shader stage and returns its index in m_Desc....
Definition: PipelineResourceSignatureBase.hpp:375
Diligent::PipelineResourceSignatureBase::GetStaticVariableByName
virtual IShaderResourceVariable * GetStaticVariableByName(SHADER_TYPE ShaderType, const Char *Name) override final
Implementation of IPipelineResourceSignature::GetStaticVariableByName.
Definition: PipelineResourceSignatureBase.hpp:176
Diligent::IMemoryAllocator
Base interface for a raw memory allocator.
Definition: MemoryAllocator.h:41
LOG_WARNING_MESSAGE
#define LOG_WARNING_MESSAGE(...)
Definition: Errors.hpp:123
Diligent::PipelineResourceSignatureBase::InvalidResourceIndex
static constexpr Uint32 InvalidResourceIndex
Definition: PipelineResourceSignatureBase.hpp:358
HashUtils.hpp
Diligent::PipelineResourceDesc::Name
const char * Name
Resource name in the shader.
Definition: PipelineResourceSignature.h:123
Diligent::PipelineResourceSignatureBase< EngineGLImplTraits >::ShaderResourceBindingImplType
typename EngineGLImplTraits ::ShaderResourceBindingImplType ShaderResourceBindingImplType
Definition: PipelineResourceSignatureBase.hpp:94
Diligent::ImmutableSamplerDesc
struct ImmutableSamplerDesc ImmutableSamplerDesc
Definition: PipelineResourceSignature.h:75
Diligent::PipelineResourceSignatureBase::GetSRBMemoryAllocator
SRBMemoryAllocator & GetSRBMemoryAllocator()
Definition: PipelineResourceSignatureBase.hpp:411
Diligent::PipelineTypeFromShaderStages
PIPELINE_TYPE PipelineTypeFromShaderStages(SHADER_TYPE ShaderStages)
Definition: GraphicsAccessories.cpp:1528
Diligent::PipelineResourceSignatureBase::CreateShaderResourceBinding
virtual void CreateShaderResourceBinding(IShaderResourceBinding **ppShaderResourceBinding, bool InitStaticResources) override final
Implementation of IPipelineResourceSignature::CreateShaderResourceBinding.
Definition: PipelineResourceSignatureBase.hpp:238
Diligent::GetPipelineTypeString
const char * GetPipelineTypeString(PIPELINE_TYPE PipelineType)
Definition: GraphicsAccessories.cpp:1145
Diligent::PipelineResourceDesc
struct PipelineResourceDesc PipelineResourceDesc
Definition: PipelineResourceSignature.h:162
VERIFY_EXPR
#define VERIFY_EXPR(...)
Definition: DebugUtilities.hpp:79
Diligent::GetShaderTypeLiteralName
const Char * GetShaderTypeLiteralName(SHADER_TYPE ShaderType)
Returns the literal name of a shader type. For instance, for a pixel shader, "SHADER_TYPE_PIXEL" will...
Definition: GraphicsAccessories.cpp:476
VERIFY
#define VERIFY(...)
Definition: DebugUtilities.hpp:76
Diligent::PipelineResourceSignatureDesc::ImmutableSamplers
const ImmutableSamplerDesc * ImmutableSamplers
A pointer to an array of immutable samplers. See Diligent::ImmutableSamplerDesc.
Definition: PipelineResourceSignature.h:175
Diligent::PipelineResourceSignatureBase::ShaderVariableManagerImplType
typename EngineImplTraits::ShaderVariableManagerImplType ShaderVariableManagerImplType
Definition: PipelineResourceSignatureBase.hpp:91
Diligent::PipelineResourceSignatureBase
Template class implementing base functionality of the pipeline resource signature object.
Definition: PipelineResourceSignatureBase.hpp:78
Diligent::PipelineResourceSignatureBase::m_pStaticResCache
ShaderResourceCacheImplType * m_pStaticResCache
Definition: PipelineResourceSignatureBase.hpp:654
Diligent::PipelineResourceSignatureBase::SignaturesCompatible
static bool SignaturesCompatible(const PipelineResourceSignatureImplType *pSign0, const PipelineResourceSignatureImplType *pSign1)
Definition: PipelineResourceSignatureBase.hpp:393
ShaderType
Uint16 ShaderType
Definition: DXBCUtils.cpp:70
Diligent::PipelineResourceSignatureBase::PipelineResourceSignatureBase
PipelineResourceSignatureBase(IReferenceCounters *pRefCounters, RenderDeviceImplType *pDevice, const PipelineResourceSignatureDesc &Desc, bool bIsDeviceInternal=false)
Definition: PipelineResourceSignatureBase.hpp:106
Diligent::PipelineResourceSignatureBase::ShaderResourceCacheImplType
typename EngineImplTraits::ShaderResourceCacheImplType ShaderResourceCacheImplType
Definition: PipelineResourceSignatureBase.hpp:88
Diligent::HashCombine
void HashCombine(std::size_t &Seed, const T &Val)
Definition: HashUtils.hpp:44
Diligent::PipelineResourceSignatureBase< EngineGLImplTraits >::RenderDeviceImplType
typename EngineGLImplTraits ::RenderDeviceImplType RenderDeviceImplType
Definition: PipelineResourceSignatureBase.hpp:85
Diligent::PipelineResourceSignatureBase::AllocateInternalObjects
FixedLinearAllocator AllocateInternalObjects(IMemoryAllocator &RawAllocator, const PipelineResourceSignatureDesc &Desc, TReserveCustomData ReserveCustomData) noexcept(false)
Definition: PipelineResourceSignatureBase.hpp:452
NEW_RC_OBJ
#define NEW_RC_OBJ(Allocator, Desc, Type,...)
Definition: RefCountedObjectImpl.hpp:698
Diligent::DeviceObjectAttribs::Name
const Char * Name
Object name.
Definition: GraphicsTypes.h:1199
Diligent::DeviceObjectBase
Template class implementing base functionality of the device object.
Definition: DeviceObjectBase.hpp:45
Diligent
The library uses Direct3D-style math:
Definition: AdvancedMath.hpp:37
Diligent::PipelineResourceSignatureBase::GetNumStaticResStages
Uint32 GetNumStaticResStages() const
Definition: PipelineResourceSignatureBase.hpp:335
PlatformMisc.hpp
Diligent::SHADER_RESOURCE_VARIABLE_TYPE
SHADER_RESOURCE_VARIABLE_TYPE
Describes the type of the shader resource variable.
Definition: ShaderResourceVariable.h:48
Diligent::IResourceMapping
Resouce mapping.
Definition: ResourceMapping.h:107
Diligent::ImmutableSamplerDesc
Immutable sampler description.
Definition: PipelineResourceSignature.h:51