Mercurial > games > semicongine
comparison src/semicongine/vulkan_helpers.nim @ 83:5e19aead2b61
add: new vulkan api wrapper, not done yet
author | Sam <sam@basx.dev> |
---|---|
date | Thu, 23 Feb 2023 00:34:38 +0700 |
parents | e5be7a25634e |
children | 8412f433dc46 |
comparison
equal
deleted
inserted
replaced
82:9e7937b7bcc8 | 83:5e19aead2b61 |
---|---|
4 import std/logging | 4 import std/logging |
5 import std/macros | 5 import std/macros |
6 | 6 |
7 import ./vulkan | 7 import ./vulkan |
8 import ./window | 8 import ./window |
9 | |
10 template checkVkResult*(call: untyped) = | |
11 when defined(release): | |
12 discard call | |
13 else: | |
14 # yes, a bit cheap, but this is only for nice debug output | |
15 var callstr = astToStr(call).replace("\n", "") | |
16 while callstr.find(" ") >= 0: | |
17 callstr = callstr.replace(" ", " ") | |
18 debug "CALLING vulkan: ", callstr | |
19 let value = call | |
20 if value != VK_SUCCESS: | |
21 error "Vulkan error: ", astToStr(call), " returned ", $value | |
22 raise newException(Exception, "Vulkan error: " & astToStr(call) & | |
23 " returned " & $value) | |
24 | 9 |
25 # the included code need checkVkResult, therefore having the template above | 10 # the included code need checkVkResult, therefore having the template above |
26 when defined(linux): | 11 when defined(linux): |
27 include ./platform/linux/vulkan | 12 include ./platform/linux/vulkan |
28 when defined(windows): | 13 when defined(windows): |
192 enabledExtensionCount: requiredExtensions.len.uint32, | 177 enabledExtensionCount: requiredExtensions.len.uint32, |
193 ppEnabledExtensionNames: cast[ptr UncheckedArray[cstring]](addr( | 178 ppEnabledExtensionNames: cast[ptr UncheckedArray[cstring]](addr( |
194 requiredExtensions[0])) | 179 requiredExtensions[0])) |
195 ) | 180 ) |
196 checkVkResult vkCreateInstance(addr(createinfo), nil, addr(result)) | 181 checkVkResult vkCreateInstance(addr(createinfo), nil, addr(result)) |
197 | 182 for extension in requiredExtensions: |
198 loadVK_KHR_surface() | 183 result.loadExtension($extension) |
199 load_platform_extensions() | 184 |
200 loadVK_KHR_swapchain() | 185 # loadVK_KHR_surface(result) |
186 # loadVK_KHR_swapchain(result) | |
201 when ENABLEVULKANVALIDATIONLAYERS: | 187 when ENABLEVULKANVALIDATIONLAYERS: |
202 loadVK_EXT_debug_utils(result) | 188 loadVK_EXT_debug_utils(result) |
203 | 189 |
204 | 190 |
205 proc getVulcanDevice*( | 191 proc getVulcanDevice*( |
237 proc debugCallback*( | 223 proc debugCallback*( |
238 messageSeverity: VkDebugUtilsMessageSeverityFlagBitsEXT, | 224 messageSeverity: VkDebugUtilsMessageSeverityFlagBitsEXT, |
239 messageTypes: VkDebugUtilsMessageTypeFlagsEXT, | 225 messageTypes: VkDebugUtilsMessageTypeFlagsEXT, |
240 pCallbackData: VkDebugUtilsMessengerCallbackDataEXT, | 226 pCallbackData: VkDebugUtilsMessengerCallbackDataEXT, |
241 userData: pointer | 227 userData: pointer |
242 ): VkBool32 {.cdecl.} = | 228 ): bool {.cdecl.} = |
243 echo &"{messageSeverity}: {VkDebugUtilsMessageTypeFlagBitsEXT(messageTypes)}: {pCallbackData.pMessage}" | 229 echo &"{messageSeverity}: {VkDebugUtilsMessageTypeFlagBitsEXT(messageTypes)}: {pCallbackData.pMessage}" |
244 return VK_FALSE | 230 return false |
245 | 231 |
246 proc getSurfaceCapabilities*(device: VkPhysicalDevice, | 232 proc getSurfaceCapabilities*(device: VkPhysicalDevice, |
247 surface: VkSurfaceKHR): VkSurfaceCapabilitiesKHR = | 233 surface: VkSurfaceKHR): VkSurfaceCapabilitiesKHR = |
248 checkVkResult device.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(surface, addr(result)) | 234 checkVkResult device.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(surface, addr(result)) |