diff options
Diffstat (limited to 'cube/cube.cpp')
-rw-r--r-- | cube/cube.cpp | 61 |
1 files changed, 43 insertions, 18 deletions
diff --git a/cube/cube.cpp b/cube/cube.cpp index 965f6faf..04447fcd 100644 --- a/cube/cube.cpp +++ b/cube/cube.cpp @@ -1,7 +1,7 @@ /* - * Copyright (c) 2015-2016 The Khronos Group Inc. - * Copyright (c) 2015-2016 Valve Corporation - * Copyright (c) 2015-2016 LunarG, Inc. + * Copyright (c) 2015-2019 The Khronos Group Inc. + * Copyright (c) 2015-2019 Valve Corporation + * Copyright (c) 2015-2019 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,8 @@ #include <cstdlib> #include <cstring> #include <csignal> +#include <iostream> +#include <sstream> #include <memory> #define VULKAN_HPP_NO_SMART_HANDLE @@ -930,18 +932,22 @@ void Demo::init(int argc, char **argv) { continue; } - fprintf(stderr, - "Usage:\n %s [--use_staging] [--validate] [--break] [--c <framecount>] \n" - " [--suppress_popups] [--present_mode {0,1,2,3}]\n" - "\n" - "Options for --present_mode:\n" - " %d: VK_PRESENT_MODE_IMMEDIATE_KHR\n" - " %d: VK_PRESENT_MODE_MAILBOX_KHR\n" - " %d: VK_PRESENT_MODE_FIFO_KHR (default)\n" - " %d: VK_PRESENT_MODE_FIFO_RELAXED_KHR\n", - APP_SHORT_NAME, VK_PRESENT_MODE_IMMEDIATE_KHR, VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_FIFO_KHR, - VK_PRESENT_MODE_FIFO_RELAXED_KHR); - fflush(stderr); + std::stringstream usage; + usage << "Usage:\n " << APP_SHORT_NAME << "\t[--use_staging] [--validate]\n" + << "\t[--break] [--c <framecount>] [--suppress_popups]\n" + << "\t[--present_mode <present mode enum>]\n" + << "\t<present_mode_enum>\n" + << "\t\tVK_PRESENT_MODE_IMMEDIATE_KHR = " << VK_PRESENT_MODE_IMMEDIATE_KHR << "\n" + << "\t\tVK_PRESENT_MODE_MAILBOX_KHR = " << VK_PRESENT_MODE_MAILBOX_KHR << "\n" + << "\t\tVK_PRESENT_MODE_FIFO_KHR = " << VK_PRESENT_MODE_FIFO_KHR << "\n" + << "\t\tVK_PRESENT_MODE_FIFO_RELAXED_KHR = " << VK_PRESENT_MODE_FIFO_RELAXED_KHR; + +#if defined(_WIN32) + if (!suppress_popups) MessageBox(NULL, usage.str().c_str(), "Usage Error", MB_OK); +#else + std::cerr << usage.str(); + std::cerr.flush(); +#endif exit(1); } @@ -1969,13 +1975,33 @@ void Demo::prepare_render_pass() { .setPreserveAttachmentCount(0) .setPPreserveAttachments(nullptr); + vk::PipelineStageFlags stages = vk::PipelineStageFlagBits::eEarlyFragmentTests | vk::PipelineStageFlagBits::eLateFragmentTests; + vk::SubpassDependency const dependencies[2] = { + vk::SubpassDependency() // Depth buffer is shared between swapchain images + .setSrcSubpass(VK_SUBPASS_EXTERNAL) + .setDstSubpass(0) + .setSrcStageMask(stages) + .setDstStageMask(stages) + .setSrcAccessMask(vk::AccessFlagBits::eDepthStencilAttachmentWrite) + .setDstAccessMask(vk::AccessFlagBits::eDepthStencilAttachmentRead | vk::AccessFlagBits::eDepthStencilAttachmentWrite) + .setDependencyFlags(vk::DependencyFlags()), + vk::SubpassDependency() // Image layout transition + .setSrcSubpass(VK_SUBPASS_EXTERNAL) + .setDstSubpass(0) + .setSrcStageMask(vk::PipelineStageFlagBits::eColorAttachmentOutput) + .setDstStageMask(vk::PipelineStageFlagBits::eColorAttachmentOutput) + .setSrcAccessMask(vk::AccessFlagBits()) + .setDstAccessMask(vk::AccessFlagBits::eColorAttachmentWrite | vk::AccessFlagBits::eColorAttachmentRead) + .setDependencyFlags(vk::DependencyFlags()), + }; + auto const rp_info = vk::RenderPassCreateInfo() .setAttachmentCount(2) .setPAttachments(attachments) .setSubpassCount(1) .setPSubpasses(&subpass) - .setDependencyCount(0) - .setPDependencies(nullptr); + .setDependencyCount(2) + .setPDependencies(dependencies); auto result = device.createRenderPass(&rp_info, nullptr, &render_pass); VERIFY(result == vk::Result::eSuccess); @@ -3008,7 +3034,6 @@ int main(int argc, char **argv) { // Global function invoked from NS or UI views and controllers to create demo static void demo_main(struct Demo &demo, void *view, int argc, const char *argv[]) { - demo.init(argc, (char **)argv); demo.window = view; demo.init_vk_swapchain(); |