aboutsummaryrefslogtreecommitdiff
path: root/cube/cube.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cube/cube.cpp')
-rw-r--r--cube/cube.cpp61
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();