Commit 9d275db4 by Shahbaz Youssefi Committed by Commit Bot

Vulkan: Add vkCmdFillBuffer support

Implemented as part of an experiment. Allows easier buffer-related testing by providing a quick way of filling the buffer with dummy data. Bug: angleproject:3205 Change-Id: Ice8cfd0c2566c91a5fb10aaea57985d671d0e7b7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1665351 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarTobin Ehlis <tobine@google.com>
parent 53c4495a
......@@ -204,6 +204,13 @@ void SecondaryCommandBuffer::executeCommands(VkCommandBuffer cmdBuffer)
vkCmdEndQuery(cmdBuffer, params->queryPool, params->query);
break;
}
case CommandID::FillBuffer:
{
const FillBufferParams *params = getParamPtr<FillBufferParams>(currentCommand);
vkCmdFillBuffer(cmdBuffer, params->dstBuffer, params->dstOffset, params->size,
params->data);
break;
}
case CommandID::ImageBarrier:
{
const ImageBarrierParams *params =
......@@ -388,6 +395,9 @@ std::string SecondaryCommandBuffer::dumpCommands(const char *separator) const
case CommandID::EndQuery:
result += "EndQuery";
break;
case CommandID::FillBuffer:
result += "FillBuffer";
break;
case CommandID::ImageBarrier:
result += "ImageBarrier";
break;
......
......@@ -50,6 +50,7 @@ enum class CommandID : uint16_t
DrawIndexedInstanced,
DrawInstanced,
EndQuery,
FillBuffer,
ImageBarrier,
MemoryBarrier,
PipelineBarrier,
......@@ -220,6 +221,15 @@ struct DispatchParams
};
VERIFY_4_BYTE_ALIGNMENT(DispatchParams)
struct FillBufferParams
{
VkBuffer dstBuffer;
VkDeviceSize dstOffset;
VkDeviceSize size;
uint32_t data;
};
VERIFY_4_BYTE_ALIGNMENT(FillBufferParams)
struct MemoryBarrierParams
{
VkPipelineStageFlags srcStageMask;
......@@ -429,6 +439,11 @@ class SecondaryCommandBuffer final : angle::NonCopyable
void endQuery(VkQueryPool queryPool, uint32_t query);
void fillBuffer(const Buffer &dstBuffer,
VkDeviceSize dstOffset,
VkDeviceSize size,
uint32_t data);
void imageBarrier(VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask,
const VkImageMemoryBarrier *imageMemoryBarrier);
......@@ -865,6 +880,18 @@ ANGLE_INLINE void SecondaryCommandBuffer::endQuery(VkQueryPool queryPool, uint32
paramStruct->query = query;
}
ANGLE_INLINE void SecondaryCommandBuffer::fillBuffer(const Buffer &dstBuffer,
VkDeviceSize dstOffset,
VkDeviceSize size,
uint32_t data)
{
FillBufferParams *paramStruct = initCommand<FillBufferParams>(CommandID::FillBuffer);
paramStruct->dstBuffer = dstBuffer.getHandle();
paramStruct->dstOffset = dstOffset;
paramStruct->size = size;
paramStruct->data = data;
}
ANGLE_INLINE void SecondaryCommandBuffer::imageBarrier(
VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask,
......
......@@ -287,6 +287,11 @@ class CommandBuffer : public WrappedObject<CommandBuffer, VkCommandBuffer>
void endRenderPass();
void executeCommands(uint32_t commandBufferCount, const CommandBuffer *commandBuffers);
void fillBuffer(const Buffer &dstBuffer,
VkDeviceSize dstOffset,
VkDeviceSize size,
uint32_t data);
void imageBarrier(VkPipelineStageFlags srcStageMask,
VkPipelineStageFlags dstStageMask,
const VkImageMemoryBarrier *imageMemoryBarrier);
......@@ -794,6 +799,15 @@ ANGLE_INLINE void CommandBuffer::executeCommands(uint32_t commandBufferCount,
vkCmdExecuteCommands(mHandle, commandBufferCount, commandBuffers[0].ptr());
}
ANGLE_INLINE void CommandBuffer::fillBuffer(const Buffer &dstBuffer,
VkDeviceSize dstOffset,
VkDeviceSize size,
uint32_t data)
{
ASSERT(valid());
vkCmdFillBuffer(mHandle, dstBuffer.getHandle(), dstOffset, size, data);
}
ANGLE_INLINE void CommandBuffer::pushConstants(const PipelineLayout &layout,
VkShaderStageFlags flag,
uint32_t offset,
......
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