Added buffer memory barriers

This commit is contained in:
Alejandro Saucedo 2020-08-22 13:01:04 +01:00
parent 5bb9046b49
commit 25d5df21ce
4 changed files with 40 additions and 3 deletions

View file

@ -30,7 +30,7 @@ class Algorithm
~Algorithm();
// Record commands
void recordDispatch(uint32_t x, uint32_t y, uint32_t z);
void recordDispatch(uint32_t x = 1, uint32_t y = 1, uint32_t z = 1);
private:
// Shared resources

View file

@ -85,7 +85,19 @@ OpMult::record()
this->mAlgorithm->recordDispatch(1, 1, 1);
this->mTensorOutput->recordBufferMemoryBarrier(
vk::AccessFlagBits::eShaderWrite,
vk::AccessFlagBits::eTransferRead,
vk::PipelineStageFlagBits::eComputeShader,
vk::PipelineStageFlagBits::eTransfer);
this->mTensorOutputStaging->recordCopyFrom(this->mTensorOutput);
this->mTensorOutput->recordBufferMemoryBarrier(
vk::AccessFlagBits::eTransferWrite,
vk::AccessFlagBits::eHostRead,
vk::PipelineStageFlagBits::eTransfer,
vk::PipelineStageFlagBits::eHost);
}
void

View file

@ -136,6 +136,31 @@ Tensor::recordCopyFrom(std::shared_ptr<Tensor> copyFromTensor)
this->mData = copyFromTensor->mData;
}
void Tensor::recordBufferMemoryBarrier(vk::AccessFlagBits srcAccessMask, vk::AccessFlagBits dstAccessMask, vk::PipelineStageFlagBits srcStageMask, vk::PipelineStageFlagBits dstStageMask) {
SPDLOG_DEBUG("Kompute Tensor recording buffer memory barrier");
vk::DeviceSize bufferSize = this->memorySize();
vk::BufferMemoryBarrier bufferMemoryBarrier;
bufferMemoryBarrier.buffer = *this->mBuffer;
bufferMemoryBarrier.size = bufferSize;
bufferMemoryBarrier.srcAccessMask = srcAccessMask;
bufferMemoryBarrier.dstAccessMask = dstAccessMask;
bufferMemoryBarrier.srcQueueFamilyIndex =
VK_QUEUE_FAMILY_IGNORED;
bufferMemoryBarrier.dstQueueFamilyIndex =
VK_QUEUE_FAMILY_IGNORED;
this->mCommandBuffer->pipelineBarrier(
srcStageMask,
dstStageMask,
vk::DependencyFlags(),
nullptr,
bufferMemoryBarrier,
nullptr);
}
// TODO: Explore if this function should be here or expose buffer
vk::DescriptorBufferInfo
Tensor::constructDescriptorBufferInfo()

View file

@ -51,8 +51,8 @@ class Tensor
// Record functions
void recordCopyFrom(std::shared_ptr<Tensor> copyFromTensor);
// TODO: Add memory buffer barrier capabilities
// void recordBufferMemoryBarrier();
// TODO: Explore simplifying by infering pipeline stage flag bits from access flag bits (as seems to be superset)
void recordBufferMemoryBarrier(vk::AccessFlagBits srcAccessMask, vk::AccessFlagBits dstAccessMask, vk::PipelineStageFlagBits srcStageMask, vk::PipelineStageFlagBits dstStageMask);
// Util functions
vk::DescriptorBufferInfo constructDescriptorBufferInfo();