Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
elect86 committed Jul 18, 2018
2 parents f38685c + cd5d828 commit b4a7ec7
Show file tree
Hide file tree
Showing 7 changed files with 168 additions and 13 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,9 @@ memFree(pImage)
One typical issue Vulkan developers encounter when filling out a CreateInfo struct field by field is that `sType` is incorrect.

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.
Moreover, all the allocations takes place in a special buffer that is cleared every refresh and resize.

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.

VK² provides also special method accepting glm classes, like `extent` accepting a `(Vec3i)` or `(Vec2i, Int)`.
Here's how the same code looks with a constructor:

Expand All @@ -107,4 +109,7 @@ val info = vk.ImageCreateInfo {
image = device createImage info
```

Errors will be checked automatically in debug mode, but you can set `DEBUG` explicitely as you wish.
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.

TODO
76 changes: 70 additions & 6 deletions src/main/kotlin/vkk/direct fields.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ inline var VkInstanceCreateInfo.type
inline var VkInstanceCreateInfo.next
get() = VkInstanceCreateInfo.npNext(adr)
set(value) = VkInstanceCreateInfo.npNext(adr, value)
// flags is reserved for future usage, till now must be 0
//inline var VkInstanceCreateInfo.flag: VkInstanceCreateFlags
// get() = VkInstanceCreateInfo.nflags(adr)
// set(value) = VkInstanceCreateInfo.nflags(adr, value)
inline var VkInstanceCreateInfo.flags: VkInstanceCreateFlags
get() = VkInstanceCreateInfo.nflags(adr)
set(value) = VkInstanceCreateInfo.nflags(adr, value)
Expand Down Expand Up @@ -556,6 +560,9 @@ inline var VkDeviceQueueCreateInfo.type: VkStructureType
inline var VkDeviceQueueCreateInfo.next
get() = VkDeviceQueueCreateInfo.npNext(adr)
set(value) = VkDeviceQueueCreateInfo.npNext(adr, value)
inline var VkDeviceQueueCreateInfo.flag: VkDeviceQueueCreate
get() = TODO()
set(value) = VkDeviceQueueCreateInfo.nflags(adr, value.i)
inline var VkDeviceQueueCreateInfo.flags: VkDeviceQueueCreateFlags
get() = VkDeviceQueueCreateInfo.nflags(adr)
set(value) = VkDeviceQueueCreateInfo.nflags(adr, value)
Expand Down Expand Up @@ -589,7 +596,7 @@ inline var VkDeviceCreateInfo.type: VkStructureType
inline var VkDeviceCreateInfo.next
get() = VkDeviceCreateInfo.npNext(adr)
set(value) = VkDeviceCreateInfo.npNext(adr, value)
inline var VkDeviceCreateInfo.flags: VkDeviceQueueCreateFlags
inline var VkDeviceCreateInfo.flags: VkDeviceCreateFlags
get() = VkDeviceCreateInfo.nflags(adr)
set(value) = VkDeviceCreateInfo.nflags(adr, value)
//inline val VkDeviceCreateInfo.queueCreateInfoCount get() = queueCreateInfoCount()
Expand Down Expand Up @@ -811,7 +818,7 @@ inline var VkFenceCreateInfo.type: VkStructureType
inline var VkFenceCreateInfo.next
get() = VkFenceCreateInfo.npNext(adr)
set(value) = VkFenceCreateInfo.npNext(adr, value)
inline var VkFenceCreateInfo.flags: VkSemaphoreCreateFlags
inline var VkFenceCreateInfo.flags: VkFenceCreateFlags
get() = VkFenceCreateInfo.nflags(adr)
set(value) = VkFenceCreateInfo.nflags(adr, value)

Expand Down Expand Up @@ -866,6 +873,10 @@ inline var VkBufferCreateInfo.type: VkStructureType
inline var VkBufferCreateInfo.next
get() = VkBufferCreateInfo.npNext(adr)
set(value) = VkBufferCreateInfo.npNext(adr, value)
/** JVM custom */
inline var VkBufferCreateInfo.flag: VkBufferCreate
get() = TODO()
set(value) = VkBufferCreateInfo.nflags(adr, value.i)
inline var VkBufferCreateInfo.flags: VkBufferCreateFlags
get() = VkBufferCreateInfo.nflags(adr)
set(value) = VkBufferCreateInfo.nflags(adr, value)
Expand Down Expand Up @@ -938,6 +949,10 @@ inline var VkImageCreateInfo.type: VkStructureType
inline var VkImageCreateInfo.next
get() = VkImageCreateInfo.npNext(adr)
set(value) = VkImageCreateInfo.npNext(adr, value)
/** JVM custom */
inline var VkImageCreateInfo.flag: VkImageCreate
get() = TODO()
set(value) = VkImageCreateInfo.nflags(adr, value.i)
inline var VkImageCreateInfo.flags: VkImageCreateFlags
get() = VkImageCreateInfo.nflags(adr)
set(value) = VkImageCreateInfo.nflags(adr, value)
Expand Down Expand Up @@ -1382,6 +1397,7 @@ inline fun VkRect2D.extent(width: Int, height: Int) {

/** JVM custom */
inline fun VkRect2D.extent(width: Number, height: Number) = extent(width.i, height.i)

/** JVM custom */
inline fun VkRect2D.offset(width: Number, height: Number) = offset(width.i, height.i)

Expand Down Expand Up @@ -1633,6 +1649,10 @@ inline var VkGraphicsPipelineCreateInfo.type: VkStructureType
inline var VkGraphicsPipelineCreateInfo.next
get() = VkGraphicsPipelineCreateInfo.npNext(adr)
set(value) = VkGraphicsPipelineCreateInfo.npNext(adr, value)
/** JVM custom */
inline var VkGraphicsPipelineCreateInfo.flag: VkPipelineCreate
get() = TODO()
set(value) = VkGraphicsPipelineCreateInfo.nflags(adr, value.i)
inline var VkGraphicsPipelineCreateInfo.flags: VkPipelineCreateFlags
get() = VkGraphicsPipelineCreateInfo.nflags(adr)
set(value) = VkGraphicsPipelineCreateInfo.nflags(adr, value)
Expand Down Expand Up @@ -1832,6 +1852,10 @@ inline var VkDescriptorSetLayoutBinding.descriptorType: VkDescriptorType
inline var VkDescriptorSetLayoutBinding.descriptorCount
get() = VkDescriptorSetLayoutBinding.ndescriptorCount(adr)
set(value) = VkDescriptorSetLayoutBinding.ndescriptorCount(adr, value)
/** JVM custom */
inline var VkDescriptorSetLayoutBinding.stageFlag: VkShaderStage
get() = TODO()
set(value) = VkDescriptorSetLayoutBinding.nstageFlags(adr, value.i)
inline var VkDescriptorSetLayoutBinding.stageFlags: VkShaderStageFlags
get() = VkDescriptorSetLayoutBinding.nstageFlags(adr)
set(value) = VkDescriptorSetLayoutBinding.nstageFlags(adr, value)
Expand Down Expand Up @@ -1859,6 +1883,10 @@ inline var VkDescriptorSetLayoutCreateInfo.type: VkStructureType
inline var VkDescriptorSetLayoutCreateInfo.next
get() = VkDescriptorSetLayoutCreateInfo.npNext(adr)
set(value) = VkDescriptorSetLayoutCreateInfo.npNext(adr, value)
/** JVM custom */
inline var VkDescriptorSetLayoutCreateInfo.flag: VkDescriptorSetLayoutCreate
get() = TODO()
set(value) = VkDescriptorSetLayoutCreateInfo.nflags(adr, value.i)
inline var VkDescriptorSetLayoutCreateInfo.flags: VkDescriptorSetLayoutCreateFlags
get() = VkDescriptorSetLayoutCreateInfo.nflags(adr)
set(value) = VkDescriptorSetLayoutCreateInfo.nflags(adr, value)
Expand Down Expand Up @@ -1889,6 +1917,10 @@ inline var VkDescriptorPoolCreateInfo.type: VkStructureType
inline var VkDescriptorPoolCreateInfo.next
get() = VkDescriptorPoolCreateInfo.npNext(adr)
set(value) = VkDescriptorPoolCreateInfo.npNext(adr, value)
/** JVM custom */
inline var VkDescriptorPoolCreateInfo.flag: VkDescriptorPoolCreate
get() = TODO()
set(value) = VkDescriptorPoolCreateInfo.nflags(adr, value.i)
inline var VkDescriptorPoolCreateInfo.flags: VkDescriptorPoolCreateFlags
get() = VkDescriptorPoolCreateInfo.nflags(adr)
set(value) = VkDescriptorPoolCreateInfo.nflags(adr, value)
Expand Down Expand Up @@ -2054,7 +2086,10 @@ inline fun VkFramebufferCreateInfo.extent(extent: Vec2i, layers: Int) {
this.layers = layers
}


/** JVM custom */
inline var VkAttachmentDescription.flag: VkAttachmentDescriptionFlag
get() = TODO()
set(value) = VkAttachmentDescription.nflags(adr, value.i)
inline var VkAttachmentDescription.flags: VkAttachmentDescriptionFlags
get() = VkAttachmentDescription.nflags(adr)
set(value) = VkAttachmentDescription.nflags(adr, value)
Expand Down Expand Up @@ -2092,6 +2127,10 @@ inline var VkAttachmentReference.layout: VkImageLayout
set(value) = VkAttachmentReference.nlayout(adr, value.i)


/** JVM custom */
inline var VkSubpassDescription.flag: VkSubpassDescriptionFlag
get() = TODO()
set(value) = VkSubpassDescription.nflags(adr, value.i)
inline var VkSubpassDescription.flags: VkSubpassDescriptionFlags
get() = VkSubpassDescription.nflags(adr)
set(value) = VkSubpassDescription.nflags(adr, value)
Expand Down Expand Up @@ -2156,7 +2195,9 @@ inline var VkRenderPassCreateInfo.next
inline var VkRenderPassCreateInfo.flags: VkRenderPassCreateFlags
get() = VkRenderPassCreateInfo.nflags(adr)
set(value) = VkRenderPassCreateInfo.nflags(adr, value)
inline val VkRenderPassCreateInfo.attachmentCount get() = VkRenderPassCreateInfo.nattachmentCount(adr)
inline var VkRenderPassCreateInfo.attachmentCount: Int
get() = VkRenderPassCreateInfo.nattachmentCount(adr)
set(value) = VkRenderPassCreateInfo.nattachmentCount(adr, value)
inline var VkRenderPassCreateInfo.attachments: VkAttachmentDescription.Buffer?
get() = VkRenderPassCreateInfo.npAttachments(adr)
set(value) = VkRenderPassCreateInfo.npAttachments(adr, value)
Expand All @@ -2167,7 +2208,9 @@ inline var VkRenderPassCreateInfo.attachment: VkAttachmentDescription?
memPutAddress(adr + VkRenderPassCreateInfo.PATTACHMENTS, memAddressSafe(value))
VkRenderPassCreateInfo.nattachmentCount(adr, if (value == null) 0 else 1)
}
inline val VkRenderPassCreateInfo.subpassCount get() = VkRenderPassCreateInfo.nsubpassCount(adr)
inline var VkRenderPassCreateInfo.subpassCount: Int
get() = VkRenderPassCreateInfo.nsubpassCount(adr)
set(value) = VkRenderPassCreateInfo.nsubpassCount(adr, value)
inline var VkRenderPassCreateInfo.subpasses: VkSubpassDescription.Buffer
get() = VkRenderPassCreateInfo.npSubpasses(adr)
set(value) = VkRenderPassCreateInfo.npSubpasses(adr, value)
Expand All @@ -2178,7 +2221,9 @@ inline var VkRenderPassCreateInfo.subpass: VkSubpassDescription
memPutAddress(adr + VkRenderPassCreateInfo.PSUBPASSES, value.address())
VkRenderPassCreateInfo.nsubpassCount(adr, 1)
}
inline val VkRenderPassCreateInfo.dependencyCount get() = VkRenderPassCreateInfo.ndependencyCount(adr)
inline var VkRenderPassCreateInfo.dependencyCount: Int
get() = VkRenderPassCreateInfo.ndependencyCount(adr)
set(value) = VkRenderPassCreateInfo.ndependencyCount(adr, value)
inline var VkRenderPassCreateInfo.dependencies: VkSubpassDependency.Buffer?
get() = VkRenderPassCreateInfo.npDependencies(adr)
set(value) = VkRenderPassCreateInfo.npDependencies(adr, value)
Expand All @@ -2197,6 +2242,10 @@ inline var VkCommandPoolCreateInfo.type: VkStructureType
inline var VkCommandPoolCreateInfo.next
get() = VkCommandPoolCreateInfo.npNext(adr)
set(value) = VkCommandPoolCreateInfo.npNext(adr, value)
/** JVM custom */
inline var VkCommandPoolCreateInfo.flag: VkCommandPoolCreate
get() = TODO()
set(value) = VkCommandPoolCreateInfo.nflags(adr, value.i)
inline var VkCommandPoolCreateInfo.flags: VkCommandPoolCreateFlags
get() = VkCommandPoolCreateInfo.nflags(adr)
set(value) = VkCommandPoolCreateInfo.nflags(adr, value)
Expand Down Expand Up @@ -2254,6 +2303,10 @@ inline var VkCommandBufferBeginInfo.type: VkStructureType
inline var VkCommandBufferBeginInfo.next
get() = VkCommandBufferBeginInfo.npNext(adr)
set(value) = VkCommandBufferBeginInfo.npNext(adr, value)
/** JVM custom */
inline var VkCommandBufferBeginInfo.flag: VkCommandBufferUsage
get() = TODO()
set(value) = VkCommandBufferBeginInfo.nflags(adr, value.i)
inline var VkCommandBufferBeginInfo.flags: VkCommandBufferUsageFlags
get() = VkCommandBufferBeginInfo.nflags(adr)
set(value) = VkCommandBufferBeginInfo.nflags(adr, value)
Expand Down Expand Up @@ -2502,6 +2555,13 @@ inline val VkRenderPassBeginInfo.clearValueCount get() = clearValueCount()
inline var VkRenderPassBeginInfo.clearValues: VkClearValue.Buffer?
get() = VkRenderPassBeginInfo.npClearValues(adr)
set(value) = VkRenderPassBeginInfo.npClearValues(adr, value)
/** JVM custom */
inline var VkRenderPassBeginInfo.clearValue: VkClearValue?
get() = VkRenderPassBeginInfo.npClearValues(adr)?.get(0)
set(value) {
memPutAddress(adr + VkRenderPassBeginInfo.PCLEARVALUES, value?.adr ?: NULL)
VkRenderPassBeginInfo.nclearValueCount(adr, if (value == null) 0 else 1)
}

/** JVM custom */
inline fun VkRenderPassBeginInfo.clearValue(vec4: Vec4) {
Expand Down Expand Up @@ -5374,6 +5434,10 @@ inline var VkDebugReportCallbackCreateInfoEXT.type
inline var VkDebugReportCallbackCreateInfoEXT.next
get() = VkDebugReportCallbackCreateInfoEXT.npNext(adr)
set(value) = VkDebugReportCallbackCreateInfoEXT.npNext(adr, value)
/** JVM custom */
inline var VkDebugReportCallbackCreateInfoEXT.flag: VkDebugReport
get() = TODO()
set(value) = VkDebugReportCallbackCreateInfoEXT.nflags(adr, value.i)
inline var VkDebugReportCallbackCreateInfoEXT.flags: VkDebugReportFlagsEXT
get() = VkDebugReportCallbackCreateInfoEXT.nflags(adr)
set(value) = VkDebugReportCallbackCreateInfoEXT.nflags(adr, value)
Expand Down
32 changes: 28 additions & 4 deletions src/main/kotlin/vkk/extension functions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import kotlin.reflect.KMutableProperty0
import ab.advance
import ab.appBuffer
import ab.appBuffer.ptr
import glm_.bool


/*
Expand Down Expand Up @@ -133,6 +134,13 @@ inline infix fun VkCommandBuffer.nextSubpass(contents: VkSubpassContents) {
VK10.vkCmdNextSubpass(this, contents.i)
}

inline fun VkCommandBuffer.pipelineBarrier(srcStageMask: VkPipelineStage, dstStageMask: VkPipelineStage,
dependencyFlags: VkDependencyFlags = 0,
memoryBarrier: VkMemoryBarrier? = null,
bufferMemoryBarrier: VkBufferMemoryBarrier? = null,
imageMemoryBarrier: VkImageMemoryBarrier? = null) =
pipelineBarrier(srcStageMask.i, dstStageMask.i, dependencyFlags, memoryBarrier, bufferMemoryBarrier, imageMemoryBarrier)

inline fun VkCommandBuffer.pipelineBarrier(srcStageMask: VkPipelineStageFlags, dstStageMask: VkPipelineStageFlags,
dependencyFlags: VkDependencyFlags = 0,
memoryBarrier: VkMemoryBarrier? = null,
Expand Down Expand Up @@ -229,7 +237,7 @@ inline fun VkCommandBuffer.submit(queue: VkQueue, submitInfoPNext: Pointer? = nu
VkDevice
*/

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

inline infix fun VkDevice.createFence(flag: VkFenceCreate): VkFence {
return createFence(vk.FenceCreateInfo { this.flags = flag.i })
}

inline infix fun VkDevice.createFence(flags: VkFenceCreateFlags): VkFence {
return createFence(vk.FenceCreateInfo { this.flags = flags })
}
Expand Down Expand Up @@ -449,6 +461,11 @@ inline infix fun VkDevice.destroyFences(fences: ArrayList<VkFence>) {
VK10.nvkDestroyFence(this, fence, NULL)
}

inline infix fun VkDevice.destroyFences(fences: VkFenceArray) {
for (fence in fences)
VK10.nvkDestroyFence(this, fence, NULL)
}

inline infix fun VkDevice.destroyFramebuffer(framebuffer: VkFramebuffer) {
VK10.nvkDestroyFramebuffer(this, framebuffer, NULL)
}
Expand Down Expand Up @@ -615,6 +632,7 @@ inline infix fun VkDevice.getSwapchainImagesKHR(swapchain: VkSwapchainKHR): VkIm
inline infix fun VkDevice.resetCommandPool(commandPool: VkCommandPool) {
resetCommandPool(commandPool, 0)
}

inline fun VkDevice.resetCommandPool(commandPool: VkCommandPool, flags: VkCommandPoolResetFlags) {
VK_CHECK_RESULT(VK10.vkResetCommandPool(this, commandPool, flags))
}
Expand Down Expand Up @@ -682,6 +700,10 @@ inline fun VkInstance.enumeratePhysicalDevices(): ArrayList<VkPhysicalDevice> {
return vk.enumeratePhysicalDevices(this)
}

inline infix fun VkInstance.destroySurfaceKHR(surface: VkSurfaceKHR) {
KHRSurface.nvkDestroySurfaceKHR(this, surface, NULL)
}


/*
VkPhysicalDevice
Expand All @@ -703,6 +725,10 @@ inline fun VkPhysicalDevice.getFormatProperties(format: VkFormat, formatProperti
return formatProperties
}

inline infix fun VkPhysicalDevice.getSurfaceFormatsKHR(surface: VkSurfaceKHR): ArrayList<VkSurfaceFormatKHR> {
return vk.getPhysicalDeviceSurfaceFormatsKHR(this, surface)
}

inline val VkPhysicalDevice.memoryProperties: VkPhysicalDeviceMemoryProperties
get() = vk.PhysicalDeviceMemoryProperties().also(::getMemoryProperties)

Expand Down Expand Up @@ -732,12 +758,10 @@ inline infix fun VkPhysicalDevice.getSurfaceCapabilitiesKHR(surface: VkSurfaceKH
}
}

inline infix fun VkPhysicalDevice.getSurfaceFormatsKHR(surface: VkSurfaceKHR): ArrayList<VkSurfaceFormatKHR> {
return vk.getPhysicalDeviceSurfaceFormatsKHR(this, surface)
}
inline fun VkPhysicalDevice.getSurfaceSupportKHR(queueFamily: Int, surface: VkSurfaceKHR): Boolean {
return vk.getPhysicalDeviceSurfaceSupportKHR(this, queueFamily, surface)
}

inline fun VkPhysicalDevice.getSurfaceSupportKHR(queueFamilyProperties: ArrayList<VkQueueFamilyProperties>,
surface: VkSurfaceKHR): BooleanArray {
return vk.getPhysicalDeviceSurfaceSupportKHR(this, queueFamilyProperties, surface)
Expand Down
Loading

0 comments on commit b4a7ec7

Please sign in to comment.