Mercurial > games > semicongine
annotate semicongine/rendering.nim @ 1197:f6a0dc7ad052 compiletime-tests
sync from bedroom to office
author | sam <sam@basx.dev> |
---|---|
date | Fri, 12 Jul 2024 23:06:29 +0700 |
parents | 82feceae80b1 |
children | 96a094cd0c78 |
rev | line source |
---|---|
1192 | 1 # in this file: |
2 # - const defintions for rendering | |
3 # - custom pragma defintions for rendering | |
4 # - type defintions for rendering | |
5 # - some utils code that is used in mutiple rendering files | |
6 # - inclusion of all rendering files | |
7 | |
8 | |
9 # const definitions | |
1197 | 10 const INFLIGHTFRAMES* = 2'u32 |
1190
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
11 const BUFFER_ALIGNMENT = 64'u64 # align offsets inside buffers along this alignment |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
12 const MEMORY_BLOCK_ALLOCATION_SIZE = 100_000_000'u64 # ca. 100mb per block, seems reasonable |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
13 const BUFFER_ALLOCATION_SIZE = 9_000_000'u64 # ca. 9mb per block, seems reasonable, can put 10 buffers into one memory block |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
14 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
15 # custom pragmas to classify shader attributes |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
16 template VertexAttribute* {.pragma.} |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
17 template InstanceAttribute* {.pragma.} |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
18 template Pass* {.pragma.} |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
19 template PassFlat* {.pragma.} |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
20 template ShaderOutput* {.pragma.} |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
21 |
1193 | 22 # there is a big, bad global vulkan object |
23 # believe me, this makes everything much, much easier | |
24 | |
25 include ./platform/window # for NativeWindow | |
26 include ./platform/surface # For CreateNativeSurface | |
27 | |
28 type | |
29 VulkanGlobals* = object | |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
30 # populated through InitVulkan proc |
1193 | 31 instance*: VkInstance |
32 device*: VkDevice | |
33 physicalDevice*: VkPhysicalDevice | |
34 surface: VkSurfaceKHR | |
35 window: NativeWindow | |
36 graphicsQueueFamily*: uint32 | |
37 graphicsQueue*: VkQueue | |
1197 | 38 # unclear as of yet |
39 anisotropy*: float32 = 0 # needs to be enable during device creation | |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
40 Swapchain = object |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
41 # parameters to InitSwapchain, required for swapchain recreation |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
42 renderPass: VkRenderPass |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
43 vSync: bool |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
44 samples: VkSampleCountFlagBits |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
45 # populated through InitSwapchain proc |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
46 vk: VkSwapchainKHR |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
47 msaaImage: VkImage |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
48 msaaMemory: VkDeviceMemory |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
49 msaaImageView: VkImageView |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
50 framebuffers: seq[VkFramebuffer] |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
51 framebufferViews: seq[VkImageView] |
1197 | 52 queueFinishedFence*: array[INFLIGHTFRAMES.int, VkFence] |
53 imageAvailableSemaphore*: array[INFLIGHTFRAMES.int, VkSemaphore] | |
54 renderFinishedSemaphore*: array[INFLIGHTFRAMES.int, VkSemaphore] | |
1196 | 55 currentFiF: range[0 .. (INFLIGHTFRAMES - 1).int] |
1197 | 56 currentFramebufferIndex: uint32 |
1193 | 57 |
58 var vulkan*: VulkanGlobals | |
59 | |
1190
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
60 type |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
61 # type aliases |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
62 SupportedGPUType = float32 | float64 | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | TVec2[int32] | TVec2[int64] | TVec3[int32] | TVec3[int64] | TVec4[int32] | TVec4[int64] | TVec2[uint32] | TVec2[uint64] | TVec3[uint32] | TVec3[uint64] | TVec4[uint32] | TVec4[uint64] | TVec2[float32] | TVec2[float64] | TVec3[float32] | TVec3[float64] | TVec4[float32] | TVec4[float64] | TMat2[float32] | TMat2[float64] | TMat23[float32] | TMat23[float64] | TMat32[float32] | TMat32[float64] | TMat3[float32] | TMat3[float64] | TMat34[float32] | TMat34[float64] | TMat43[float32] | TMat43[float64] | TMat4[float32] | TMat4[float64] |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
63 TextureType = TVec1[uint8] | TVec2[uint8] | TVec3[uint8] | TVec4[uint8] |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
64 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
65 IndexType = enum |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
66 None, UInt8, UInt16, UInt32 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
67 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
68 # shader related types |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
69 DescriptorSetType* = enum |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
70 GlobalSet |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
71 MaterialSet |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
72 DescriptorSet*[T: object, sType: static DescriptorSetType] = object |
1192 | 73 data*: T |
1190
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
74 vk: array[INFLIGHTFRAMES.int, VkDescriptorSet] |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
75 Pipeline*[TShader] = object |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
76 vk: VkPipeline |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
77 layout: VkPipelineLayout |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
78 descriptorSetLayouts: array[DescriptorSetType, VkDescriptorSetLayout] |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
79 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
80 # memory/buffer related types |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
81 MemoryBlock* = object |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
82 vk: VkDeviceMemory |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
83 size: uint64 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
84 rawPointer: pointer # if not nil, this is mapped memory |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
85 offsetNextFree: uint64 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
86 BufferType* = enum |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
87 VertexBuffer |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
88 VertexBufferMapped |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
89 IndexBuffer |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
90 IndexBufferMapped |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
91 UniformBuffer |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
92 UniformBufferMapped |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
93 Buffer* = object |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
94 vk: VkBuffer |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
95 size: uint64 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
96 rawPointer: pointer # if not nil, buffer is using mapped memory |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
97 offsetNextFree: uint64 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
98 Texture*[T: TextureType] = object |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
99 vk: VkImage |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
100 imageview: VkImageView |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
101 sampler: VkSampler |
1192 | 102 width*: uint32 |
103 height*: uint32 | |
104 data*: seq[T] | |
1190
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
105 GPUArray*[T: SupportedGPUType, TBuffer: static BufferType] = object |
1192 | 106 data*: seq[T] |
1190
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
107 buffer: Buffer |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
108 offset: uint64 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
109 GPUValue*[T: object|array, TBuffer: static BufferType] = object |
1192 | 110 data*: T |
1190
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
111 buffer: Buffer |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
112 offset: uint64 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
113 GPUData = GPUArray | GPUValue |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
114 |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
115 RenderData* = object |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
116 descriptorPool: VkDescriptorPool |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
117 memory: array[VK_MAX_MEMORY_TYPES.int, seq[MemoryBlock]] |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
118 buffers: array[BufferType, seq[Buffer]] |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
119 |
1192 | 120 template ForDescriptorFields(shader: typed, fieldname, valuename, typename, countname, bindingNumber, body: untyped): untyped = |
121 var `bindingNumber` {.inject.} = 1'u32 | |
122 for theFieldname, value in fieldPairs(shader): | |
123 when typeof(value) is Texture: | |
124 block: | |
125 const `fieldname` {.inject.} = theFieldname | |
126 const `typename` {.inject.} = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER | |
127 const `countname` {.inject.} = 1'u32 | |
128 let `valuename` {.inject.} = value | |
129 body | |
130 `bindingNumber`.inc | |
131 elif typeof(value) is object: | |
132 block: | |
133 const `fieldname` {.inject.} = theFieldname | |
134 const `typename` {.inject.} = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER | |
135 const `countname` {.inject.} = 1'u32 | |
136 let `valuename` {.inject.} = value | |
137 body | |
138 `bindingNumber`.inc | |
139 elif typeof(value) is array: | |
140 when elementType(value) is Texture: | |
141 block: | |
142 const `fieldname` {.inject.} = theFieldname | |
143 const `typename` {.inject.} = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER | |
144 const `countname` {.inject.} = uint32(typeof(value).len) | |
145 let `valuename` {.inject.} = value | |
146 body | |
147 `bindingNumber`.inc | |
148 elif elementType(value) is object: | |
149 block: | |
150 const `fieldname` {.inject.} = theFieldname | |
151 const `typename` {.inject.} = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER | |
152 const `countname` {.inject.} = uint32(typeof(value).len) | |
153 let `valuename` {.inject.} = value | |
154 body | |
155 `bindingNumber`.inc | |
156 else: | |
157 {.error: "Unsupported descriptor type: " & typetraits.name(typeof(value)).} | |
158 | |
1190
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
159 include ./rendering/vulkan_wrappers |
1194 | 160 include ./rendering/swapchain |
1190
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
161 include ./rendering/shaders |
a3eb305bcac2
start of complete and total refactoring: the ULTIMATE
sam <sam@basx.dev>
parents:
diff
changeset
|
162 include ./rendering/renderer |
1193 | 163 |
164 | |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
165 proc InitVulkan(appName: string = "semicongine app"): VulkanGlobals = |
1193 | 166 |
167 include ./platform/vulkan_extensions # for REQUIRED_PLATFORM_EXTENSIONS | |
168 | |
169 # instance creation | |
170 # | |
171 when not defined(release): | |
172 let requiredExtensions = REQUIRED_PLATFORM_EXTENSIONS & @["VK_KHR_surface", "VK_EXT_debug_utils"] | |
173 let layers: seq[string] = if hasValidationLayer(): @["VK_LAYER_KHRONOS_validation"] else: @[] | |
174 else: | |
175 let requiredExtensions = REQUIRED_PLATFORM_EXTENSIONS & @["VK_KHR_surface"] | |
176 let layers: seq[string] | |
177 | |
178 var | |
179 layersC = allocCStringArray(layers) | |
180 instanceExtensionsC = allocCStringArray(requiredExtensions) | |
181 defer: | |
182 deallocCStringArray(layersC) | |
183 deallocCStringArray(instanceExtensionsC) | |
184 | |
185 var | |
186 appinfo = VkApplicationInfo( | |
187 sType: VK_STRUCTURE_TYPE_APPLICATION_INFO, | |
188 pApplicationName: appName, | |
189 pEngineName: "semicongine", | |
190 apiVersion: VK_MAKE_API_VERSION(0, 1, 3, 0), | |
191 ) | |
192 createinfo = VkInstanceCreateInfo( | |
193 sType: VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, | |
194 pApplicationInfo: addr(appinfo), | |
195 enabledLayerCount: layers.len.uint32, | |
196 ppEnabledLayerNames: layersC, | |
197 enabledExtensionCount: requiredExtensions.len.uint32, | |
198 ppEnabledExtensionNames: instanceExtensionsC | |
199 ) | |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
200 checkVkResult vkCreateInstance(addr(createinfo), nil, addr(result.instance)) |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
201 loadVulkan(result.instance) |
1193 | 202 |
203 # load extensions | |
204 # | |
205 for extension in requiredExtensions: | |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
206 loadExtension(result.instance, $extension) |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
207 result.window = CreateWindow(appName) |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
208 result.surface = CreateNativeSurface(result.instance, result.window) |
1193 | 209 |
210 # logical device creation | |
211 | |
212 # TODO: allowing support for physical devices without hasUniformBufferStandardLayout | |
213 # would require us to ship different shaders, so we don't support standard layout | |
214 # if that will be added, check the function vulkan/shaders.nim:glslUniforms and update accordingly | |
215 # let hasUniformBufferStandardLayout = "VK_KHR_uniform_buffer_standard_layout" in physicalDevice.getExtensions() | |
216 # var deviceExtensions = @["VK_KHR_swapchain", "VK_KHR_uniform_buffer_standard_layout"] | |
217 var deviceExtensions = @["VK_KHR_swapchain"] | |
218 for extension in deviceExtensions: | |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
219 loadExtension(result.instance, extension) |
1193 | 220 |
221 # get physical device and graphics queue family | |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
222 result.physicalDevice = GetBestPhysicalDevice(result.instance) |
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
223 result.graphicsQueueFamily = GetQueueFamily(result.physicalDevice, VK_QUEUE_GRAPHICS_BIT) |
1193 | 224 |
225 let | |
226 priority = cfloat(1) | |
227 queueInfo = VkDeviceQueueCreateInfo( | |
228 sType: VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, | |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
229 queueFamilyIndex: result.graphicsQueueFamily, |
1193 | 230 queueCount: 1, |
231 pQueuePriorities: addr(priority), | |
232 ) | |
233 deviceExtensionsC = allocCStringArray(deviceExtensions) | |
234 defer: deallocCStringArray(deviceExtensionsC) | |
235 var createDeviceInfo = VkDeviceCreateInfo( | |
236 sType: VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, | |
237 queueCreateInfoCount: 1, | |
238 pQueueCreateInfos: addr(queueInfo), | |
239 enabledLayerCount: 0, | |
240 ppEnabledLayerNames: nil, | |
241 enabledExtensionCount: uint32(deviceExtensions.len), | |
242 ppEnabledExtensionNames: deviceExtensionsC, | |
243 pEnabledFeatures: nil, | |
244 ) | |
245 checkVkResult vkCreateDevice( | |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
246 physicalDevice = result.physicalDevice, |
1193 | 247 pCreateInfo = addr createDeviceInfo, |
248 pAllocator = nil, | |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
249 pDevice = addr result.device |
1193 | 250 ) |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
251 result.graphicsQueue = svkGetDeviceQueue(result.device, result.graphicsQueueFamily, VK_QUEUE_GRAPHICS_BIT) |
1193 | 252 |
1195
cfba2b7e00d0
did: most of swapchain, swap still needs to be done
sam <sam@basx.dev>
parents:
1194
diff
changeset
|
253 vulkan = InitVulkan() |