From a424c5e57bd63ae506d9b1ea66ddcc3d808e2265 Mon Sep 17 00:00:00 2001 From: Karl Schultz Date: Thu, 21 Apr 2016 16:45:12 -0600 Subject: demos/smoke: Fix validation errors in push-constants mode. Change-Id: I48e736ef1c777af831d7e888c8ac6e1647d1f6b2 --- demos/smoke/Smoke.cpp | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/demos/smoke/Smoke.cpp b/demos/smoke/Smoke.cpp index af81f5c6..76a9a90c 100644 --- a/demos/smoke/Smoke.cpp +++ b/demos/smoke/Smoke.cpp @@ -383,11 +383,6 @@ void Smoke::destroy_frame_data() if (!use_push_constants_) { vk::DestroyDescriptorPool(dev_, desc_pool_, nullptr); - for (auto cmd_pool : worker_cmd_pools_) - vk::DestroyCommandPool(dev_, cmd_pool, nullptr); - worker_cmd_pools_.clear(); - vk::DestroyCommandPool(dev_, primary_cmd_pool_, nullptr); - vk::UnmapMemory(dev_, frame_data_mem_); vk::FreeMemory(dev_, frame_data_mem_, nullptr); @@ -395,6 +390,11 @@ void Smoke::destroy_frame_data() vk::DestroyBuffer(dev_, data.buf, nullptr); } + for (auto cmd_pool : worker_cmd_pools_) + vk::DestroyCommandPool(dev_, cmd_pool, nullptr); + worker_cmd_pools_.clear(); + vk::DestroyCommandPool(dev_, primary_cmd_pool_, nullptr); + for (auto &data : frame_data_) vk::DestroyFence(dev_, data.fence, nullptr); @@ -777,18 +777,21 @@ void Smoke::on_frame(float frame_pred) VkResult res = vk::BeginCommandBuffer(data.primary_cmd, &primary_cmd_begin_info_); - VkBufferMemoryBarrier buf_barrier = {}; - buf_barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; - buf_barrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT; - buf_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; - buf_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - buf_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - buf_barrier.buffer = data.buf; - buf_barrier.offset = 0; - buf_barrier.size = VK_WHOLE_SIZE; - vk::CmdPipelineBarrier(data.primary_cmd, - VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, - 0, 0, nullptr, 1, &buf_barrier, 0, nullptr); + if (!use_push_constants_) { + VkBufferMemoryBarrier buf_barrier = {}; + buf_barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; + buf_barrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT; + buf_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; + buf_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + buf_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; + buf_barrier.buffer = data.buf; + buf_barrier.offset = 0; + buf_barrier.size = VK_WHOLE_SIZE; + vk::CmdPipelineBarrier(data.primary_cmd, + VK_PIPELINE_STAGE_HOST_BIT, + VK_PIPELINE_STAGE_VERTEX_SHADER_BIT, + 0, 0, nullptr, 1, &buf_barrier, 0, nullptr); + } render_pass_begin_info_.framebuffer = framebuffers_[back.image_index]; render_pass_begin_info_.renderArea.extent = extent_; -- cgit v1.2.3