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
This commit is part of merge request !79. Comments created here will be created in the context of that merge request.
...@@ -136,12 +136,21 @@ namespace vkcv ...@@ -136,12 +136,21 @@ namespace vkcv
const BufferHandle& handle, const BufferHandle& handle,
vk::CommandBuffer cmdBuffer); 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, const BufferHandle& handle,
vk::CommandBuffer cmdBuffer, vk::CommandBuffer cmdBuffer,
void* data); void* data);
void readBuffer(const BufferHandle& handle, void *data);
}; };
} }
...@@ -303,7 +303,7 @@ namespace vkcv ...@@ -303,7 +303,7 @@ namespace vkcv
void prepareImageForStorage(const CommandStreamHandle& cmdStream, const ImageHandle& image); void prepareImageForStorage(const CommandStreamHandle& cmdStream, const ImageHandle& image);
void recordImageMemoryBarrier(const CommandStreamHandle& cmdStream, const ImageHandle& image); void recordImageMemoryBarrier(const CommandStreamHandle& cmdStream, const ImageHandle& image);
void recordBufferMemoryBarrier(const CommandStreamHandle& cmdStream, const BufferHandle& buffer); 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); void resolveMSAAImage(const CommandStreamHandle& cmdStream, const ImageHandle& src, const ImageHandle& dst);
[[nodiscard]] [[nodiscard]]
......
...@@ -63,7 +63,7 @@ int main(int argc, const char** argv) { ...@@ -63,7 +63,7 @@ int main(int argc, const char** argv) {
std::cout << "Error. Could not create compute pipeline. Exiting." << std::endl; std::cout << "Error. Could not create compute pipeline. Exiting." << std::endl;
return EXIT_FAILURE; return EXIT_FAILURE;
} }
for(int i =0;i<3;i++){
auto cmdStream = core.createCommandStream(vkcv::QueueType::Compute); auto cmdStream = core.createCommandStream(vkcv::QueueType::Compute);
uint32_t computeDispatchCount[3] = {64,1,1 }; uint32_t computeDispatchCount[3] = {64,1,1 };
...@@ -78,12 +78,13 @@ int main(int argc, const char** argv) { ...@@ -78,12 +78,13 @@ int main(int argc, const char** argv) {
int output[64] = { 0 }; int output[64] = { 0 };
std::fill_n(output, 64, -1); std::fill_n(output, 64, -1);
core.readBufferMemoryBarrier(cmdStream, inputBuffer.getHandle(), &output); core.recordReadBuffer(cmdStream, inputBuffer.getHandle(), &output);
core.submitCommandStream(cmdStream); core.submitCommandStream(cmdStream);
std::cout << "["; std::cout << "[";
for (int i = 0; i < 64; i++) { for (int i = 0; i < 64; i++) {
std::cout << output[i] << ", "; std::cout << output[i] << ", ";
} }
std::cout << "]" << std::endl; std::cout << "]" << std::endl;
}
return 0; return 0;
} }
...@@ -330,33 +330,15 @@ namespace vkcv { ...@@ -330,33 +330,15 @@ namespace vkcv {
nullptr); 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(); void BufferManager ::readBuffer(const BufferHandle& handle, vk::CommandBuffer cmdBuffer, void *data) {
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) {
const uint64_t id = handle.getId(); const uint64_t id = handle.getId();
size_t size = getBufferSize(handle);
if (size == 0) {
size = SIZE_MAX;
}
if (id >= m_buffers.size()) { if (id >= m_buffers.size()) {
vkcv_log(vkcv::LogLevel::ERROR, "Invalid buffer handle"); vkcv_log(vkcv::LogLevel::ERROR, "Invalid buffer handle");
...@@ -382,7 +364,14 @@ namespace vkcv { ...@@ -382,7 +364,14 @@ namespace vkcv {
memoryBarrier, memoryBarrier,
nullptr); 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::BufferMemoryBarrier memoryBarrier2(
vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eTransferWrite,
......
...@@ -698,9 +698,9 @@ namespace vkcv ...@@ -698,9 +698,9 @@ namespace vkcv
}, nullptr); }, 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) { recordCommandsToStream(cmdStream, [buffer, this, data](const vk::CommandBuffer cmdBuffer) {
m_BufferManager->readBufferMemoryBarrier(buffer, cmdBuffer, data); m_BufferManager->readBuffer(buffer, cmdBuffer, data);
}, nullptr); }, 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