Skip to content

CommandPool.kt

src/jvmMain/kotlin/afield/graphics/vulkan/device/CommandPool.kt · 41 lines

package afield.graphics.vulkan.device

import org.lwjgl.system.MemoryStack
import org.lwjgl.vulkan.VK10
import org.lwjgl.vulkan.VkCommandPoolCreateInfo
import afield.graphics.vulkan.util.vkCheck

A Vulkan command pool for one queue family, from which Field allocates command buffers.

CommandPool is created with VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, so each command buffer from it can be reset and re-recorded individually.

class CommandPool(device: Device, queueFamilyIndex: Int)

val device: Device

val queueFamilyIndex: Int

var vkCommandPool: Long = 0

init

    init {
        this.device = device
        this.queueFamilyIndex = queueFamilyIndex
        MemoryStack.stackPush().use { stack ->
            val cmdPoolInfo = VkCommandPoolCreateInfo.calloc(stack)
                .sType(VK10.VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
                .flags(VK10.VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
                .queueFamilyIndex(queueFamilyIndex)
            val lp = stack.mallocLong(1)
            vkCheck(
                VK10.vkCreateCommandPool(device.vkDevice, cmdPoolInfo, null, lp),
                "Failed to create command pool"
            )
            vkCommandPool = lp[0]
        }
    }

fun cleanup()

    fun cleanup() {
        VK10.vkDestroyCommandPool(device.vkDevice, vkCommandPool, null)
    }
}