Skip to content

Commit b4a7ec7

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents f38685c + cd5d828 commit b4a7ec7

7 files changed

+168
-13
lines changed

.idea/libraries/Gradle__com_github_kotlin_graphics_appBuffer_aff415e3566ab5a9da28efcd569fd55b92a16070.xml

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/libraries/Gradle__com_github_kotlin_graphics_gli_e885226c97b78946e4a31677399b0014ac732a4d.xml

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/libraries/Gradle__com_github_kotlin_graphics_glm_1b99fb5661dd9fc224178b80835fc8edec7b835a.xml

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ memFree(pImage)
8787
One typical issue Vulkan developers encounter when filling out a CreateInfo struct field by field is that `sType` is incorrect.
8888

8989
VK² provides constructors for all CreateInfo objects (and others) where `sType` is automatically filled with the correct value and `pNext` set to a `nullptr` by default. All other field are also initialized to zero. There are exceptions though.
90-
Moreover, all the allocations takes place in a special buffer that is cleared every refresh and resize.
90+
91+
Moreover, all the allocations takes place in a special buffer, called [appBuffer](https://github.com/kotlin-graphics/appBuffer) that is cleared every refresh, or at least it should be from time to time.
92+
9193
VK² provides also special method accepting glm classes, like `extent` accepting a `(Vec3i)` or `(Vec2i, Int)`.
9294
Here's how the same code looks with a constructor:
9395

@@ -107,4 +109,7 @@ val info = vk.ImageCreateInfo {
107109
image = device createImage info
108110
```
109111

112+
Errors will be checked automatically in debug mode, but you can set `DEBUG` explicitely as you wish.
113+
In case `VULKAN_NO_EXCEPTIONS` is `true`, errors will be reported in the `System.err` stream, otherwise the exception to the corresponding error will be thrown.
114+
110115
TODO

src/main/kotlin/vkk/direct fields.kt

Lines changed: 70 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ inline var VkInstanceCreateInfo.type
4242
inline var VkInstanceCreateInfo.next
4343
get() = VkInstanceCreateInfo.npNext(adr)
4444
set(value) = VkInstanceCreateInfo.npNext(adr, value)
45+
// flags is reserved for future usage, till now must be 0
46+
//inline var VkInstanceCreateInfo.flag: VkInstanceCreateFlags
47+
// get() = VkInstanceCreateInfo.nflags(adr)
48+
// set(value) = VkInstanceCreateInfo.nflags(adr, value)
4549
inline var VkInstanceCreateInfo.flags: VkInstanceCreateFlags
4650
get() = VkInstanceCreateInfo.nflags(adr)
4751
set(value) = VkInstanceCreateInfo.nflags(adr, value)
@@ -556,6 +560,9 @@ inline var VkDeviceQueueCreateInfo.type: VkStructureType
556560
inline var VkDeviceQueueCreateInfo.next
557561
get() = VkDeviceQueueCreateInfo.npNext(adr)
558562
set(value) = VkDeviceQueueCreateInfo.npNext(adr, value)
563+
inline var VkDeviceQueueCreateInfo.flag: VkDeviceQueueCreate
564+
get() = TODO()
565+
set(value) = VkDeviceQueueCreateInfo.nflags(adr, value.i)
559566
inline var VkDeviceQueueCreateInfo.flags: VkDeviceQueueCreateFlags
560567
get() = VkDeviceQueueCreateInfo.nflags(adr)
561568
set(value) = VkDeviceQueueCreateInfo.nflags(adr, value)
@@ -589,7 +596,7 @@ inline var VkDeviceCreateInfo.type: VkStructureType
589596
inline var VkDeviceCreateInfo.next
590597
get() = VkDeviceCreateInfo.npNext(adr)
591598
set(value) = VkDeviceCreateInfo.npNext(adr, value)
592-
inline var VkDeviceCreateInfo.flags: VkDeviceQueueCreateFlags
599+
inline var VkDeviceCreateInfo.flags: VkDeviceCreateFlags
593600
get() = VkDeviceCreateInfo.nflags(adr)
594601
set(value) = VkDeviceCreateInfo.nflags(adr, value)
595602
//inline val VkDeviceCreateInfo.queueCreateInfoCount get() = queueCreateInfoCount()
@@ -811,7 +818,7 @@ inline var VkFenceCreateInfo.type: VkStructureType
811818
inline var VkFenceCreateInfo.next
812819
get() = VkFenceCreateInfo.npNext(adr)
813820
set(value) = VkFenceCreateInfo.npNext(adr, value)
814-
inline var VkFenceCreateInfo.flags: VkSemaphoreCreateFlags
821+
inline var VkFenceCreateInfo.flags: VkFenceCreateFlags
815822
get() = VkFenceCreateInfo.nflags(adr)
816823
set(value) = VkFenceCreateInfo.nflags(adr, value)
817824

@@ -866,6 +873,10 @@ inline var VkBufferCreateInfo.type: VkStructureType
866873
inline var VkBufferCreateInfo.next
867874
get() = VkBufferCreateInfo.npNext(adr)
868875
set(value) = VkBufferCreateInfo.npNext(adr, value)
876+
/** JVM custom */
877+
inline var VkBufferCreateInfo.flag: VkBufferCreate
878+
get() = TODO()
879+
set(value) = VkBufferCreateInfo.nflags(adr, value.i)
869880
inline var VkBufferCreateInfo.flags: VkBufferCreateFlags
870881
get() = VkBufferCreateInfo.nflags(adr)
871882
set(value) = VkBufferCreateInfo.nflags(adr, value)
@@ -938,6 +949,10 @@ inline var VkImageCreateInfo.type: VkStructureType
938949
inline var VkImageCreateInfo.next
939950
get() = VkImageCreateInfo.npNext(adr)
940951
set(value) = VkImageCreateInfo.npNext(adr, value)
952+
/** JVM custom */
953+
inline var VkImageCreateInfo.flag: VkImageCreate
954+
get() = TODO()
955+
set(value) = VkImageCreateInfo.nflags(adr, value.i)
941956
inline var VkImageCreateInfo.flags: VkImageCreateFlags
942957
get() = VkImageCreateInfo.nflags(adr)
943958
set(value) = VkImageCreateInfo.nflags(adr, value)
@@ -1382,6 +1397,7 @@ inline fun VkRect2D.extent(width: Int, height: Int) {
13821397

13831398
/** JVM custom */
13841399
inline fun VkRect2D.extent(width: Number, height: Number) = extent(width.i, height.i)
1400+
13851401
/** JVM custom */
13861402
inline fun VkRect2D.offset(width: Number, height: Number) = offset(width.i, height.i)
13871403

@@ -1633,6 +1649,10 @@ inline var VkGraphicsPipelineCreateInfo.type: VkStructureType
16331649
inline var VkGraphicsPipelineCreateInfo.next
16341650
get() = VkGraphicsPipelineCreateInfo.npNext(adr)
16351651
set(value) = VkGraphicsPipelineCreateInfo.npNext(adr, value)
1652+
/** JVM custom */
1653+
inline var VkGraphicsPipelineCreateInfo.flag: VkPipelineCreate
1654+
get() = TODO()
1655+
set(value) = VkGraphicsPipelineCreateInfo.nflags(adr, value.i)
16361656
inline var VkGraphicsPipelineCreateInfo.flags: VkPipelineCreateFlags
16371657
get() = VkGraphicsPipelineCreateInfo.nflags(adr)
16381658
set(value) = VkGraphicsPipelineCreateInfo.nflags(adr, value)
@@ -1832,6 +1852,10 @@ inline var VkDescriptorSetLayoutBinding.descriptorType: VkDescriptorType
18321852
inline var VkDescriptorSetLayoutBinding.descriptorCount
18331853
get() = VkDescriptorSetLayoutBinding.ndescriptorCount(adr)
18341854
set(value) = VkDescriptorSetLayoutBinding.ndescriptorCount(adr, value)
1855+
/** JVM custom */
1856+
inline var VkDescriptorSetLayoutBinding.stageFlag: VkShaderStage
1857+
get() = TODO()
1858+
set(value) = VkDescriptorSetLayoutBinding.nstageFlags(adr, value.i)
18351859
inline var VkDescriptorSetLayoutBinding.stageFlags: VkShaderStageFlags
18361860
get() = VkDescriptorSetLayoutBinding.nstageFlags(adr)
18371861
set(value) = VkDescriptorSetLayoutBinding.nstageFlags(adr, value)
@@ -1859,6 +1883,10 @@ inline var VkDescriptorSetLayoutCreateInfo.type: VkStructureType
18591883
inline var VkDescriptorSetLayoutCreateInfo.next
18601884
get() = VkDescriptorSetLayoutCreateInfo.npNext(adr)
18611885
set(value) = VkDescriptorSetLayoutCreateInfo.npNext(adr, value)
1886+
/** JVM custom */
1887+
inline var VkDescriptorSetLayoutCreateInfo.flag: VkDescriptorSetLayoutCreate
1888+
get() = TODO()
1889+
set(value) = VkDescriptorSetLayoutCreateInfo.nflags(adr, value.i)
18621890
inline var VkDescriptorSetLayoutCreateInfo.flags: VkDescriptorSetLayoutCreateFlags
18631891
get() = VkDescriptorSetLayoutCreateInfo.nflags(adr)
18641892
set(value) = VkDescriptorSetLayoutCreateInfo.nflags(adr, value)
@@ -1889,6 +1917,10 @@ inline var VkDescriptorPoolCreateInfo.type: VkStructureType
18891917
inline var VkDescriptorPoolCreateInfo.next
18901918
get() = VkDescriptorPoolCreateInfo.npNext(adr)
18911919
set(value) = VkDescriptorPoolCreateInfo.npNext(adr, value)
1920+
/** JVM custom */
1921+
inline var VkDescriptorPoolCreateInfo.flag: VkDescriptorPoolCreate
1922+
get() = TODO()
1923+
set(value) = VkDescriptorPoolCreateInfo.nflags(adr, value.i)
18921924
inline var VkDescriptorPoolCreateInfo.flags: VkDescriptorPoolCreateFlags
18931925
get() = VkDescriptorPoolCreateInfo.nflags(adr)
18941926
set(value) = VkDescriptorPoolCreateInfo.nflags(adr, value)
@@ -2054,7 +2086,10 @@ inline fun VkFramebufferCreateInfo.extent(extent: Vec2i, layers: Int) {
20542086
this.layers = layers
20552087
}
20562088

2057-
2089+
/** JVM custom */
2090+
inline var VkAttachmentDescription.flag: VkAttachmentDescriptionFlag
2091+
get() = TODO()
2092+
set(value) = VkAttachmentDescription.nflags(adr, value.i)
20582093
inline var VkAttachmentDescription.flags: VkAttachmentDescriptionFlags
20592094
get() = VkAttachmentDescription.nflags(adr)
20602095
set(value) = VkAttachmentDescription.nflags(adr, value)
@@ -2092,6 +2127,10 @@ inline var VkAttachmentReference.layout: VkImageLayout
20922127
set(value) = VkAttachmentReference.nlayout(adr, value.i)
20932128

20942129

2130+
/** JVM custom */
2131+
inline var VkSubpassDescription.flag: VkSubpassDescriptionFlag
2132+
get() = TODO()
2133+
set(value) = VkSubpassDescription.nflags(adr, value.i)
20952134
inline var VkSubpassDescription.flags: VkSubpassDescriptionFlags
20962135
get() = VkSubpassDescription.nflags(adr)
20972136
set(value) = VkSubpassDescription.nflags(adr, value)
@@ -2156,7 +2195,9 @@ inline var VkRenderPassCreateInfo.next
21562195
inline var VkRenderPassCreateInfo.flags: VkRenderPassCreateFlags
21572196
get() = VkRenderPassCreateInfo.nflags(adr)
21582197
set(value) = VkRenderPassCreateInfo.nflags(adr, value)
2159-
inline val VkRenderPassCreateInfo.attachmentCount get() = VkRenderPassCreateInfo.nattachmentCount(adr)
2198+
inline var VkRenderPassCreateInfo.attachmentCount: Int
2199+
get() = VkRenderPassCreateInfo.nattachmentCount(adr)
2200+
set(value) = VkRenderPassCreateInfo.nattachmentCount(adr, value)
21602201
inline var VkRenderPassCreateInfo.attachments: VkAttachmentDescription.Buffer?
21612202
get() = VkRenderPassCreateInfo.npAttachments(adr)
21622203
set(value) = VkRenderPassCreateInfo.npAttachments(adr, value)
@@ -2167,7 +2208,9 @@ inline var VkRenderPassCreateInfo.attachment: VkAttachmentDescription?
21672208
memPutAddress(adr + VkRenderPassCreateInfo.PATTACHMENTS, memAddressSafe(value))
21682209
VkRenderPassCreateInfo.nattachmentCount(adr, if (value == null) 0 else 1)
21692210
}
2170-
inline val VkRenderPassCreateInfo.subpassCount get() = VkRenderPassCreateInfo.nsubpassCount(adr)
2211+
inline var VkRenderPassCreateInfo.subpassCount: Int
2212+
get() = VkRenderPassCreateInfo.nsubpassCount(adr)
2213+
set(value) = VkRenderPassCreateInfo.nsubpassCount(adr, value)
21712214
inline var VkRenderPassCreateInfo.subpasses: VkSubpassDescription.Buffer
21722215
get() = VkRenderPassCreateInfo.npSubpasses(adr)
21732216
set(value) = VkRenderPassCreateInfo.npSubpasses(adr, value)
@@ -2178,7 +2221,9 @@ inline var VkRenderPassCreateInfo.subpass: VkSubpassDescription
21782221
memPutAddress(adr + VkRenderPassCreateInfo.PSUBPASSES, value.address())
21792222
VkRenderPassCreateInfo.nsubpassCount(adr, 1)
21802223
}
2181-
inline val VkRenderPassCreateInfo.dependencyCount get() = VkRenderPassCreateInfo.ndependencyCount(adr)
2224+
inline var VkRenderPassCreateInfo.dependencyCount: Int
2225+
get() = VkRenderPassCreateInfo.ndependencyCount(adr)
2226+
set(value) = VkRenderPassCreateInfo.ndependencyCount(adr, value)
21822227
inline var VkRenderPassCreateInfo.dependencies: VkSubpassDependency.Buffer?
21832228
get() = VkRenderPassCreateInfo.npDependencies(adr)
21842229
set(value) = VkRenderPassCreateInfo.npDependencies(adr, value)
@@ -2197,6 +2242,10 @@ inline var VkCommandPoolCreateInfo.type: VkStructureType
21972242
inline var VkCommandPoolCreateInfo.next
21982243
get() = VkCommandPoolCreateInfo.npNext(adr)
21992244
set(value) = VkCommandPoolCreateInfo.npNext(adr, value)
2245+
/** JVM custom */
2246+
inline var VkCommandPoolCreateInfo.flag: VkCommandPoolCreate
2247+
get() = TODO()
2248+
set(value) = VkCommandPoolCreateInfo.nflags(adr, value.i)
22002249
inline var VkCommandPoolCreateInfo.flags: VkCommandPoolCreateFlags
22012250
get() = VkCommandPoolCreateInfo.nflags(adr)
22022251
set(value) = VkCommandPoolCreateInfo.nflags(adr, value)
@@ -2254,6 +2303,10 @@ inline var VkCommandBufferBeginInfo.type: VkStructureType
22542303
inline var VkCommandBufferBeginInfo.next
22552304
get() = VkCommandBufferBeginInfo.npNext(adr)
22562305
set(value) = VkCommandBufferBeginInfo.npNext(adr, value)
2306+
/** JVM custom */
2307+
inline var VkCommandBufferBeginInfo.flag: VkCommandBufferUsage
2308+
get() = TODO()
2309+
set(value) = VkCommandBufferBeginInfo.nflags(adr, value.i)
22572310
inline var VkCommandBufferBeginInfo.flags: VkCommandBufferUsageFlags
22582311
get() = VkCommandBufferBeginInfo.nflags(adr)
22592312
set(value) = VkCommandBufferBeginInfo.nflags(adr, value)
@@ -2502,6 +2555,13 @@ inline val VkRenderPassBeginInfo.clearValueCount get() = clearValueCount()
25022555
inline var VkRenderPassBeginInfo.clearValues: VkClearValue.Buffer?
25032556
get() = VkRenderPassBeginInfo.npClearValues(adr)
25042557
set(value) = VkRenderPassBeginInfo.npClearValues(adr, value)
2558+
/** JVM custom */
2559+
inline var VkRenderPassBeginInfo.clearValue: VkClearValue?
2560+
get() = VkRenderPassBeginInfo.npClearValues(adr)?.get(0)
2561+
set(value) {
2562+
memPutAddress(adr + VkRenderPassBeginInfo.PCLEARVALUES, value?.adr ?: NULL)
2563+
VkRenderPassBeginInfo.nclearValueCount(adr, if (value == null) 0 else 1)
2564+
}
25052565

25062566
/** JVM custom */
25072567
inline fun VkRenderPassBeginInfo.clearValue(vec4: Vec4) {
@@ -5374,6 +5434,10 @@ inline var VkDebugReportCallbackCreateInfoEXT.type
53745434
inline var VkDebugReportCallbackCreateInfoEXT.next
53755435
get() = VkDebugReportCallbackCreateInfoEXT.npNext(adr)
53765436
set(value) = VkDebugReportCallbackCreateInfoEXT.npNext(adr, value)
5437+
/** JVM custom */
5438+
inline var VkDebugReportCallbackCreateInfoEXT.flag: VkDebugReport
5439+
get() = TODO()
5440+
set(value) = VkDebugReportCallbackCreateInfoEXT.nflags(adr, value.i)
53775441
inline var VkDebugReportCallbackCreateInfoEXT.flags: VkDebugReportFlagsEXT
53785442
get() = VkDebugReportCallbackCreateInfoEXT.nflags(adr)
53795443
set(value) = VkDebugReportCallbackCreateInfoEXT.nflags(adr, value)

src/main/kotlin/vkk/extension functions.kt

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import kotlin.reflect.KMutableProperty0
1414
import ab.advance
1515
import ab.appBuffer
1616
import ab.appBuffer.ptr
17+
import glm_.bool
1718

1819

1920
/*
@@ -133,6 +134,13 @@ inline infix fun VkCommandBuffer.nextSubpass(contents: VkSubpassContents) {
133134
VK10.vkCmdNextSubpass(this, contents.i)
134135
}
135136

137+
inline fun VkCommandBuffer.pipelineBarrier(srcStageMask: VkPipelineStage, dstStageMask: VkPipelineStage,
138+
dependencyFlags: VkDependencyFlags = 0,
139+
memoryBarrier: VkMemoryBarrier? = null,
140+
bufferMemoryBarrier: VkBufferMemoryBarrier? = null,
141+
imageMemoryBarrier: VkImageMemoryBarrier? = null) =
142+
pipelineBarrier(srcStageMask.i, dstStageMask.i, dependencyFlags, memoryBarrier, bufferMemoryBarrier, imageMemoryBarrier)
143+
136144
inline fun VkCommandBuffer.pipelineBarrier(srcStageMask: VkPipelineStageFlags, dstStageMask: VkPipelineStageFlags,
137145
dependencyFlags: VkDependencyFlags = 0,
138146
memoryBarrier: VkMemoryBarrier? = null,
@@ -229,7 +237,7 @@ inline fun VkCommandBuffer.submit(queue: VkQueue, submitInfoPNext: Pointer? = nu
229237
VkDevice
230238
*/
231239

232-
inline fun VkDevice.acquireNextImageKHR(swapchain: VkSwapchainKHR, timeout: Long, semaphore: VkSemaphore, fence: VkFence): Int {
240+
inline fun VkDevice.acquireNextImageKHR(swapchain: VkSwapchainKHR, timeout: Long, semaphore: VkSemaphore, fence: VkFence = NULL): Int {
233241
val pImageIndex = appBuffer.int
234242
VK_CHECK_RESULT(KHRSwapchain.nvkAcquireNextImageKHR(this, swapchain, timeout, semaphore, fence, pImageIndex))
235243
return memGetInt(pImageIndex)
@@ -320,6 +328,10 @@ inline infix fun VkDevice.createDescriptorSetLayout(createInfo: VkDescriptorSetL
320328
return memGetLong(pSetLayout)
321329
}
322330

331+
inline infix fun VkDevice.createFence(flag: VkFenceCreate): VkFence {
332+
return createFence(vk.FenceCreateInfo { this.flags = flag.i })
333+
}
334+
323335
inline infix fun VkDevice.createFence(flags: VkFenceCreateFlags): VkFence {
324336
return createFence(vk.FenceCreateInfo { this.flags = flags })
325337
}
@@ -449,6 +461,11 @@ inline infix fun VkDevice.destroyFences(fences: ArrayList<VkFence>) {
449461
VK10.nvkDestroyFence(this, fence, NULL)
450462
}
451463

464+
inline infix fun VkDevice.destroyFences(fences: VkFenceArray) {
465+
for (fence in fences)
466+
VK10.nvkDestroyFence(this, fence, NULL)
467+
}
468+
452469
inline infix fun VkDevice.destroyFramebuffer(framebuffer: VkFramebuffer) {
453470
VK10.nvkDestroyFramebuffer(this, framebuffer, NULL)
454471
}
@@ -615,6 +632,7 @@ inline infix fun VkDevice.getSwapchainImagesKHR(swapchain: VkSwapchainKHR): VkIm
615632
inline infix fun VkDevice.resetCommandPool(commandPool: VkCommandPool) {
616633
resetCommandPool(commandPool, 0)
617634
}
635+
618636
inline fun VkDevice.resetCommandPool(commandPool: VkCommandPool, flags: VkCommandPoolResetFlags) {
619637
VK_CHECK_RESULT(VK10.vkResetCommandPool(this, commandPool, flags))
620638
}
@@ -682,6 +700,10 @@ inline fun VkInstance.enumeratePhysicalDevices(): ArrayList<VkPhysicalDevice> {
682700
return vk.enumeratePhysicalDevices(this)
683701
}
684702

703+
inline infix fun VkInstance.destroySurfaceKHR(surface: VkSurfaceKHR) {
704+
KHRSurface.nvkDestroySurfaceKHR(this, surface, NULL)
705+
}
706+
685707

686708
/*
687709
VkPhysicalDevice
@@ -703,6 +725,10 @@ inline fun VkPhysicalDevice.getFormatProperties(format: VkFormat, formatProperti
703725
return formatProperties
704726
}
705727

728+
inline infix fun VkPhysicalDevice.getSurfaceFormatsKHR(surface: VkSurfaceKHR): ArrayList<VkSurfaceFormatKHR> {
729+
return vk.getPhysicalDeviceSurfaceFormatsKHR(this, surface)
730+
}
731+
706732
inline val VkPhysicalDevice.memoryProperties: VkPhysicalDeviceMemoryProperties
707733
get() = vk.PhysicalDeviceMemoryProperties().also(::getMemoryProperties)
708734

@@ -732,12 +758,10 @@ inline infix fun VkPhysicalDevice.getSurfaceCapabilitiesKHR(surface: VkSurfaceKH
732758
}
733759
}
734760

735-
inline infix fun VkPhysicalDevice.getSurfaceFormatsKHR(surface: VkSurfaceKHR): ArrayList<VkSurfaceFormatKHR> {
736-
return vk.getPhysicalDeviceSurfaceFormatsKHR(this, surface)
737-
}
738761
inline fun VkPhysicalDevice.getSurfaceSupportKHR(queueFamily: Int, surface: VkSurfaceKHR): Boolean {
739762
return vk.getPhysicalDeviceSurfaceSupportKHR(this, queueFamily, surface)
740763
}
764+
741765
inline fun VkPhysicalDevice.getSurfaceSupportKHR(queueFamilyProperties: ArrayList<VkQueueFamilyProperties>,
742766
surface: VkSurfaceKHR): BooleanArray {
743767
return vk.getPhysicalDeviceSurfaceSupportKHR(this, queueFamilyProperties, surface)

0 commit comments

Comments
 (0)