Plasma Engine  2.0
Loading...
Searching...
No Matches
RendererVulkanDLL.h
1#pragma once
2
3#include <RendererFoundation/RendererFoundationDLL.h>
4
5#if PL_ENABLED(PL_PLATFORM_WINDOWS)
6// Needed for vulkan.hpp which includes headers that include windows.h which then define min, breaking std::min used in vulkan.hpp :-/
7# include <Foundation/Basics/Platform/Win/IncludeWindows.h>
8#endif
9
10#if PL_ENABLED(PL_PLATFORM_WINDOWS)
11# define VK_USE_PLATFORM_WIN32_KHR
12#elif PL_ENABLED(PL_PLATFORM_LINUX)
13# define VK_USE_PLATFORM_XCB_KHR
14#elif PL_ENABLED(PL_PLATFORM_ANDROID)
15# define VK_USE_PLATFORM_ANDROID_KHR
16#endif
17
18#define VULKAN_HPP_NO_NODISCARD_WARNINGS // TODO: temporarily disable warnings to make it compile. Need to fix all the warnings later.
19#include <vulkan/vulkan.hpp>
20
21#if PL_ENABLED(PL_PLATFORM_ANDROID)
22# include <vulkan/vulkan_android.h>
23#elif PL_ENABLED(PL_PLATFORM_WINDOWS)
24# include <vulkan/vulkan_win32.h>
25#endif
26
27// Configure the DLL Import/Export Define
28#if PL_ENABLED(PL_COMPILE_ENGINE_AS_DLL)
29# ifdef BUILDSYSTEM_BUILDING_RENDERERVULKAN_LIB
30# define PL_RENDERERVULKAN_DLL PL_DECL_EXPORT
31# else
32# define PL_RENDERERVULKAN_DLL PL_DECL_IMPORT
33# endif
34#else
35# define PL_RENDERERVULKAN_DLL
36#endif
37
38// Uncomment to log all layout transitions.
39// #define VK_LOG_LAYOUT_CHANGES
40
41#define PL_GAL_VULKAN_RELEASE(vulkanObj) \
42 do \
43 { \
44 if ((vulkanObj) != nullptr) \
45 { \
46 (vulkanObj)->Release(); \
47 (vulkanObj) = nullptr; \
48 } \
49 } while (0)
50
51#define VK_ASSERT_DEBUG(code) \
52 do \
53 { \
54 auto s = (code); \
55 PL_ASSERT_DEBUG(static_cast<vk::Result>(s) == vk::Result::eSuccess, "Vukan call '{0}' failed with: {1} in {2}:{3}", \
56 PL_PP_STRINGIFY(code), vk::to_string(static_cast<vk::Result>(s)).data(), PL_SOURCE_FILE, PL_SOURCE_LINE); \
57 } while (false)
58
59#define VK_ASSERT_DEV(code) \
60 do \
61 { \
62 auto s = (code); \
63 PL_ASSERT_DEV(static_cast<vk::Result>(s) == vk::Result::eSuccess, "Vukan call '{0}' failed with: {1} in {2}:{3}", \
64 PL_PP_STRINGIFY(code), vk::to_string(static_cast<vk::Result>(s)).data(), PL_SOURCE_FILE, PL_SOURCE_LINE); \
65 } while (false)
66
67#define VK_LOG_ERROR(code) \
68 do \
69 { \
70 auto s = (code); \
71 if (static_cast<vk::Result>(s) != vk::Result::eSuccess) \
72 { \
73 plLog::Error("Vukan call '{0}' failed with: {1} in {2}:{3}", PL_PP_STRINGIFY(code), vk::to_string(static_cast<vk::Result>(s)).data(), PL_SOURCE_FILE, PL_SOURCE_LINE); \
74 } \
75 } while (false)
76
77#define VK_SUCCEED_OR_RETURN_LOG(code) \
78 do \
79 { \
80 auto s = (code); \
81 if (static_cast<vk::Result>(s) != vk::Result::eSuccess) \
82 { \
83 plLog::Error("Vukan call '{0}' failed with: {1} in {2}:{3}", PL_PP_STRINGIFY(code), vk::to_string(static_cast<vk::Result>(s)).data(), PL_SOURCE_FILE, PL_SOURCE_LINE); \
84 return s; \
85 } \
86 } while (false)
87
88#define VK_SUCCEED_OR_RETURN_PL_FAILURE(code) \
89 do \
90 { \
91 auto s = (code); \
92 if (static_cast<vk::Result>(s) != vk::Result::eSuccess) \
93 { \
94 plLog::Error("Vukan call '{0}' failed with: {1} in {2}:{3}", PL_PP_STRINGIFY(code), vk::to_string(static_cast<vk::Result>(s)).data(), PL_SOURCE_FILE, PL_SOURCE_LINE); \
95 return PL_FAILURE; \
96 } \
97 } while (false)