Cogs.Core
CommonVK.h
1#pragma once
2
3//#define COGS_USE_VK_SDK
4
5#ifdef _WIN32
6#define VK_USE_PLATFORM_WIN32_KHR
7#else
8#define VK_USE_PLATFORM_XLIB_KHR
9#endif
10
11#ifdef COGS_USE_VK_SDK
12#include "vulkan.h"
13#pragma comment(lib, "C:\\VulkanSDK\\1.0.46.0\\Lib\\vulkan-1.lib")
14#else
15#define VK_NO_PROTOTYPES
16#include "vulkan.h"
17#endif
18
19#define COGS_DEFINE_FUNCTION(function) PFN_##function function
20#define COGS_DECLARE_FUNCTION(function) extern PFN_##function function
21
22#define COGS_FUNCTION_HEADER
23#include "FunctionsVK.h"
24#undef COGS_FUNCTION_HEADER
25
26extern HMODULE gModuleHandle;
27
28template<typename T>
29inline void assign(T & t, const char * name)
30{
31 t = (T)::GetProcAddress(gModuleHandle, name);
32}
33
34template<typename T>
35inline void instanceAssign(T & t, VkInstance instance, const char * name)
36{
37 t = (T)vkGetInstanceProcAddr(instance, name);
38}
39
40template<typename T>
41inline void deviceAssign(T & t, VkDevice device, const char * name)
42{
43 t = (T)vkGetDeviceProcAddr(device, name);
44}
45
46#define LOAD_FUNCTION(x) assign(x, #x);
47#define LOAD_INSTANCE_FUNCTION(x) vkGetInstanceProcAddr ? instanceAssign(x, instance, #x) : LOAD_FUNCTION(x);
48#define LOAD_DEVICE_FUNCTION(x) vkGetDeviceProcAddr ? deviceAssign(x, device, #x) : LOAD_INSTANCE_FUNCTION(x);
49
50#include "../Common.h"
51#include "../Base/ResourceMap.h"
52
53#include "Foundation/Logging/Logger.h"
54
55#define VK_STR(e) #e
56
57inline const char * getResultStr(VkResult result)
58{
59 switch (result) {
60 case VK_SUCCESS:
61 return VK_STR(VK_SUCCESS);
62 case VK_ERROR_DEVICE_LOST:
63 return VK_STR(VK_ERROR_DEVICE_LOST);
64 default:
65 return "UNKOWN_ERROR";
66 }
67}
68
69#define VK_FAILED(result) result != VK_SUCCESS
70#define VK_LOG_ERROR(result, str) LOG_ERROR(logger, "%s Result: %s", str, ::getResultStr(result))
71
72void loaderInit();
73void loaderInitInstance(VkInstance instance);
74void loaderInitDevice(VkInstance instance, VkDevice device);
75
76namespace Cogs
77{
78 struct TextureVK;
79
80 bool setImageLayout(VkCommandBuffer commandBuffer,
81 VkImage image,
82 VkImageAspectFlags aspectMask,
83 VkImageLayout oldLayout,
84 VkImageLayout newLayout,
85 VkImageSubresourceRange range = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 });
86
87 bool setImageLayout(VkCommandBuffer commandBuffer,
88 TextureVK & texture,
89 VkImageAspectFlags aspectMask,
90 VkImageLayout newLayout,
91 VkImageSubresourceRange range = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 });
92}
93
94extern HMODULE gModuleHandle;
Contains all Cogs related functionality.
Definition: FieldSetter.h:23