comparison tests/test_vulkan_wrapper.nim @ 96:b9fc90de1450

add: swapchain API, more refactoring
author Sam <sam@basx.dev>
date Wed, 01 Mar 2023 23:58:39 +0700
parents f036546f5ea2
children 110ed3ee5df8
comparison
equal deleted inserted replaced
95:8011e4d6372d 96:b9fc90de1450
1 import std/tables
2 import std/options
3
1 import semicongine/vulkan 4 import semicongine/vulkan
2 import semicongine/platform/window 5 import semicongine/platform/window
3 6
4 7
5 when isMainModule: 8 when isMainModule:
10 echo "Instance extensions" 13 echo "Instance extensions"
11 for extension in getInstanceExtensions(): 14 for extension in getInstanceExtensions():
12 echo " " & extension 15 echo " " & extension
13 16
14 # create instance 17 # create instance
15 var instance = createInstance( 18 var thewindow = createWindow("Test")
19 var instance = thewindow.createInstance(
16 vulkanVersion=VK_MAKE_API_VERSION(0, 1, 3, 0), 20 vulkanVersion=VK_MAKE_API_VERSION(0, 1, 3, 0),
17 instanceExtensions= @["VK_EXT_debug_utils"], 21 instanceExtensions= @["VK_EXT_debug_utils"],
18 layers= @["VK_LAYER_KHRONOS_validation"] 22 layers= @["VK_LAYER_KHRONOS_validation"]
19 ) 23 )
20 var debugger = instance.createDebugMessenger() 24 var debugger = instance.createDebugMessenger()
21 25
22 # create surface
23 var thewindow = createWindow("Test")
24 var surface = instance.createSurface(thewindow)
25
26 # diagnostic output 26 # diagnostic output
27 echo "Devices" 27 echo "Devices"
28 for device in instance.getPhysicalDevices(): 28 for device in instance.getPhysicalDevices():
29 echo " " & $device 29 echo " " & $device
30 echo " Rating: " & $device.rateGraphics()
30 echo " Extensions" 31 echo " Extensions"
31 for extension in device.getExtensions(): 32 for extension in device.getExtensions():
32 echo " " & $extension 33 echo " " & $extension
34 echo " Properties"
35 echo " " & $device.getProperties()
36 echo " Features"
37 echo " " & $device.getFeatures()
33 echo " Queue families" 38 echo " Queue families"
34 for queueFamily in device.getQueueFamilies(): 39 for queueFamily in device.getQueueFamilies():
35 echo " " & $queueFamily 40 echo " " & $queueFamily
36 echo " Surface present modes" 41 echo " Surface present modes"
37 for mode in device.getSurfacePresentModes(surface): 42 for mode in device.getSurfacePresentModes():
38 echo " " & $mode 43 echo " " & $mode
39 echo " Surface formats" 44 echo " Surface formats"
40 for format in device.getSurfaceFormats(surface): 45 for format in device.getSurfaceFormats():
41 echo " " & $format 46 echo " " & $format
42 47
43 # create devices 48 # create devices
44 var devices: seq[Device] 49 let selectedPhysicalDevice = instance.getPhysicalDevices().filterBestGraphics()
45 for physicalDevice in instance.getPhysicalDevices(): 50 var device = instance.createDevice(
46 devices.add physicalDevice.createDevice([], [], physicalDevice.getQueueFamilies(surface).filterForGraphicsPresentationQueues()) 51 selectedPhysicalDevice,
52 @[],
53 @[],
54 selectedPhysicalDevice.filterForGraphicsPresentationQueues()
55 )
56
57 echo "Created device ", device.physicalDevice.name
58 var (swapchain, res) = device.createSwapchain(device.physicalDevice.getSurfaceFormats().filterSurfaceFormat())
59 if res != VK_SUCCESS:
60 raise newException(Exception, "Unable to create swapchain")
61
62 echo "All successfull"
63 echo "Start cleanup"
47 64
48 # cleanup 65 # cleanup
49 surface.destroy() 66 swapchain.destroy()
50 for device in devices.mitems: 67 device.destroy()
51 device.destroy()
52 68
53 debugger.destroy() 69 debugger.destroy()
54 instance.destroy() 70 instance.destroy()