diff --git a/projects/neural_network/src/main.cpp b/projects/neural_network/src/main.cpp index 612ebd7a8c5dad5a0a8729eed6859cbda1c3dfe8..2645f2077fa4392ce24a38f72fb5deeccb23c2ca 100644 --- a/projects/neural_network/src/main.cpp +++ b/projects/neural_network/src/main.cpp @@ -27,7 +27,8 @@ int main(int argc, const char** argv) { ); int input[64] = { 0 }; - vkcv::Buffer<int> inputBuffer = core.createBuffer<int>(vkcv::BufferType::STORAGE, 64); + std::fill_n(input, 64, 2); + vkcv::Buffer<int> inputBuffer = core.createBuffer<int>(vkcv::BufferType::STORAGE, 64, vkcv::BufferMemoryType::HOST_VISIBLE); inputBuffer.fill(input); vkcv::PassConfig computePassDefinition({}); @@ -64,7 +65,7 @@ int main(int argc, const char** argv) { } auto cmdStream = core.createCommandStream(vkcv::QueueType::Compute); - uint32_t computeDispatchCount[3] = {inputBuffer.getSize(),1,1 }; + uint32_t computeDispatchCount[3] = {64,1,1 }; vkcv::PushConstants pushConstantsCompute(sizeof(int)); pushConstantsCompute.appendDrawcall(1); @@ -76,9 +77,13 @@ int main(int argc, const char** argv) { pushConstantsCompute); int output[64] = { 0 }; + std::fill_n(output, 64, -1); core.readBufferMemoryBarrier(cmdStream, inputBuffer.getHandle(), &output); core.submitCommandStream(cmdStream); - - std::cout << output << std::endl; + std::cout << "["; + for (int i = 0; i < 64; i++) { + std::cout << output[i] << ", "; + } + std::cout << "]" << std::endl; return 0; } diff --git a/src/vkcv/BufferManager.cpp b/src/vkcv/BufferManager.cpp index 85515f3180489057dbddd13781cec12f7b8261d0..fbe6e2e7d0008b3856a44de82eb5e8d76f987cf5 100644 --- a/src/vkcv/BufferManager.cpp +++ b/src/vkcv/BufferManager.cpp @@ -350,9 +350,8 @@ namespace vkcv { const size_t max_size = std::min(size, buffer.m_size); void* mapped = allocator.mapMemory(buffer.m_allocation); - memcpy(data, reinterpret_cast<char*>(mapped) , max_size); + 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) { @@ -376,8 +375,8 @@ namespace vkcv { buffer.m_size); cmdBuffer.pipelineBarrier( - vk::PipelineStageFlagBits::eTopOfPipe, - vk::PipelineStageFlagBits::eBottomOfPipe, + vk::PipelineStageFlagBits::eComputeShader, + vk::PipelineStageFlagBits::eTransfer, {}, nullptr, memoryBarrier, @@ -395,8 +394,8 @@ namespace vkcv { buffer.m_size); cmdBuffer.pipelineBarrier( - vk::PipelineStageFlagBits::eTopOfPipe, - vk::PipelineStageFlagBits::eBottomOfPipe, + vk::PipelineStageFlagBits::eTransfer, + vk::PipelineStageFlagBits::eHost, {}, nullptr, memoryBarrier2,