Skip to content
Snippets Groups Projects
Commit d4445a10 authored by Lars Hoerttrich's avatar Lars Hoerttrich
Browse files

[#91] combined and renamed functions for clarity, added documentation

parent 1f75bb54
No related branches found
No related tags found
1 merge request!79Draft: Resolve "Compute: First Network"
Pipeline #26795 passed
......@@ -136,12 +136,21 @@ namespace vkcv
const BufferHandle& handle,
vk::CommandBuffer cmdBuffer);
void readBufferMemoryBarrier(
/**
* Reads buffer data from GPU for a given buffer handle
* and writes it to data pointer. Uses cmdBuffer to
* create neccessary memory barriers.
*
* @param handle Buffer handle to read
* @param cmdBuffer commandbuffer to execute memory barriers
* @param data data pointer to which result will be written
*
*/
void readBuffer(
const BufferHandle& handle,
vk::CommandBuffer cmdBuffer,
void* data);
void readBuffer(const BufferHandle& handle, void *data);
};
}
......@@ -303,7 +303,7 @@ namespace vkcv
void prepareImageForStorage(const CommandStreamHandle& cmdStream, const ImageHandle& image);
void recordImageMemoryBarrier(const CommandStreamHandle& cmdStream, const ImageHandle& image);
void recordBufferMemoryBarrier(const CommandStreamHandle& cmdStream, const BufferHandle& buffer);
void readBufferMemoryBarrier(const CommandStreamHandle cmdStream, const BufferHandle buffer, void *data);
void recordReadBuffer(const CommandStreamHandle cmdStream, const BufferHandle buffer, void *data);
void resolveMSAAImage(const CommandStreamHandle& cmdStream, const ImageHandle& src, const ImageHandle& dst);
[[nodiscard]]
......
......@@ -63,7 +63,7 @@ int main(int argc, const char** argv) {
std::cout << "Error. Could not create compute pipeline. Exiting." << std::endl;
return EXIT_FAILURE;
}
for(int i =0;i<3;i++){
auto cmdStream = core.createCommandStream(vkcv::QueueType::Compute);
uint32_t computeDispatchCount[3] = {64,1,1 };
......@@ -78,12 +78,13 @@ int main(int argc, const char** argv) {
int output[64] = { 0 };
std::fill_n(output, 64, -1);
core.readBufferMemoryBarrier(cmdStream, inputBuffer.getHandle(), &output);
core.recordReadBuffer(cmdStream, inputBuffer.getHandle(), &output);
core.submitCommandStream(cmdStream);
std::cout << "[";
for (int i = 0; i < 64; i++) {
std::cout << output[i] << ", ";
}
std::cout << "]" << std::endl;
}
return 0;
}
......@@ -330,33 +330,15 @@ namespace vkcv {
nullptr);
}
void BufferManager::readBuffer(const BufferHandle& handle, void *data) {
const uint64_t id = handle.getId();
size_t size = getBufferSize(handle);
if (size == 0) {
size = SIZE_MAX;
}
if (id >= m_buffers.size()) {
return;
}
auto& buffer = m_buffers[id];
const vma::Allocator& allocator = m_core->getContext().getAllocator();
const size_t max_size = std::min(size, buffer.m_size);
void* mapped = allocator.mapMemory(buffer.m_allocation);
memcpy(reinterpret_cast<int*>(data), reinterpret_cast<char*>(mapped) , max_size);
allocator.unmapMemory(buffer.m_allocation);
}
void BufferManager ::readBufferMemoryBarrier(const BufferHandle& handle, vk::CommandBuffer cmdBuffer, void *data) {
void BufferManager ::readBuffer(const BufferHandle& handle, vk::CommandBuffer cmdBuffer, void *data) {
const uint64_t id = handle.getId();
size_t size = getBufferSize(handle);
if (size == 0) {
size = SIZE_MAX;
}
if (id >= m_buffers.size()) {
vkcv_log(vkcv::LogLevel::ERROR, "Invalid buffer handle");
......@@ -382,7 +364,14 @@ namespace vkcv {
memoryBarrier,
nullptr);
readBuffer(handle, data);
const vma::Allocator& allocator = m_core->getContext().getAllocator();
const size_t max_size = std::min(size, buffer.m_size);
void* mapped = allocator.mapMemory(buffer.m_allocation);
memcpy(reinterpret_cast<int*>(data), reinterpret_cast<char*>(mapped), max_size);
allocator.unmapMemory(buffer.m_allocation);
vk::BufferMemoryBarrier memoryBarrier2(
vk::AccessFlagBits::eTransferWrite,
......
......@@ -698,9 +698,9 @@ namespace vkcv
}, nullptr);
}
void Core::readBufferMemoryBarrier(const CommandStreamHandle cmdStream, const BufferHandle buffer, void *data) {
void Core::recordReadBuffer(const CommandStreamHandle cmdStream, const BufferHandle buffer, void *data) {
recordCommandsToStream(cmdStream, [buffer, this, data](const vk::CommandBuffer cmdBuffer) {
m_BufferManager->readBufferMemoryBarrier(buffer, cmdBuffer, data);
m_BufferManager->readBuffer(buffer, cmdBuffer, data);
}, nullptr);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment