Source code for simvx.graphics.gpu.commands

"""Command pool and command buffer helpers."""


from __future__ import annotations

import logging
from typing import Any

import vulkan as vk

__all__ = ["CommandContext"]

log = logging.getLogger(__name__)


[docs] class CommandContext: """Manages a command pool and provides command buffer allocation.""" def __init__(self, device: Any, queue_family_index: int) -> None: self.device = device self.queue_family_index = queue_family_index self.pool: Any = None
[docs] def create_pool(self) -> None: pool_info = vk.VkCommandPoolCreateInfo( flags=vk.VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex=self.queue_family_index, ) self.pool = vk.vkCreateCommandPool(self.device, pool_info, None) log.debug("Command pool created")
[docs] def allocate(self, count: int = 1) -> list[Any]: alloc_info = vk.VkCommandBufferAllocateInfo( commandPool=self.pool, level=vk.VK_COMMAND_BUFFER_LEVEL_PRIMARY, commandBufferCount=count, ) buffers = vk.vkAllocateCommandBuffers(self.device, alloc_info) return list(buffers)
[docs] def destroy(self) -> None: if self.pool: vk.vkDestroyCommandPool(self.device, self.pool, None) self.pool = None