Added buffer memory barriers
This commit is contained in:
parent
5bb9046b49
commit
25d5df21ce
4 changed files with 40 additions and 3 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue