cmd_pool.cpp

cross platform rendering playground

src/backend/vulkan/cmd_pool.cpp

965 B
#include <volk.h>

#include "backend/vulkan/utils.h"
#include "backend/vulkan/vk_api.h"
#include "backend/vulkan/vk_conversion.h"

namespace rhi {
using namespace vk;

bool create_cmd_pool(Device &device, const CmdPoolDesc &desc, CmdPool &pool) {
    VkCommandPoolCreateInfo pool_ci{};
    pool_ci.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
    pool_ci.flags = vk::to_vk_cmd_pool_flags(desc.flags);
    pool_ci.queueFamilyIndex = desc.queue_family_index;

    VkCommandPool vk_pool;
    VK_CHECK(vkCreateCommandPool(device.logical, &pool_ci, nullptr, &vk_pool));
    pool.handle = vk_pool;
    return true;
}

void destroy_cmd_pool(Device &device, CmdPool &pool) {
    if (pool.handle != VK_NULL_HANDLE) {
        vkDestroyCommandPool(device.logical, pool.handle, nullptr);
    }

    pool = {};
}

void reset_cmd_pool(Device &device, CmdPool &pool, u32 flags) {
    VK_CHECK(vkResetCommandPool(device.logical, pool.handle, flags));
}

} // namespace rhi