Mercurial > games > semicongine
comparison semiconginev2/old/vulkan/syncing.nim @ 1218:56781cc0fc7c compiletime-tests
did: renamge main package
author | sam <sam@basx.dev> |
---|---|
date | Wed, 17 Jul 2024 21:01:37 +0700 |
parents | semicongine/old/vulkan/syncing.nim@a3eb305bcac2 |
children |
comparison
equal
deleted
inserted
replaced
1217:f819a874058f | 1218:56781cc0fc7c |
---|---|
1 import ../core | |
2 import ./device | |
3 | |
4 type | |
5 Semaphore* = object | |
6 vk*: VkSemaphore | |
7 device: Device | |
8 Fence* = object | |
9 vk*: VkFence | |
10 device: Device | |
11 awaitAction: proc() = nil | |
12 | |
13 proc CreateSemaphore*(device: Device): Semaphore = | |
14 assert device.vk.Valid | |
15 var semaphoreInfo = VkSemaphoreCreateInfo(sType: VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO) | |
16 result.device = device | |
17 checkVkResult device.vk.vkCreateSemaphore(addr(semaphoreInfo), nil, addr(result.vk)) | |
18 | |
19 proc CreateFence*(device: Device, awaitAction: proc() = nil): Fence = | |
20 assert device.vk.Valid | |
21 var fenceInfo = VkFenceCreateInfo( | |
22 sType: VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, | |
23 flags: toBits [VK_FENCE_CREATE_SIGNALED_BIT] | |
24 ) | |
25 result.device = device | |
26 result.awaitAction = awaitAction | |
27 checkVkResult device.vk.vkCreateFence(addr(fenceInfo), nil, addr(result.vk)) | |
28 | |
29 proc Await*(fence: var Fence) = | |
30 assert fence.device.vk.Valid | |
31 assert fence.vk.Valid | |
32 checkVkResult vkWaitForFences(fence.device.vk, 1, addr fence.vk, false, high(uint64)) | |
33 if fence.awaitAction != nil: | |
34 fence.awaitAction() | |
35 | |
36 proc Reset*(fence: var Fence) = | |
37 assert fence.device.vk.Valid | |
38 assert fence.vk.Valid | |
39 checkVkResult fence.device.vk.vkResetFences(1, addr fence.vk) | |
40 | |
41 proc Destroy*(semaphore: var Semaphore) = | |
42 assert semaphore.device.vk.Valid | |
43 assert semaphore.vk.Valid | |
44 semaphore.device.vk.vkDestroySemaphore(semaphore.vk, nil) | |
45 semaphore.vk.Reset | |
46 | |
47 proc Destroy*(fence: var Fence) = | |
48 assert fence.device.vk.Valid | |
49 assert fence.vk.Valid | |
50 fence.device.vk.vkDestroyFence(fence.vk, nil) | |
51 fence.vk.Reset |