annotate semicongine/rendering.nim @ 1429:ab01c577d91c

fix: some more import-stuff
author sam <sam@basx.dev>
date Sat, 11 Jan 2025 15:34:21 +0700
parents 676fc13685a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1303
e0326aa067c8 fix: windows builds
sam@sambook-windows.localdomain
parents: 1299
diff changeset
1 import std/logging
1298
1feaa8a97acf did: halfway complete refactoring to move from all-include to some-include+imports, no API changes
sam <sam@basx.dev>
parents: 1283
diff changeset
2 import std/hashes
1feaa8a97acf did: halfway complete refactoring to move from all-include to some-include+imports, no API changes
sam <sam@basx.dev>
parents: 1283
diff changeset
3 import std/macros
1feaa8a97acf did: halfway complete refactoring to move from all-include to some-include+imports, no API changes
sam <sam@basx.dev>
parents: 1283
diff changeset
4 import std/os
1feaa8a97acf did: halfway complete refactoring to move from all-include to some-include+imports, no API changes
sam <sam@basx.dev>
parents: 1283
diff changeset
5 import std/sequtils
1303
e0326aa067c8 fix: windows builds
sam@sambook-windows.localdomain
parents: 1299
diff changeset
6 import std/strformat
1298
1feaa8a97acf did: halfway complete refactoring to move from all-include to some-include+imports, no API changes
sam <sam@basx.dev>
parents: 1283
diff changeset
7 import std/strutils
1feaa8a97acf did: halfway complete refactoring to move from all-include to some-include+imports, no API changes
sam <sam@basx.dev>
parents: 1283
diff changeset
8 import std/typetraits
1feaa8a97acf did: halfway complete refactoring to move from all-include to some-include+imports, no API changes
sam <sam@basx.dev>
parents: 1283
diff changeset
9
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
10 import ./core
1298
1feaa8a97acf did: halfway complete refactoring to move from all-include to some-include+imports, no API changes
sam <sam@basx.dev>
parents: 1283
diff changeset
11
1429
ab01c577d91c fix: some more import-stuff
sam <sam@basx.dev>
parents: 1427
diff changeset
12 import ./images
1298
1feaa8a97acf did: halfway complete refactoring to move from all-include to some-include+imports, no API changes
sam <sam@basx.dev>
parents: 1283
diff changeset
13
1385
081f2cad49f5 autocommit
sam <sam@basx.dev>
parents: 1383
diff changeset
14 # in this file:
1192
90bf0cab1d02 did: so many, many things
sam <sam@basx.dev>
parents: 1191
diff changeset
15 # - const defintions for rendering
90bf0cab1d02 did: so many, many things
sam <sam@basx.dev>
parents: 1191
diff changeset
16 # - custom pragma defintions for rendering
90bf0cab1d02 did: so many, many things
sam <sam@basx.dev>
parents: 1191
diff changeset
17 # - type defintions for rendering
90bf0cab1d02 did: so many, many things
sam <sam@basx.dev>
parents: 1191
diff changeset
18 # - some utils code that is used in mutiple rendering files
90bf0cab1d02 did: so many, many things
sam <sam@basx.dev>
parents: 1191
diff changeset
19 # - inclusion of all rendering files
90bf0cab1d02 did: so many, many things
sam <sam@basx.dev>
parents: 1191
diff changeset
20
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
21 # there is a big, bad global vulkan object
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
22 # believe me, this makes everything much, much easier
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
23
1224
a3fa15c25026 did: cleanup, add audio, change platform-dependent structure
sam <sam@basx.dev>
parents: 1218
diff changeset
24 when defined(windows):
a3fa15c25026 did: cleanup, add audio, change platform-dependent structure
sam <sam@basx.dev>
parents: 1218
diff changeset
25 include ./rendering/platform/windows
a3fa15c25026 did: cleanup, add audio, change platform-dependent structure
sam <sam@basx.dev>
parents: 1218
diff changeset
26 when defined(linux):
a3fa15c25026 did: cleanup, add audio, change platform-dependent structure
sam <sam@basx.dev>
parents: 1218
diff changeset
27 include ./rendering/platform/linux
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
28
1427
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
29 import ../semicongine/rendering/memory
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
30 import ../semicongine/rendering/renderer
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
31 import ../semicongine/rendering/swapchain
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
32 import ../semicongine/rendering/shaders
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
33 import ../semicongine/rendering/renderpasses
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
34 import ../semicongine/rendering/vulkan_wrappers
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
35 export memory
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
36 export renderer
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
37 export swapchain
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
38 export shaders
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
39 export renderpasses
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
40 export vulkan_wrappers
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
41
1199
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
42 proc debugCallback(
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
43 messageSeverity: VkDebugUtilsMessageSeverityFlagBitsEXT,
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
44 messageTypes: VkDebugUtilsMessageTypeFlagsEXT,
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
45 pCallbackData: ptr VkDebugUtilsMessengerCallbackDataEXT,
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
46 userData: pointer,
1199
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
47 ): VkBool32 {.cdecl.} =
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
48 const LOG_LEVEL_MAPPING = {
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
49 VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: lvlDebug,
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
50 VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: lvlInfo,
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
51 VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: lvlWarn,
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
52 VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: lvlError,
1199
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
53 }.toTable
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
54 log LOG_LEVEL_MAPPING[messageSeverity],
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
55 &"{toEnums messageTypes}: {pCallbackData.pMessage}"
1199
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
56 if messageSeverity == VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT:
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
57 stderr.writeLine "-----------------------------------"
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
58 stderr.write getStackTrace()
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
59 stderr.writeLine LOG_LEVEL_MAPPING[messageSeverity],
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
60 &"{toEnums messageTypes}: {pCallbackData.pMessage}"
1199
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
61 stderr.writeLine "-----------------------------------"
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
62 let errorMsg =
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
63 getStackTrace() & &"\n{toEnums messageTypes}: {pCallbackData.pMessage}"
1199
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
64 raise newException(Exception, errorMsg)
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
65 return false
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
66
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
67 proc initVulkan*(appName: string = "semicongine app"): VulkanObject =
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
68 # instance creation
1198
96a094cd0c78 sync to notebook in bedroom
sam <sam@basx.dev>
parents: 1197
diff changeset
69
96a094cd0c78 sync to notebook in bedroom
sam <sam@basx.dev>
parents: 1197
diff changeset
70 # enagle all kind of debug stuff
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
71 when not defined(release):
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
72 let requiredExtensions =
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
73 REQUIRED_PLATFORM_EXTENSIONS & @["VK_KHR_surface", "VK_EXT_debug_utils"]
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
74 let layers: seq[string] =
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
75 if hasValidationLayer():
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
76 @["VK_LAYER_KHRONOS_validation"]
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
77 else:
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
78 @[]
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
79 putEnv(
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
80 "VK_LAYER_ENABLES",
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
81 "VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_AMD,VALIDATION_CHECK_ENABLE_VENDOR_SPECIFIC_NVIDIA,VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXTVK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT,VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT",
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
82 )
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
83 else:
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
84 let requiredExtensions = REQUIRED_PLATFORM_EXTENSIONS & @["VK_KHR_surface"]
1311
b22c3b7bc026 fix: release build error
sam <sam@basx.dev>
parents: 1303
diff changeset
85 let layers: seq[string] = @[]
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
86
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
87 var
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
88 layersC = allocCStringArray(layers)
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
89 instanceExtensionsC = allocCStringArray(requiredExtensions)
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
90 defer:
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
91 deallocCStringArray(layersC)
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
92 deallocCStringArray(instanceExtensionsC)
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
93
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
94 var
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
95 appinfo = VkApplicationInfo(
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
96 sType: VK_STRUCTURE_TYPE_APPLICATION_INFO,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
97 pApplicationName: appName,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
98 pEngineName: "semicongine",
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
99 apiVersion: VK_MAKE_API_VERSION(0, 1, 3, 0),
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
100 )
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
101 createinfo = VkInstanceCreateInfo(
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
102 sType: VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
103 pApplicationInfo: addr(appinfo),
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
104 enabledLayerCount: layers.len.uint32,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
105 ppEnabledLayerNames: layersC,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
106 enabledExtensionCount: requiredExtensions.len.uint32,
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
107 ppEnabledExtensionNames: instanceExtensionsC,
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
108 )
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
109 checkVkResult vkCreateInstance(addr(createinfo), nil, addr(result.instance))
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
110 loadVulkan(result.instance)
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
111
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
112 # load extensions
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
113 #
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
114 for extension in requiredExtensions:
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
115 loadExtension(result.instance, $extension)
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
116 result.window = createWindow(appName)
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
117 result.surface = createNativeSurface(result.instance, result.window)
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
118
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
119 # logical device creation
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
120
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
121 # TODO: allowing support for physical devices without hasUniformBufferStandardLayout
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
122 # would require us to ship different shaders, so we don't support standard layout
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
123 # if that will be added, check the function vulkan/shaders.nim:glslUniforms and update accordingly
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
124 # let hasUniformBufferStandardLayout = "VK_KHR_uniform_buffer_standard_layout" in physicalDevice.getExtensions()
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
125 # var deviceExtensions = @["VK_KHR_swapchain", "VK_KHR_uniform_buffer_standard_layout"]
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
126 var deviceExtensions = @["VK_KHR_swapchain"]
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
127 for extension in deviceExtensions:
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
128 loadExtension(result.instance, extension)
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
129
1199
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
130 when not defined(release):
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
131 var debugMessengerCreateInfo = VkDebugUtilsMessengerCreateInfoEXT(
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
132 sType: VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
133 messageSeverity: VkDebugUtilsMessageSeverityFlagBitsEXT.items.toSeq.toBits,
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
134 messageType: VkDebugUtilsMessageTypeFlagBitsEXT.items.toSeq.toBits,
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
135 pfnUserCallback: debugCallback,
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
136 pUserData: nil,
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
137 )
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
138 checkVkResult vkCreateDebugUtilsMessengerEXT(
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
139 result.instance, addr(debugMessengerCreateInfo), nil, addr(result.debugMessenger)
1199
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
140 )
ba1af13233ee add: working main-renderloop
sam <sam@basx.dev>
parents: 1198
diff changeset
141
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
142 # get physical device and graphics queue family
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
143 result.physicalDevice = getBestPhysicalDevice(result.instance)
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
144 result.graphicsQueueFamily =
1423
3b8a736c45a7 did: put almost all global state into a single struct
sam <sam@basx.dev>
parents: 1420
diff changeset
145 getQueueFamily(result.physicalDevice, result.surface, VK_QUEUE_GRAPHICS_BIT)
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
146
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
147 let
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
148 priority = cfloat(1)
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
149 queueInfo = VkDeviceQueueCreateInfo(
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
150 sType: VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
151 queueFamilyIndex: result.graphicsQueueFamily,
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
152 queueCount: 1,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
153 pQueuePriorities: addr(priority),
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
154 )
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
155 deviceExtensionsC = allocCStringArray(deviceExtensions)
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
156 defer:
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
157 deallocCStringArray(deviceExtensionsC)
1240
42eeb59f3a43 add: more tests, line and point rendering
sam <sam@basx.dev>
parents: 1239
diff changeset
158 let enabledFeatures = VkPhysicalDeviceFeatures(
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
159 fillModeNonSolid: true, depthClamp: true, wideLines: true, largePoints: true
1240
42eeb59f3a43 add: more tests, line and point rendering
sam <sam@basx.dev>
parents: 1239
diff changeset
160 )
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
161 var createDeviceInfo = VkDeviceCreateInfo(
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
162 sType: VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
163 queueCreateInfoCount: 1,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
164 pQueueCreateInfos: addr(queueInfo),
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
165 enabledLayerCount: 0,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
166 ppEnabledLayerNames: nil,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
167 enabledExtensionCount: uint32(deviceExtensions.len),
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
168 ppEnabledExtensionNames: deviceExtensionsC,
1240
42eeb59f3a43 add: more tests, line and point rendering
sam <sam@basx.dev>
parents: 1239
diff changeset
169 pEnabledFeatures: addr(enabledFeatures),
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
170 )
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
171 checkVkResult vkCreateDevice(
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
172 physicalDevice = result.physicalDevice,
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
173 pCreateInfo = addr createDeviceInfo,
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
174 pAllocator = nil,
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
175 pDevice = addr result.device,
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
176 )
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
177 result.graphicsQueue =
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
178 svkGetDeviceQueue(result.device, result.graphicsQueueFamily, VK_QUEUE_GRAPHICS_BIT)
1193
5aa1184fa5eb did: a few more things
sam <sam@basx.dev>
parents: 1192
diff changeset
179
1283
0369fa1ffbd9 did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents: 1277
diff changeset
180 proc destroyVulkan*() =
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
181 if engine().vulkan.swapchain != nil:
1373
19469f21f34e did: implement vecs as distinct types
sam <sam@basx.dev>
parents: 1366
diff changeset
182 clearSwapchain()
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
183 vkDestroyDevice(engine().vulkan.device, nil)
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
184 vkDestroySurfaceKHR(engine().vulkan.instance, engine().vulkan.surface, nil)
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
185 if engine().vulkan.debugMessenger.Valid:
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
186 vkDestroyDebugUtilsMessengerEXT(
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
187 engine().vulkan.instance, engine().vulkan.debugMessenger, nil
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
188 )
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
189 vkDestroyInstance(engine().vulkan.instance, nil)
1427
676fc13685a9 did: restructure files and imports
sam <sam@basx.dev>
parents: 1423
diff changeset
190 destroyWindow(engine().vulkan.window)
1226
c8e3037aca66 add: contrib stuff
sam <sam@basx.dev>
parents: 1224
diff changeset
191
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
192 proc showSystemCursor*(value: bool) =
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
193 engine().vulkan.window.showSystemCursor(value)
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
194
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
195 proc fullscreen*(): bool =
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
196 engine().vulkan.fullscreen_internal
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
197
1283
0369fa1ffbd9 did: undo part of stupid API renaming a few weeks back ;(
sam <sam@basx.dev>
parents: 1277
diff changeset
198 proc setFullscreen*(enable: bool) =
1420
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
199 if enable != engine().vulkan.fullscreen_internal:
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
200 engine().vulkan.fullscreen_internal = enable
6f81a41603d9 did: start working on big restructuring
sam <sam@basx.dev>
parents: 1410
diff changeset
201 engine().vulkan.window.setFullscreen(engine().vulkan.fullscreen_internal)
1226
c8e3037aca66 add: contrib stuff
sam <sam@basx.dev>
parents: 1224
diff changeset
202
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
203 proc maxFramebufferSampleCount*(
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
204 maxSamples = VK_SAMPLE_COUNT_8_BIT
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
205 ): VkSampleCountFlagBits =
1226
c8e3037aca66 add: contrib stuff
sam <sam@basx.dev>
parents: 1224
diff changeset
206 let limits = svkGetPhysicalDeviceProperties().limits
c8e3037aca66 add: contrib stuff
sam <sam@basx.dev>
parents: 1224
diff changeset
207 let available = VkSampleCountFlags(
1333
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
208 limits.framebufferColorSampleCounts.uint32 and
966032c7a3aa did: formatting
sam <sam@basx.dev>
parents: 1331
diff changeset
209 limits.framebufferDepthSampleCounts.uint32
1226
c8e3037aca66 add: contrib stuff
sam <sam@basx.dev>
parents: 1224
diff changeset
210 ).toEnums
c8e3037aca66 add: contrib stuff
sam <sam@basx.dev>
parents: 1224
diff changeset
211 return min(max(available), maxSamples)