Commit e3981cf7 by Tobin Ehlis Committed by Commit Bot

Vulkan:Add SecondaryCommandBuffer class

SecondaryCommandBuffer is a CPU-side command buffer construct intended to delay allocation/construction of GPU-side command buffers until absolutely necessary. Initially ANGLE was batching commands into Vulkan secondary command buffers and then submitting those command buffers when rendering was required. On at least some devices we saw two areas of overhead that SecondaryCommandBuffers are intended to reduce: 1. Commands in secondary cmd buffers taking longer than equivalent commands in a single primary cmd buffer. 2. Allocation/free/reset overhead of the secondary command buffers was a hotspot for some workloads. Bug: angleproject:3136 Change-Id: Ife8ffe2968eee423d89ff433d62596c432156661 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1492016 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@google.com>
parent b82d2014
...@@ -248,8 +248,7 @@ angle::Result BufferVk::copyToBuffer(ContextVk *contextVk, ...@@ -248,8 +248,7 @@ angle::Result BufferVk::copyToBuffer(ContextVk *contextVk,
{ {
vk::CommandBuffer *commandBuffer; vk::CommandBuffer *commandBuffer;
ANGLE_TRY(mBuffer.recordCommands(contextVk, &commandBuffer)); ANGLE_TRY(mBuffer.recordCommands(contextVk, &commandBuffer));
commandBuffer->copyBuffer(mBuffer.getBuffer().getHandle(), destBuffer->getBuffer().getHandle(), commandBuffer->copyBuffer(mBuffer.getBuffer(), destBuffer->getBuffer(), copyCount, copies);
copyCount, copies);
destBuffer->onRead(&mBuffer, VK_ACCESS_TRANSFER_READ_BIT); destBuffer->onRead(&mBuffer, VK_ACCESS_TRANSFER_READ_BIT);
mBuffer.onWrite(VK_ACCESS_TRANSFER_WRITE_BIT); mBuffer.onWrite(VK_ACCESS_TRANSFER_WRITE_BIT);
......
...@@ -202,11 +202,6 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer> ...@@ -202,11 +202,6 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer>
uint32_t regionCount, uint32_t regionCount,
const VkBufferCopy *regions); const VkBufferCopy *regions);
void copyBuffer(const VkBuffer &srcBuffer,
const VkBuffer &destBuffer,
uint32_t regionCount,
const VkBufferCopy *regions);
void copyBufferToImage(VkBuffer srcBuffer, void copyBufferToImage(VkBuffer srcBuffer,
const Image &dstImage, const Image &dstImage,
VkImageLayout dstImageLayout, VkImageLayout dstImageLayout,
...@@ -603,15 +598,6 @@ ANGLE_INLINE void CommandBuffer::copyBuffer(const vk::Buffer &srcBuffer, ...@@ -603,15 +598,6 @@ ANGLE_INLINE void CommandBuffer::copyBuffer(const vk::Buffer &srcBuffer,
vkCmdCopyBuffer(mHandle, srcBuffer.getHandle(), destBuffer.getHandle(), regionCount, regions); vkCmdCopyBuffer(mHandle, srcBuffer.getHandle(), destBuffer.getHandle(), regionCount, regions);
} }
ANGLE_INLINE void CommandBuffer::copyBuffer(const VkBuffer &srcBuffer,
const VkBuffer &destBuffer,
uint32_t regionCount,
const VkBufferCopy *regions)
{
ASSERT(valid());
vkCmdCopyBuffer(mHandle, srcBuffer, destBuffer, regionCount, regions);
}
ANGLE_INLINE void CommandBuffer::copyBufferToImage(VkBuffer srcBuffer, ANGLE_INLINE void CommandBuffer::copyBufferToImage(VkBuffer srcBuffer,
const Image &dstImage, const Image &dstImage,
VkImageLayout dstImageLayout, VkImageLayout dstImageLayout,
......
...@@ -790,6 +790,8 @@ libangle_vulkan_sources = [ ...@@ -790,6 +790,8 @@ libangle_vulkan_sources = [
"src/libANGLE/renderer/vulkan/RenderTargetVk.h", "src/libANGLE/renderer/vulkan/RenderTargetVk.h",
"src/libANGLE/renderer/vulkan/SamplerVk.cpp", "src/libANGLE/renderer/vulkan/SamplerVk.cpp",
"src/libANGLE/renderer/vulkan/SamplerVk.h", "src/libANGLE/renderer/vulkan/SamplerVk.h",
"src/libANGLE/renderer/vulkan/SecondaryCommandBuffer.cpp",
"src/libANGLE/renderer/vulkan/SecondaryCommandBuffer.h",
"src/libANGLE/renderer/vulkan/ShaderVk.cpp", "src/libANGLE/renderer/vulkan/ShaderVk.cpp",
"src/libANGLE/renderer/vulkan/ShaderVk.h", "src/libANGLE/renderer/vulkan/ShaderVk.h",
"src/libANGLE/renderer/vulkan/SurfaceVk.cpp", "src/libANGLE/renderer/vulkan/SurfaceVk.cpp",
......
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