diff --git a/liblava/resource/texture.cpp b/liblava/resource/texture.cpp index 61e347fb6726678c4ab2010ed846711f5ccb45b2..6e9ad3f39f4bf5c2df87e8084be4e61400e977a2 100644 --- a/liblava/resource/texture.cpp +++ b/liblava/resource/texture.cpp @@ -101,7 +101,7 @@ namespace lava { bool texture::upload(void const* data, size_t data_size) { upload_buffer = make_buffer(); - return upload_buffer->create(img->get_device(), data, data_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, false, VMA_MEMORY_USAGE_CPU_TO_GPU); + return upload_buffer->create(img->get_device(), data, data_size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, false, VMA_MEMORY_USAGE_CPU_ONLY); } bool texture::stage(VkCommandBuffer cmd_buf) { diff --git a/src/scene.hpp b/src/scene.hpp index 1f93fc5ce204dfbb2a6bdf36159e4d75ac5ee9b1..5f28946a6a3b98d5b1c3f0312f87e4098eeb1bd7 100644 --- a/src/scene.hpp +++ b/src/scene.hpp @@ -212,8 +212,8 @@ private: glm::vec3 scene_min = glm::vec3(0.0f); glm::vec3 scene_max = glm::vec3(0.0f); - const glm::vec3 ambient_color = glm::vec3(0.2f); //NOTE: This factor is used so that the Bistro scene looks okay. - float exposure = 1.0f; + const glm::vec3 ambient_color = glm::vec3(5.0f); //NOTE: This factor is used so that the Bistro scene looks okay. + float exposure = 0.1f; //NOTE: This factor is used so that the Bistro scene looks okay. bool exposure_changed = false; uint32_t light_directional_count = 0; diff --git a/src/strategy/multi_view_stereo.cpp b/src/strategy/multi_view_stereo.cpp index 73546895f37c7fe466a4ebe9114a650509777911..3fe3e1922ec8325009c3f791e31335b2663b1876 100644 --- a/src/strategy/multi_view_stereo.cpp +++ b/src/strategy/multi_view_stereo.cpp @@ -133,13 +133,13 @@ bool MultiViewStereo::on_render(VkCommandBuffer command_buffer, lava::index fram right_barrier.subresourceRange.baseArrayLayer = 0; right_barrier.subresourceRange.layerCount = 1; - std::array<VkImageMemoryBarrier, 2> barriers = + std::array<VkImageMemoryBarrier, 2> begin_barriers = { left_barrier, right_barrier }; - vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, barriers.size(), barriers.data()); + vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, begin_barriers.size(), begin_barriers.data()); VkImageSubresourceLayers subresource; subresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; @@ -180,13 +180,31 @@ bool MultiViewStereo::on_render(VkCommandBuffer command_buffer, lava::index fram vkCmdCopyImage(command_buffer, this->color_buffer->get(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, this->get_headset()->get_framebuffer(EYE_LEFT)->get(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &left_copy); vkCmdCopyImage(command_buffer, this->color_buffer->get(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, this->get_headset()->get_framebuffer(EYE_RIGHT)->get(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &right_copy); - this->get_frame_capture()->capture_image(command_buffer, this->get_headset()->get_framebuffer(EYE_LEFT), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, "left_eye"); - this->get_companion_window()->submit_image(command_buffer, EYE_LEFT, this->get_headset()->get_framebuffer(EYE_LEFT), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); - this->get_headset()->submit_frame(command_buffer, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, EYE_LEFT); + left_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + left_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + left_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + left_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; - this->get_frame_capture()->capture_image(command_buffer, this->get_headset()->get_framebuffer(EYE_RIGHT), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, "right_eye"); - this->get_companion_window()->submit_image(command_buffer, EYE_RIGHT, this->get_headset()->get_framebuffer(EYE_RIGHT), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); - this->get_headset()->submit_frame(command_buffer, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, EYE_RIGHT); + right_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + right_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; + right_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; + right_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; + + std::array<VkImageMemoryBarrier, 2> end_barriers = + { + left_barrier, + right_barrier + }; + + vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, end_barriers.size(), end_barriers.data()); + + this->get_frame_capture()->capture_image(command_buffer, this->get_headset()->get_framebuffer(EYE_LEFT), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, "left_eye"); + this->get_companion_window()->submit_image(command_buffer, EYE_LEFT, this->get_headset()->get_framebuffer(EYE_LEFT), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); + this->get_headset()->submit_frame(command_buffer, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, EYE_LEFT); + + this->get_frame_capture()->capture_image(command_buffer, this->get_headset()->get_framebuffer(EYE_RIGHT), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, "right_eye"); + this->get_companion_window()->submit_image(command_buffer, EYE_RIGHT, this->get_headset()->get_framebuffer(EYE_RIGHT), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); + this->get_headset()->submit_frame(command_buffer, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, EYE_RIGHT); return true; }