annotate svk/api.nim @ 1485:6e062a84c157

add: more api-starting
author sam <sam@basx.dev>
date Sat, 03 May 2025 01:03:01 +0700
parents
children 0ba3f0b2be2e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1485
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
1 import std/strutils
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
2 import std/logging
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
3
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
4 include ./vkapi
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
5
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
6 template checkVkResult*(call: untyped) =
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
7 when defined(release):
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
8 discard call
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
9 else:
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
10 # yes, a bit cheap, but this is only for nice debug output
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
11 var callstr = astToStr(call).replace("\n", "")
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
12 while callstr.find(" ") >= 0:
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
13 callstr = callstr.replace(" ", " ")
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
14 debug "Calling vulkan: ", callstr
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
15 let value = call
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
16 if value != VK_SUCCESS:
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
17 error "Vulkan error: ", astToStr(call), " returned ", $value
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
18 raise newException(
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
19 Exception, "Vulkan error: " & astToStr(call) & " returned " & $value
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
20 )
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
21
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
22 type SVkInstance* = object
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
23 vkInstance: VkInstance
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
24
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
25 proc `=copy`(a: var SVkInstance, b: SVkInstance) {.error.}
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
26
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
27 proc `=destroy`(a: SVkInstance) =
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
28 if a.vkInstance.pointer != nil:
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
29 a.vkInstance.vkDestroyInstance(nil)
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
30
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
31 proc svkCreateInstance*(
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
32 applicationName: string,
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
33 enabledLayers: openArray[string] = [],
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
34 enabledExtensions: openArray[string] = [],
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
35 engineName = "semicongine",
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
36 majorVersion = 1'u32,
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
37 minorVersion = 3'u32,
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
38 ): SVkInstance =
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
39 let
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
40 appinfo = VkApplicationInfo(
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
41 pApplicationName: applicationName,
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
42 pEngineName: engineName,
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
43 apiVersion: VK_MAKE_API_VERSION(0, majorVersion, minorVersion, 0),
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
44 )
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
45 layersC = enabledLayers.allocCStringArray()
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
46 extensionsC = enabledLayers.allocCStringArray()
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
47 createinfo = VkInstanceCreateInfo(
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
48 pApplicationInfo: addr appinfo,
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
49 enabledLayerCount: enabledLayers.len.uint32,
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
50 ppEnabledLayerNames: layersC,
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
51 enabledExtensionCount: enabledExtensions.len.uint32,
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
52 ppEnabledExtensionNames: extensionsC,
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
53 )
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
54 checkVkResult vkCreateInstance(addr createinfo, nil, addr result.vkInstance)
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
55 layersC.deallocCStringArray()
6e062a84c157 add: more api-starting
sam <sam@basx.dev>
parents:
diff changeset
56 extensionsC.deallocCStringArray()