31 #define USE_VARIABLE_HASH_MAP 0 34 #include "ShaderResources.h" 35 #include "ShaderBase.h" 36 #include "ShaderResourceCacheD3D11.h" 37 #include "EngineD3D11Defines.h" 38 #include "STDAllocator.h" 39 #include "ShaderVariableD3DBase.h" 40 #include "ShaderResourcesD3D11.h" 45 class IMemoryAllocator;
61 void Initialize(
const std::shared_ptr<const ShaderResourcesD3D11>& pSrcResources,
65 IMemoryAllocator& ResCacheDataAllocator,
66 IMemoryAllocator& ResLayoutDataAllocator);
70 using ShaderVariableD3D11Base = ShaderVariableD3DBase<ShaderResourceLayoutD3D11>;
72 struct ConstBuffBindInfo : ShaderVariableD3D11Base
74 ConstBuffBindInfo(
const D3DShaderResourceAttribs& ResourceAttribs,
76 ShaderVariableD3D11Base(ParentResLayout, ResourceAttribs)
80 virtual void Set(
IDeviceObject *pObject)
override final{ BindResource(pObject, 0,
nullptr); }
82 virtual void SetArray(
IDeviceObject*
const* ppObjects, Uint32 FirstElement, Uint32 NumElements)
override final 84 for(Uint32 elem=0; elem < NumElements; ++elem)
85 BindResource(ppObjects[elem], FirstElement+elem,
nullptr);
88 __forceinline
bool IsBound(Uint32 ArrayIndex);
91 struct TexAndSamplerBindInfo : ShaderVariableD3D11Base
93 TexAndSamplerBindInfo(
const D3DShaderResourceAttribs& _TextureAttribs,
94 const D3DShaderResourceAttribs& _SamplerAttribs,
96 ShaderVariableD3D11Base(ParentResLayout, _TextureAttribs),
97 SamplerAttribs(_SamplerAttribs)
102 virtual void Set(
IDeviceObject *pObject)
override final{ BindResource(pObject, 0,
nullptr); }
104 virtual void SetArray(
IDeviceObject*
const* ppObjects, Uint32 FirstElement, Uint32 NumElements)
override final 106 for(Uint32 elem=0; elem < NumElements; ++elem)
107 BindResource(ppObjects[elem], FirstElement+elem,
nullptr);
110 __forceinline
bool IsBound(Uint32 ArrayIndex);
112 static const D3DShaderResourceAttribs InvalidSamplerAttribs;
114 const D3DShaderResourceAttribs &SamplerAttribs;
117 struct TexUAVBindInfo : ShaderVariableD3D11Base
119 TexUAVBindInfo(
const D3DShaderResourceAttribs& ResourceAttribs,
121 ShaderVariableD3D11Base(ParentResLayout, ResourceAttribs)
126 virtual void Set(
IDeviceObject *pObject)
override final{ BindResource(pObject, 0,
nullptr); }
128 virtual void SetArray(
IDeviceObject*
const* ppObjects, Uint32 FirstElement, Uint32 NumElements)
override final 130 for(Uint32 elem=0; elem < NumElements; ++elem)
131 BindResource(ppObjects[elem], FirstElement+elem,
nullptr);
134 __forceinline
bool IsBound(Uint32 ArrayIndex);
137 struct BuffUAVBindInfo : ShaderVariableD3D11Base
139 BuffUAVBindInfo(
const D3DShaderResourceAttribs& ResourceAttribs,
141 ShaderVariableD3D11Base(ParentResLayout, ResourceAttribs)
146 virtual void Set(
IDeviceObject *pObject)
override final{ BindResource(pObject, 0,
nullptr); }
148 virtual void SetArray(
IDeviceObject*
const* ppObjects, Uint32 FirstElement, Uint32 NumElements)
override final 150 for(Uint32 elem=0; elem < NumElements; ++elem)
151 BindResource(ppObjects[elem], FirstElement+elem,
nullptr);
154 __forceinline
bool IsBound(Uint32 ArrayIndex);
157 struct BuffSRVBindInfo : ShaderVariableD3D11Base
159 BuffSRVBindInfo(
const D3DShaderResourceAttribs& ResourceAttribs,
161 ShaderVariableD3D11Base(ParentResLayout, ResourceAttribs)
166 virtual void Set(
IDeviceObject *pObject)
override final{ BindResource(pObject, 0,
nullptr); }
168 virtual void SetArray(
IDeviceObject*
const* ppObjects, Uint32 FirstElement, Uint32 NumElements)
override final 170 for(Uint32 elem=0; elem < NumElements; ++elem)
171 BindResource(ppObjects[elem], FirstElement+elem,
nullptr);
174 __forceinline
bool IsBound(Uint32 ArrayIndex);
181 #ifdef VERIFY_SHADER_BINDINGS 182 void dbgVerifyBindings()
const;
186 __forceinline
SHADER_TYPE GetShaderType()
const{
return m_pResources->GetShaderType();}
188 IObject& GetOwner(){
return m_Owner;}
191 void InitVariablesHashMap();
193 const Char* GetShaderName()
const;
199 std::unique_ptr<void, STDDeleterRawMem<void> > m_ResourceBuffer;
202 Uint16 m_TexAndSamplersOffset = 0;
203 Uint16 m_TexUAVsOffset = 0;
204 Uint16 m_BuffUAVsOffset = 0;
205 Uint16 m_BuffSRVsOffset = 0;
208 Uint8 m_NumTexSRVs = 0;
209 Uint8 m_NumTexUAVs = 0;
210 Uint8 m_NumBufUAVs = 0;
211 Uint8 m_NumBufSRVs = 0;
213 ConstBuffBindInfo& GetCB(Uint32 cb)
215 VERIFY_EXPR(cb<m_NumCBs);
216 return reinterpret_cast<ConstBuffBindInfo*
>(m_ResourceBuffer.get())[cb];
218 const ConstBuffBindInfo& GetCB(Uint32 cb)
const 220 VERIFY_EXPR(cb<m_NumCBs);
221 return reinterpret_cast<ConstBuffBindInfo*
>(m_ResourceBuffer.get())[cb];
224 TexAndSamplerBindInfo& GetTexSRV(Uint32 t)
226 VERIFY_EXPR(t<m_NumTexSRVs);
227 return reinterpret_cast<TexAndSamplerBindInfo*
>(
reinterpret_cast<Uint8*
>(m_ResourceBuffer.get()) + m_TexAndSamplersOffset )[t];
229 const TexAndSamplerBindInfo& GetTexSRV(Uint32 t)
const 231 VERIFY_EXPR(t<m_NumTexSRVs);
232 return reinterpret_cast<TexAndSamplerBindInfo*
>(
reinterpret_cast<Uint8*
>(m_ResourceBuffer.get()) + m_TexAndSamplersOffset )[t];
235 TexUAVBindInfo& GetTexUAV(Uint32 u)
237 VERIFY_EXPR(u < m_NumTexUAVs);
238 return reinterpret_cast<TexUAVBindInfo*
>(
reinterpret_cast<Uint8*
>(m_ResourceBuffer.get()) + m_TexUAVsOffset)[u];
240 const TexUAVBindInfo& GetTexUAV(Uint32 u)
const 242 VERIFY_EXPR(u < m_NumTexUAVs);
243 return reinterpret_cast<TexUAVBindInfo*
>(
reinterpret_cast<Uint8*
>(m_ResourceBuffer.get()) + m_TexUAVsOffset)[u];
246 BuffUAVBindInfo& GetBufUAV(Uint32 u)
248 VERIFY_EXPR(u < m_NumBufUAVs);
249 return reinterpret_cast<BuffUAVBindInfo*
>(
reinterpret_cast<Uint8*
>(m_ResourceBuffer.get()) + m_BuffUAVsOffset)[u];
251 const BuffUAVBindInfo& GetBufUAV(Uint32 u)
const 253 VERIFY_EXPR(u < m_NumBufUAVs);
254 return reinterpret_cast<BuffUAVBindInfo*
>(
reinterpret_cast<Uint8*
>(m_ResourceBuffer.get()) + m_BuffUAVsOffset)[u];
257 BuffSRVBindInfo& GetBufSRV(Uint32 s)
259 VERIFY_EXPR(s < m_NumBufSRVs);
260 return reinterpret_cast<BuffSRVBindInfo*
>(
reinterpret_cast<Uint8*
>(m_ResourceBuffer.get()) + m_BuffSRVsOffset)[s];
262 const BuffSRVBindInfo& GetBufSRV(Uint32 s)
const 264 VERIFY_EXPR(s < m_NumBufSRVs);
265 return reinterpret_cast<BuffSRVBindInfo*
>(
reinterpret_cast<Uint8*
>(m_ResourceBuffer.get()) + m_BuffSRVsOffset)[s];
268 template<
typename THandleCB,
269 typename THandleTexSRV,
270 typename THandleTexUAV,
271 typename THandleBufSRV,
272 typename THandleBufUAV>
273 void HandleResources(THandleCB HandleCB,
274 THandleTexSRV HandleTexSRV,
275 THandleTexUAV HandleTexUAV,
276 THandleBufSRV HandleBufSRV,
277 THandleBufUAV HandleBufUAV)
279 for (Uint32 cb = 0; cb < m_NumCBs; ++cb)
281 for (Uint32 t = 0; t < m_NumTexSRVs; ++t)
282 HandleTexSRV(GetTexSRV(t));
283 for (Uint32 u = 0; u < m_NumTexUAVs; ++u)
284 HandleTexUAV(GetTexUAV(u));
285 for (Uint32 s = 0; s < m_NumBufSRVs; ++s)
286 HandleBufSRV(GetBufSRV(s));
287 for (Uint32 u = 0; u < m_NumBufUAVs; ++u)
288 HandleBufUAV(GetBufUAV(u));
291 #if USE_VARIABLE_HASH_MAP 294 typedef std::pair<HashMapStringKey, IShaderVariable*> VariableHashData;
295 std::unordered_map<HashMapStringKey, IShaderVariable*, std::hash<HashMapStringKey>, std::equal_to<HashMapStringKey>, STDAllocatorRawMem<VariableHashData> > m_VariableHash;
298 std::shared_ptr<const ShaderResourcesD3D11> m_pResources;
Base interface for all objects created by the render device Diligent::IRenderDevice.
Definition: DeviceObject.h:40
Shader resource variable.
Definition: Shader.h:265
The class implements a cache that holds resources bound to a specific shader stage.
Definition: ShaderResourceCacheD3D11.h:46
SHADER_TYPE
Describes the shader type.
Definition: Shader.h:46
Namespace for the OpenGL implementation of the graphics engine.
Definition: BufferD3D11Impl.h:34
Resouce mapping.
Definition: ResourceMapping.h:80
SHADER_VARIABLE_TYPE
Describes shader variable type that is used by ShaderVariableDesc.
Definition: Shader.h:100
Diligent::ShaderResourceLayoutD3D11 class http://diligentgraphics.com/diligent-engine/architecture/d3...
Definition: ShaderResourceLayoutD3D11.h:49