diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2021-01-31 02:55:52 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2021-01-31 02:55:52 +0000 |
| commit | de85b057ac277334eb47850dc30f58879ecc3c32 (patch) | |
| tree | 5e4f92d0156ff15d9bb1440befb917e4026a8cc1 /Graphics/GraphicsEngineVulkan | |
| parent | Pipeline resource signature Vk: removed texel buffers with dynamic offsets as... (diff) | |
| download | DiligentCore-de85b057ac277334eb47850dc30f58879ecc3c32.tar.gz DiligentCore-de85b057ac277334eb47850dc30f58879ecc3c32.zip | |
Pipeline resource singature Vk: few updates to buffer bindings
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp b/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp index 413caa4a..35acdd17 100644 --- a/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp +++ b/Graphics/GraphicsEngineVulkan/src/PipelineResourceSignatureVkImpl.cpp @@ -1197,11 +1197,9 @@ struct BindResourceHelper void BindResource(IDeviceObject* pObj) const; private: - void CacheUniformBuffer(IDeviceObject* pBuffer, - Uint16& DynamicBuffersCounter) const; + void CacheUniformBuffer(IDeviceObject* pBuffer) const; - void CacheStorageBuffer(IDeviceObject* pBufferView, - Uint16& DynamicBuffersCounter) const; + void CacheStorageBuffer(IDeviceObject* pBufferView) const; void CacheTexelBuffer(IDeviceObject* pBufferView) const; @@ -1252,14 +1250,14 @@ void BindResourceHelper::BindResource(IDeviceObject* pObj) const { case DescriptorType::UniformBuffer: case DescriptorType::UniformBufferDynamic: - CacheUniformBuffer(pObj, ResourceCache.GetDynamicBuffersCounter()); + CacheUniformBuffer(pObj); break; case DescriptorType::StorageBuffer: case DescriptorType::StorageBuffer_ReadOnly: case DescriptorType::StorageBufferDynamic: case DescriptorType::StorageBufferDynamic_ReadOnly: - CacheStorageBuffer(pObj, ResourceCache.GetDynamicBuffersCounter()); + CacheStorageBuffer(pObj); break; case DescriptorType::UniformTexelBuffer: @@ -1335,8 +1333,7 @@ bool BindResourceHelper::UpdateCachedResource(RefCntAutoPtr<ObjectType>&& pObjec } } -void BindResourceHelper::CacheUniformBuffer(IDeviceObject* pBuffer, - Uint16& DynamicBuffersCounter) const +void BindResourceHelper::CacheUniformBuffer(IDeviceObject* pBuffer) const { // clang-format off VERIFY(DstRes.Type == DescriptorType::UniformBuffer || @@ -1349,14 +1346,18 @@ void BindResourceHelper::CacheUniformBuffer(IDeviceObject* pBuffer, pBuffer, pBufferVk.RawPtr(), DstRes.pObject.RawPtr()); #endif - auto UpdateDynamicBuffersCounter = [&DynamicBuffersCounter](const BufferVkImpl* pOldBuffer, const BufferVkImpl* pNewBuffer) { + auto UpdateDynamicBuffersCounter = [this](const BufferVkImpl* pOldBuffer, const BufferVkImpl* pNewBuffer) { + auto& DynamicBuffersCounter = ResourceCache.GetDynamicBuffersCounter(); if (pOldBuffer != nullptr && pOldBuffer->GetDesc().Usage == USAGE_DYNAMIC) { VERIFY(DynamicBuffersCounter > 0, "Dynamic buffers counter must be greater than zero when there is at least one dynamic buffer bound in the resource cache"); --DynamicBuffersCounter; } if (pNewBuffer != nullptr && pNewBuffer->GetDesc().Usage == USAGE_DYNAMIC) + { ++DynamicBuffersCounter; + VERIFY(DynamicBuffersCounter <= Signature.GetDynamicOffsetCount(), "Dynamic buffers counter exceeded the numer of dynamic offsets in the signature"); + } }; if (UpdateCachedResource(std::move(pBufferVk), UpdateDynamicBuffersCounter)) { @@ -1373,8 +1374,7 @@ void BindResourceHelper::CacheUniformBuffer(IDeviceObject* pBuffer, } } -void BindResourceHelper::CacheStorageBuffer(IDeviceObject* pBufferView, - Uint16& DynamicBuffersCounter) const +void BindResourceHelper::CacheStorageBuffer(IDeviceObject* pBufferView) const { // clang-format off VERIFY(DstRes.Type == DescriptorType::StorageBuffer || @@ -1407,14 +1407,18 @@ void BindResourceHelper::CacheStorageBuffer(IDeviceObject* pBufferView, } #endif - auto UpdateDynamicBuffersCounter = [&DynamicBuffersCounter](const BufferViewVkImpl* pOldBufferView, const BufferViewVkImpl* pNewBufferView) { + auto UpdateDynamicBuffersCounter = [this](const BufferViewVkImpl* pOldBufferView, const BufferViewVkImpl* pNewBufferView) { + auto& DynamicBuffersCounter = ResourceCache.GetDynamicBuffersCounter(); if (pOldBufferView != nullptr && pOldBufferView->GetBuffer<const BufferVkImpl>()->GetDesc().Usage == USAGE_DYNAMIC) { VERIFY(DynamicBuffersCounter > 0, "Dynamic buffers counter must be greater than zero when there is at least one dynamic buffer bound in the resource cache"); --DynamicBuffersCounter; } if (pNewBufferView != nullptr && pNewBufferView->GetBuffer<const BufferVkImpl>()->GetDesc().Usage == USAGE_DYNAMIC) + { ++DynamicBuffersCounter; + VERIFY(DynamicBuffersCounter <= Signature.GetDynamicOffsetCount(), "Dynamic buffers counter exceeded the numer of dynamic offsets in the signature"); + } }; if (UpdateCachedResource(std::move(pBufferViewVk), UpdateDynamicBuffersCounter)) @@ -1681,11 +1685,11 @@ void PipelineResourceSignatureVkImpl::BindResource(IDeviceObject* pObj, Uint32 ResIndex, ShaderResourceCacheVk& ResourceCache) const { - auto& ResDesc = GetResourceDesc(ResIndex); - auto& Attribs = GetResourceAttribs(ResIndex); - const auto CacheType = ResourceCache.GetContentType(); - auto& DstDescrSet = ResourceCache.GetDescriptorSet(Attribs.DescrSet); - auto& DstRes = DstDescrSet.GetResource(Attribs.CacheOffset(CacheType) + ArrayIndex); + const auto& ResDesc = GetResourceDesc(ResIndex); + const auto& Attribs = GetResourceAttribs(ResIndex); + const auto CacheType = ResourceCache.GetContentType(); + auto& DstDescrSet = ResourceCache.GetDescriptorSet(Attribs.DescrSet); + auto& DstRes = DstDescrSet.GetResource(Attribs.CacheOffset(CacheType) + ArrayIndex); VERIFY_EXPR(ArrayIndex < ResDesc.ArraySize); VERIFY(DstRes.Type == Attribs.GetDescriptorType(), "Inconsistent types"); |
