Commit c054008f by Mohan Maiya Committed by Commit Bot

Vulkan: Check buffer usage before unmapping

Buffers with dynamic usage will have frequent CPU updates. Don't CPU unmap such buffers after every update. Commits b5af8bde and 58c35d42 took care of performing an unmap when we release the buffer either to the renderer or mBufferFreeList. Bug: angleproject:5689 Change-Id: Ib6b8f6a7d0cb36583140e67bf164e074af098b8b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2741688Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
parent 14152cf4
...@@ -111,6 +111,12 @@ ANGLE_INLINE bool SubDataSizeMeetsThreshold(size_t subDataSize, size_t bufferSiz ...@@ -111,6 +111,12 @@ ANGLE_INLINE bool SubDataSizeMeetsThreshold(size_t subDataSize, size_t bufferSiz
// to acquire a new BufferHelper from the pool. // to acquire a new BufferHelper from the pool.
return subDataSize > (bufferSize / 2); return subDataSize > (bufferSize / 2);
} }
ANGLE_INLINE bool IsUsageDynamic(gl::BufferUsage usage)
{
return (usage == gl::BufferUsage::DynamicDraw || usage == gl::BufferUsage::DynamicCopy ||
usage == gl::BufferUsage::DynamicRead);
}
} // namespace } // namespace
// ConversionBuffer implementation. // ConversionBuffer implementation.
...@@ -632,7 +638,14 @@ angle::Result BufferVk::directUpdate(ContextVk *contextVk, ...@@ -632,7 +638,14 @@ angle::Result BufferVk::directUpdate(ContextVk *contextVk,
ASSERT(mapPointer); ASSERT(mapPointer);
memcpy(mapPointer, data, size); memcpy(mapPointer, data, size);
mBuffer->unmap(contextVk->getRenderer());
// If the buffer has dynamic usage then the intent is frequent client side updates to the
// buffer. Don't CPU unmap the buffer, we will take care of unmapping when releasing the buffer
// to either the renderer or mBufferFreeList.
if (!IsUsageDynamic(mState.getUsage()))
{
mBuffer->unmap(contextVk->getRenderer());
}
ASSERT(mBuffer->isCoherent()); ASSERT(mBuffer->isCoherent());
return angle::Result::Continue; return angle::Result::Continue;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment