зеркало из https://github.com/AvaloniaUI/angle.git
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: Shahbaz Youssefi <syoussefi@chromium.org>
This commit is contained in:
Родитель
c3bef3e7b0
Коммит
c2116cd3af
|
@ -225,8 +225,9 @@ angle::Result BufferVk::setDataImpl(ContextVk *contextVk,
|
|||
bufferBarrier.offset = offset;
|
||||
bufferBarrier.size = static_cast<VkDeviceSize>(size);
|
||||
|
||||
commandBuffer->singleBufferBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, bufferBarrier);
|
||||
commandBuffer->pipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 0, nullptr, 1,
|
||||
&bufferBarrier, 0, nullptr);
|
||||
|
||||
VkBufferCopy copyRegion = {0, offset, size};
|
||||
commandBuffer->copyBuffer(stagingBuffer.getBuffer(), mBuffer.getBuffer(), 1, ©Region);
|
||||
|
@ -249,8 +250,9 @@ angle::Result BufferVk::setDataImpl(ContextVk *contextVk,
|
|||
bufferBarrier.offset = offset;
|
||||
bufferBarrier.size = static_cast<VkDeviceSize>(size);
|
||||
|
||||
commandBuffer->singleBufferBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, bufferBarrier);
|
||||
commandBuffer->pipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||
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.
|
||||
renderer->releaseObject(renderer->getCurrentQueueSerial(), &stagingBuffer);
|
||||
|
|
|
@ -843,8 +843,9 @@ angle::Result TextureVk::generateMipmapWithBlit(ContextVk *contextVk)
|
|||
barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
|
||||
|
||||
// We can do it for all layers at once.
|
||||
commandBuffer->singleImageBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT, 0, barrier);
|
||||
commandBuffer->pipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1,
|
||||
&barrier);
|
||||
|
||||
VkImageBlit blit = {};
|
||||
blit.srcOffsets[0] = {0, 0, 0};
|
||||
|
@ -875,8 +876,8 @@ angle::Result TextureVk::generateMipmapWithBlit(ContextVk *contextVk)
|
|||
barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
|
||||
|
||||
// We can do it for all layers at once.
|
||||
commandBuffer->singleImageBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT, 0, barrier);
|
||||
commandBuffer->pipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
0, 0, nullptr, 0, nullptr, 1, &barrier);
|
||||
|
||||
// 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.
|
||||
|
|
|
@ -822,7 +822,8 @@ void ImageHelper::changeLayoutWithStages(VkImageAspectFlags aspectMask,
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -375,24 +375,20 @@ angle::Result CommandBuffer::reset(Context *context)
|
|||
return angle::Result::Continue();
|
||||
}
|
||||
|
||||
void CommandBuffer::singleImageBarrier(VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
VkDependencyFlags dependencyFlags,
|
||||
const VkImageMemoryBarrier &imageMemoryBarrier)
|
||||
void CommandBuffer::pipelineBarrier(VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
VkDependencyFlags dependencyFlags,
|
||||
uint32_t memoryBarrierCount,
|
||||
const VkMemoryBarrier *memoryBarriers,
|
||||
uint32_t bufferMemoryBarrierCount,
|
||||
const VkBufferMemoryBarrier *bufferMemoryBarriers,
|
||||
uint32_t imageMemoryBarrierCount,
|
||||
const VkImageMemoryBarrier *imageMemoryBarriers)
|
||||
{
|
||||
ASSERT(valid());
|
||||
vkCmdPipelineBarrier(mHandle, srcStageMask, dstStageMask, dependencyFlags, 0, nullptr, 0,
|
||||
nullptr, 1, &imageMemoryBarrier);
|
||||
}
|
||||
|
||||
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);
|
||||
vkCmdPipelineBarrier(mHandle, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount,
|
||||
memoryBarriers, bufferMemoryBarrierCount, bufferMemoryBarriers,
|
||||
imageMemoryBarrierCount, imageMemoryBarriers);
|
||||
}
|
||||
|
||||
void CommandBuffer::destroy(VkDevice device)
|
||||
|
|
|
@ -322,15 +322,15 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer>
|
|||
angle::Result end(Context *context);
|
||||
angle::Result reset(Context *context);
|
||||
|
||||
void singleImageBarrier(VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
VkDependencyFlags dependencyFlags,
|
||||
const VkImageMemoryBarrier &imageMemoryBarrier);
|
||||
|
||||
void singleBufferBarrier(VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
VkDependencyFlags dependencyFlags,
|
||||
const VkBufferMemoryBarrier &bufferBarrier);
|
||||
void pipelineBarrier(VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
VkDependencyFlags dependencyFlags,
|
||||
uint32_t memoryBarrierCount,
|
||||
const VkMemoryBarrier *memoryBarriers,
|
||||
uint32_t bufferMemoryBarrierCount,
|
||||
const VkBufferMemoryBarrier *bufferMemoryBarriers,
|
||||
uint32_t imageMemoryBarrierCount,
|
||||
const VkImageMemoryBarrier *imageMemoryBarriers);
|
||||
|
||||
void clearColorImage(const Image &image,
|
||||
VkImageLayout imageLayout,
|
||||
|
|
Загрузка…
Ссылка в новой задаче