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)
}
}