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