Commit c2116cd3 by Jamie Madill Committed by Commit Bot

Vulkan: Update pipeline barrier interface.

This makes the vk::CommandBuffer class closer to an auto-generated wrapper class. Bug: angleproject:2828 Change-Id: I91ba03914a60d5612707dd240fcda25b86cf2c46 Reviewed-on: https://chromium-review.googlesource.com/1255505 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org>
parent c3bef3e7
...@@ -225,8 +225,9 @@ angle::Result BufferVk::setDataImpl(ContextVk *contextVk, ...@@ -225,8 +225,9 @@ angle::Result BufferVk::setDataImpl(ContextVk *contextVk,
bufferBarrier.offset = offset; bufferBarrier.offset = offset;
bufferBarrier.size = static_cast<VkDeviceSize>(size); bufferBarrier.size = static_cast<VkDeviceSize>(size);
commandBuffer->singleBufferBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, commandBuffer->pipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, bufferBarrier); VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, 1,
&bufferBarrier, 0, nullptr);
VkBufferCopy copyRegion = {0, offset, size}; VkBufferCopy copyRegion = {0, offset, size};
commandBuffer->copyBuffer(stagingBuffer.getBuffer(), mBuffer.getBuffer(), 1, &copyRegion); commandBuffer->copyBuffer(stagingBuffer.getBuffer(), mBuffer.getBuffer(), 1, &copyRegion);
...@@ -249,8 +250,9 @@ angle::Result BufferVk::setDataImpl(ContextVk *contextVk, ...@@ -249,8 +250,9 @@ angle::Result BufferVk::setDataImpl(ContextVk *contextVk,
bufferBarrier.offset = offset; bufferBarrier.offset = offset;
bufferBarrier.size = static_cast<VkDeviceSize>(size); bufferBarrier.size = static_cast<VkDeviceSize>(size);
commandBuffer->singleBufferBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, commandBuffer->pipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, bufferBarrier); VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, 1,
&bufferBarrier, 0, nullptr);
// Immediately release staging buffer. We should probably be using a DynamicBuffer here. // Immediately release staging buffer. We should probably be using a DynamicBuffer here.
renderer->releaseObject(renderer->getCurrentQueueSerial(), &stagingBuffer); renderer->releaseObject(renderer->getCurrentQueueSerial(), &stagingBuffer);
......
...@@ -843,8 +843,9 @@ angle::Result TextureVk::generateMipmapWithBlit(ContextVk *contextVk) ...@@ -843,8 +843,9 @@ angle::Result TextureVk::generateMipmapWithBlit(ContextVk *contextVk)
barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
// We can do it for all layers at once. // We can do it for all layers at once.
commandBuffer->singleImageBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, commandBuffer->pipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_PIPELINE_STAGE_TRANSFER_BIT, 0, barrier); VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1,
&barrier);
VkImageBlit blit = {}; VkImageBlit blit = {};
blit.srcOffsets[0] = {0, 0, 0}; blit.srcOffsets[0] = {0, 0, 0};
...@@ -875,8 +876,8 @@ angle::Result TextureVk::generateMipmapWithBlit(ContextVk *contextVk) ...@@ -875,8 +876,8 @@ angle::Result TextureVk::generateMipmapWithBlit(ContextVk *contextVk)
barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
// We can do it for all layers at once. // We can do it for all layers at once.
commandBuffer->singleImageBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, commandBuffer->pipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_PIPELINE_STAGE_TRANSFER_BIT, 0, barrier); 0, 0, nullptr, 0, nullptr, 1, &barrier);
// This is just changing the internal state of the image helper so that the next call // This is just changing the internal state of the image helper so that the next call
// to changeLayoutWithStages will use this layout as the "oldLayout" argument. // to changeLayoutWithStages will use this layout as the "oldLayout" argument.
......
...@@ -822,7 +822,8 @@ void ImageHelper::changeLayoutWithStages(VkImageAspectFlags aspectMask, ...@@ -822,7 +822,8 @@ void ImageHelper::changeLayoutWithStages(VkImageAspectFlags aspectMask,
imageMemoryBarrier.dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; imageMemoryBarrier.dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
} }
commandBuffer->singleImageBarrier(srcStageMask, dstStageMask, 0, imageMemoryBarrier); commandBuffer->pipelineBarrier(srcStageMask, dstStageMask, 0, 0, nullptr, 0, nullptr, 1,
&imageMemoryBarrier);
mCurrentLayout = newLayout; mCurrentLayout = newLayout;
} }
......
...@@ -375,24 +375,20 @@ angle::Result CommandBuffer::reset(Context *context) ...@@ -375,24 +375,20 @@ angle::Result CommandBuffer::reset(Context *context)
return angle::Result::Continue(); return angle::Result::Continue();
} }
void CommandBuffer::singleImageBarrier(VkPipelineStageFlags srcStageMask, void CommandBuffer::pipelineBarrier(VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask, VkPipelineStageFlags dstStageMask,
VkDependencyFlags dependencyFlags, VkDependencyFlags dependencyFlags,
const VkImageMemoryBarrier &imageMemoryBarrier) uint32_t memoryBarrierCount,
const VkMemoryBarrier *memoryBarriers,
uint32_t bufferMemoryBarrierCount,
const VkBufferMemoryBarrier *bufferMemoryBarriers,
uint32_t imageMemoryBarrierCount,
const VkImageMemoryBarrier *imageMemoryBarriers)
{ {
ASSERT(valid()); ASSERT(valid());
vkCmdPipelineBarrier(mHandle, srcStageMask, dstStageMask, dependencyFlags, 0, nullptr, 0, vkCmdPipelineBarrier(mHandle, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount,
nullptr, 1, &imageMemoryBarrier); memoryBarriers, bufferMemoryBarrierCount, bufferMemoryBarriers,
} imageMemoryBarrierCount, imageMemoryBarriers);
void CommandBuffer::singleBufferBarrier(VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask,
VkDependencyFlags dependencyFlags,
const VkBufferMemoryBarrier &bufferBarrier)
{
ASSERT(valid());
vkCmdPipelineBarrier(mHandle, srcStageMask, dstStageMask, dependencyFlags, 0, nullptr, 1,
&bufferBarrier, 0, nullptr);
} }
void CommandBuffer::destroy(VkDevice device) void CommandBuffer::destroy(VkDevice device)
......
...@@ -322,15 +322,15 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer> ...@@ -322,15 +322,15 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer>
angle::Result end(Context *context); angle::Result end(Context *context);
angle::Result reset(Context *context); angle::Result reset(Context *context);
void singleImageBarrier(VkPipelineStageFlags srcStageMask, void pipelineBarrier(VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask, VkPipelineStageFlags dstStageMask,
VkDependencyFlags dependencyFlags, VkDependencyFlags dependencyFlags,
const VkImageMemoryBarrier &imageMemoryBarrier); uint32_t memoryBarrierCount,
const VkMemoryBarrier *memoryBarriers,
void singleBufferBarrier(VkPipelineStageFlags srcStageMask, uint32_t bufferMemoryBarrierCount,
VkPipelineStageFlags dstStageMask, const VkBufferMemoryBarrier *bufferMemoryBarriers,
VkDependencyFlags dependencyFlags, uint32_t imageMemoryBarrierCount,
const VkBufferMemoryBarrier &bufferBarrier); const VkImageMemoryBarrier *imageMemoryBarriers);
void clearColorImage(const Image &image, void clearColorImage(const Image &image,
VkImageLayout imageLayout, VkImageLayout imageLayout,
......
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