From c25faa3f1d03531a2f650714d5c7e40ad1d1c754 Mon Sep 17 00:00:00 2001 From: Squareys Date: Thu, 2 Jun 2016 23:49:02 +0200 Subject: [PATCH] Some merge conflicts resolved WIP I hope this concludes this git dilemma :P Signed-off-by: Squareys --- src/Magnum/Vk/Context.cpp | 34 +++++++++++++++-------- src/Magnum/Vk/Context.h | 23 +++++++++++++++ src/Magnum/Vk/Test/AbstractVulkanTester.h | 7 +++-- src/Magnum/Vk/Test/CMakeLists.txt | 1 + 4 files changed, 52 insertions(+), 13 deletions(-) diff --git a/src/Magnum/Vk/Context.cpp b/src/Magnum/Vk/Context.cpp index fc76383e3..f3db3d276 100644 --- a/src/Magnum/Vk/Context.cpp +++ b/src/Magnum/Vk/Context.cpp @@ -30,8 +30,13 @@ #include #include "vulkan.h" + namespace Magnum { namespace Vk { +PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT; +PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT; +PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT; + unsigned int layerCount = 2; const char *validationLayerNames[] = { @@ -51,10 +56,8 @@ Context& Context::current() { return *_current; } -Context::Context(NoCreateT, Int argc, char** argv, void functionLoader()): _functionLoader{functionLoader}, _version{Version::None} { - Utility::Arguments args{"magnum"}; - args.parse(argc, argv); -} + +Context::Context(): Context{Flags{}} {} Context::Context(Flags flags): _functionLoader{nullptr}, _version{Version::None}, _flags(flags) { create(); @@ -75,7 +78,7 @@ Context::~Context() { } if (_flags >= Flag::EnableValidation) { - //DestroyDebugReportCallback(_instance, msgCallback, nullptr); + vkDestroyDebugReportCallbackEXT(_instance, _callback, nullptr); } vkDestroyInstance(_instance, nullptr); } @@ -95,7 +98,16 @@ VKAPI_ATTR VkBool32 VKAPI_CALL MyDebugReportCallback( const char* pMessage, void* pUserData) { - Error() << pMessage; + if(flags & VK_DEBUG_REPORT_DEBUG_BIT_EXT != 0) { + Debug() << "[Debug][" << pLayerPrefix << "]" << pMessage; + } else if(flags & VK_DEBUG_REPORT_ERROR_BIT_EXT) { + Error() << "[Error][" << pLayerPrefix << "]" << pMessage; + } else if(flags & VK_DEBUG_REPORT_WARNING_BIT_EXT) { + Warning() << "[Warning][" << pLayerPrefix << "]" << pMessage; + } else if(flags & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT) { + Warning() << "[Perf Warning][" << pLayerPrefix << "]" << pMessage; + } + return VK_FALSE; } @@ -141,13 +153,13 @@ bool Context::tryCreate() { /* setup debugging */ if (_flags >= Flag::EnableValidation) { /* Load VK_EXT_debug_report entry points in debug builds */ - PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = + vkCreateDebugReportCallbackEXT = reinterpret_cast (vkGetInstanceProcAddr(_instance, "vkCreateDebugReportCallbackEXT")); - PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT = + vkDebugReportMessageEXT = reinterpret_cast (vkGetInstanceProcAddr(_instance, "vkDebugReportMessageEXT")); - PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT = + vkDestroyDebugReportCallbackEXT = reinterpret_cast (vkGetInstanceProcAddr(_instance, "vkDestroyDebugReportCallbackEXT")); @@ -162,8 +174,8 @@ bool Context::tryCreate() { callbackCreateInfo.pUserData = nullptr; /* Register the callback */ - VkDebugReportCallbackEXT callback; - VkResult err = vkCreateDebugReportCallbackEXT(_instance, &callbackCreateInfo, nullptr, &callback); + VkResult err = vkCreateDebugReportCallbackEXT(_instance, &callbackCreateInfo, nullptr, &_callback); + if (err != VK_SUCCESS) { Error() << "Could not setup Debug callback"; } diff --git a/src/Magnum/Vk/Context.h b/src/Magnum/Vk/Context.h index ea6300a07..c606447f6 100644 --- a/src/Magnum/Vk/Context.h +++ b/src/Magnum/Vk/Context.h @@ -37,6 +37,7 @@ #include #include #include +#include #include "Magnum/Tags.h" #include "Magnum/Magnum.h" @@ -50,6 +51,16 @@ enum class Version: UnsignedInt { Vulkan_1_0 = VK_API_VERSION_1_0, /**< Vulkan 1.0 */ }; +#define MAGNUM_VK_ASSERT_ERROR(err) \ + do { \ + const VkResult r = err; \ + if(r != VK_SUCCESS) { \ + Error() << "(File:" << __FILE__ \ + << ", Line:" << __LINE__ \ + << ") Vulkan error:" << Vk::Result(r); \ + } \ + } while(false) + #define VK_ERROR_INVALID_PARAMETER_NV -1000013000 #define VK_ERROR_INVALID_ALIGNMENT_NV -1000013001 @@ -140,6 +151,12 @@ class MAGNUM_VK_EXPORT Context { */ static Context& current(); + /** @brief Constructor */ + Context(); + + /** + * @brief Constructor with flags + */ Context(Flags flags); /** @brief Copying is not allowed */ @@ -148,6 +165,11 @@ class MAGNUM_VK_EXPORT Context { /** @brief Move constructor */ Context(Context&& other); + /** + * @brief Destructor + * + * @see @fn_vk{DestroyInstance} + */ ~Context(); /** @brief Copying is not allowed */ @@ -186,6 +208,7 @@ class MAGNUM_VK_EXPORT Context { Flags _flags; VkInstance _instance; + VkDebugReportCallbackEXT _callback; }; MAGNUM_VK_EXPORT Debug& operator<<(Debug& debug, Result value); diff --git a/src/Magnum/Vk/Test/AbstractVulkanTester.h b/src/Magnum/Vk/Test/AbstractVulkanTester.h index d64f0a80f..16bc18f3a 100644 --- a/src/Magnum/Vk/Test/AbstractVulkanTester.h +++ b/src/Magnum/Vk/Test/AbstractVulkanTester.h @@ -28,7 +28,9 @@ #include -namespace Magnum { namespace Test { +using namespace Corrade; + +namespace Magnum { namespace Vk { namespace Test { class AbstractVulkanTester: public TestSuite::Tester { public: @@ -60,6 +62,7 @@ AbstractVulkanTester::AbstractVulkanTester(): TestSuite::Tester{TestSuite::Teste } #endif -}} + +}}} #endif diff --git a/src/Magnum/Vk/Test/CMakeLists.txt b/src/Magnum/Vk/Test/CMakeLists.txt index 6d6431378..80912b620 100644 --- a/src/Magnum/Vk/Test/CMakeLists.txt +++ b/src/Magnum/Vk/Test/CMakeLists.txt @@ -28,6 +28,7 @@ corrade_add_test(VkContextTest ContextTest.cpp LIBRARIES MagnumVk) if(BUILD_VK_TESTS) corrade_add_test(ContextVkTest ContextVkTest.cpp LIBRARIES ${VK_TEST_LIBRARIES}) + corrade_add_test(CommandTest CommandTest.cpp LIBRARIES ${VK_TEST_LIBRARIES}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/configure.h)