+ clvals[1].depthStencil = {1.0f, 0};
+
+ //build drawing command buffers
+ for(int i=0; i<count; i++) {
+ if(vkBeginCommandBuffer(bufs[i], &binf) != VK_SUCCESS) {
+ fprintf(stderr, "Failed to begin command buffer: %d\n", i);
+ return false;
+ }
+
+ VkImageMemoryBarrier imbarr;
+ memset(&imbarr, 0, sizeof imbarr);
+ imbarr.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+ imbarr.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
+ imbarr.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+ imbarr.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
+ imbarr.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
+ imbarr.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
+ imbarr.image = images[i];
+ imbarr.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1};
+ vkCmdPipelineBarrier(bufs[i], VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, 0, 0, 0, 1, &imbarr);
+
+ VkRenderPassBeginInfo rbinf;
+ memset(&rbinf, 0, sizeof rbinf);
+ rbinf.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
+ rbinf.renderPass = rpass;
+ rbinf.framebuffer = fbs[i];
+ rbinf.renderArea.extent.width = win_w;
+ rbinf.renderArea.extent.height = win_h;
+ rbinf.clearValueCount = count;
+ rbinf.pClearValues = clvals;
+
+ vkCmdBeginRenderPass(bufs[i], &rbinf, VK_SUBPASS_CONTENTS_INLINE);
+ VkViewport viewport;
+ memset(&viewport, 0, sizeof viewport);
+ viewport.width = (float)win_w;
+ viewport.height = (float)win_h;
+ viewport.maxDepth = 1.0f;
+ vkCmdSetViewport(bufs[i], 0, 1, &viewport);
+
+ VkRect2D scissor;
+ memset(&scissor, 0, sizeof scissor);
+ scissor.extent.width = win_w;
+ scissor.extent.height = win_h;
+ vkCmdSetScissor(bufs[i], 0, 1, &scissor);
+ vkCmdEndRenderPass(bufs[i]);
+
+ /* pre-present barrier */
+ VkImageMemoryBarrier ppb;
+ memset(&ppb, 0, sizeof ppb);
+ ppb.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+ ppb.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
+ ppb.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT;
+ ppb.oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
+ ppb.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
+ ppb.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
+ ppb.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
+ ppb.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1};
+ ppb.image = images[i];
+
+ vkCmdPipelineBarrier(bufs[i], VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, 0, 0, 0, 1, &ppb);
+
+ if(vkEndCommandBuffer(bufs[i]) != VK_SUCCESS) {
+ fprintf(stderr, "Failed to end command buffer: %d\n", i);
+ return false;
+ }