Vulkan: Make DynamicBuffer use BufferHelper
This is so that the resulting buffers can be written to by the GPU.
Additionally, the class is given the ability to create host-visible or
device-local buffers, making map()-on-init() optional.
This is in preparation for vertex/index transformations in compute.
Bug: angleproject:2958
Change-Id: Ib8f5829e33a1e49fa8f80c70dbde74f313ae49ec
Reviewed-on: https://chromium-review.googlesource.com/c/1351113
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
diff --git a/src/libANGLE/renderer/vulkan/ProgramVk.cpp b/src/libANGLE/renderer/vulkan/ProgramVk.cpp
index fc5276c..9493b40 100644
--- a/src/libANGLE/renderer/vulkan/ProgramVk.cpp
+++ b/src/libANGLE/renderer/vulkan/ProgramVk.cpp
@@ -186,7 +186,8 @@
// ProgramVk implementation.
ProgramVk::DefaultUniformBlock::DefaultUniformBlock()
: storage(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
- kUniformBlockDynamicBufferMinSize)
+ kUniformBlockDynamicBufferMinSize,
+ true)
{}
ProgramVk::DefaultUniformBlock::~DefaultUniformBlock() = default;
@@ -220,9 +221,7 @@
mDefaultShaderInfo.release(renderer);
mLineRasterShaderInfo.release(renderer);
- Serial currentSerial = renderer->getCurrentQueueSerial();
- renderer->releaseObject(currentSerial, &mEmptyUniformBlockStorage.memory);
- renderer->releaseObject(currentSerial, &mEmptyUniformBlockStorage.buffer);
+ mEmptyUniformBlockStorage.release(renderer);
mDescriptorSets.clear();
mUsedDescriptorSetRange.invalidate();
@@ -437,16 +436,10 @@
uniformBufferInfo.queueFamilyIndexCount = 0;
uniformBufferInfo.pQueueFamilyIndices = nullptr;
- ANGLE_VK_TRY(contextVk, mEmptyUniformBlockStorage.buffer.init(contextVk->getDevice(),
- uniformBufferInfo));
-
// Assume host visible/coherent memory available.
VkMemoryPropertyFlags flags =
(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
- VkMemoryPropertyFlags flagsOut = 0;
- ANGLE_TRY(AllocateBufferMemory(contextVk, flags, &flagsOut,
- &mEmptyUniformBlockStorage.buffer,
- &mEmptyUniformBlockStorage.memory));
+ ANGLE_TRY(mEmptyUniformBlockStorage.init(contextVk, uniformBufferInfo, flags));
}
}
@@ -837,11 +830,11 @@
if (!uniformBlock.uniformData.empty())
{
- bufferInfo.buffer = uniformBlock.storage.getCurrentBufferHandle();
+ bufferInfo.buffer = uniformBlock.storage.getCurrentBuffer()->getBuffer().getHandle();
}
else
{
- bufferInfo.buffer = mEmptyUniformBlockStorage.buffer.getHandle();
+ bufferInfo.buffer = mEmptyUniformBlockStorage.getBuffer().getHandle();
}
bufferInfo.offset = 0;