comparison tests/test_vulkan_wrapper.nim @ 104:9eeb9a44d158

did: some refactoring
author Sam <sam@basx.dev>
date Mon, 20 Mar 2023 23:48:46 +0700
parents 1e2027dfc642
children 4059aa0d689b
comparison
equal deleted inserted replaced
103:1e2027dfc642 104:9eeb9a44d158
12 Uniforms = object 12 Uniforms = object
13 time: float32 13 time: float32
14 Pixel = object 14 Pixel = object
15 color: Vec4 15 color: Vec4
16 16
17 17 proc diagnostics(instance: Instance) =
18 when isMainModule:
19 # print basic driver infos
20 echo "Layers"
21 for layer in getLayers():
22 echo " " & layer
23 echo "Instance extensions"
24 for extension in getInstanceExtensions():
25 echo " " & extension
26
27 # create instance
28 var thewindow = createWindow("Test")
29 var instance = thewindow.createInstance(
30 vulkanVersion=VK_MAKE_API_VERSION(0, 1, 3, 0),
31 instanceExtensions= @["VK_EXT_debug_utils"],
32 layers= @["VK_LAYER_KHRONOS_validation"]
33 )
34 var debugger = instance.createDebugMessenger()
35
36 # diagnostic output 18 # diagnostic output
37 echo "Devices" 19 echo "Devices"
38 for device in instance.getPhysicalDevices(): 20 for device in instance.getPhysicalDevices():
39 echo " " & $device 21 echo " " & $device
40 echo " Rating: " & $device.rateGraphics() 22 echo " Rating: " & $device.rateGraphics()
52 for mode in device.getSurfacePresentModes(): 34 for mode in device.getSurfacePresentModes():
53 echo " " & $mode 35 echo " " & $mode
54 echo " Surface formats" 36 echo " Surface formats"
55 for format in device.getSurfaceFormats(): 37 for format in device.getSurfaceFormats():
56 echo " " & $format 38 echo " " & $format
39
40 when isMainModule:
41 # print basic driver infos
42 echo "Layers"
43 for layer in getLayers():
44 echo " " & layer
45 echo "Instance extensions"
46 for extension in getInstanceExtensions():
47 echo " " & extension
48
49 # create instance
50 var thewindow = createWindow("Test")
51 var instance = thewindow.createInstance(
52 vulkanVersion=VK_MAKE_API_VERSION(0, 1, 3, 0),
53 instanceExtensions= @["VK_EXT_debug_utils"],
54 layers= @["VK_LAYER_KHRONOS_validation"]
55 )
56 var debugger = instance.createDebugMessenger()
57 57
58 # create devices 58 # create devices
59 let selectedPhysicalDevice = instance.getPhysicalDevices().filterBestGraphics() 59 let selectedPhysicalDevice = instance.getPhysicalDevices().filterBestGraphics()
60 var device = instance.createDevice( 60 var device = instance.createDevice(
61 selectedPhysicalDevice, 61 selectedPhysicalDevice,
78 commandPool = device.createCommandPool(family=device.firstGraphicsQueue().get().family, nBuffers=1) 78 commandPool = device.createCommandPool(family=device.firstGraphicsQueue().get().family, nBuffers=1)
79 imageAvailable = device.createSemaphore() 79 imageAvailable = device.createSemaphore()
80 renderFinished = device.createSemaphore() 80 renderFinished = device.createSemaphore()
81 inflight = device.createFence() 81 inflight = device.createFence()
82 82
83 const vertexBinary = shaderCode[Vertex, Uniforms, FragmentInput](shadertype=VK_SHADER_STAGE_VERTEX_BIT, version=450, entrypoint="main", "fragpos = pos;") 83 const vertexBinary = shaderCode[Vertex, Uniforms, FragmentInput](stage=VK_SHADER_STAGE_VERTEX_BIT, version=450, entrypoint="main", "fragpos = pos;")
84 const fragmentBinary = shaderCode[FragmentInput, void, Pixel](shadertype=VK_SHADER_STAGE_FRAGMENT_BIT, version=450, entrypoint="main", "color = vec4(1, 1, 1, 0);") 84 const fragmentBinary = shaderCode[FragmentInput, void, Pixel](stage=VK_SHADER_STAGE_FRAGMENT_BIT, version=450, entrypoint="main", "color = vec4(1, 1, 1, 0);")
85 var vertexshader = createShader[Vertex, Uniforms, FragmentInput](device, "main", vertexBinary) 85 var vertexshader = createShader[Vertex, Uniforms, FragmentInput](device, VK_SHADER_STAGE_VERTEX_BIT, "main", vertexBinary)
86 var fragmentshader = createShader[FragmentInput, void, Pixel](device, "main", fragmentBinary) 86 var fragmentshader = createShader[FragmentInput, void, Pixel](device, VK_SHADER_STAGE_FRAGMENT_BIT, "main", fragmentBinary)
87 87
88 var pipeline = renderpass.createPipeline(vertexshader, fragmentshader) 88 var pipeline = renderpass.createPipeline(vertexshader, fragmentshader)
89 89
90 echo "All successfull" 90 echo "All successfull"
91 echo "Start cleanup" 91 echo "Start cleanup"
92 92
93 # cleanup 93 # cleanup
94 #pipeline.destroy()
95 #vertexshader.destroy()
96 #fragmentshader.destroy()
97 vertexshader.destroy() 94 vertexshader.destroy()
98 fragmentshader.destroy() 95 fragmentshader.destroy()
96 pipeline.destroy()
99 inflight.destroy() 97 inflight.destroy()
100 imageAvailable.destroy() 98 imageAvailable.destroy()
101 renderFinished.destroy() 99 renderFinished.destroy()
102 commandPool.destroy() 100 commandPool.destroy()
103 for fb in framebuffers.mitems: 101 for fb in framebuffers.mitems: