blob: f312168e1a38792744effb6faea55b54c2e13a3f [file] [log] [blame]
/*
* Copyright © 2024 Collabora Ltd.
* SPDX-License-Identifier: MIT
*/
#ifndef PANVK_CMD_ALLOC_H
#define PANVK_CMD_ALLOC_H
#include "panvk_cmd_buffer.h"
#include "panvk_macros.h"
#include "panvk_mempool.h"
static inline struct panfrost_ptr
panvk_cmd_alloc_from_pool(struct panvk_cmd_buffer *cmdbuf,
struct panvk_pool *pool,
struct panvk_pool_alloc_info info)
{
if (!info.size)
return (struct panfrost_ptr){0};
struct panfrost_ptr ptr =
pan_pool_alloc_aligned(&pool->base, info.size, info.alignment);
if (!ptr.gpu) {
VkResult error =
panvk_catch_indirect_alloc_failure(VK_ERROR_OUT_OF_DEVICE_MEMORY);
vk_command_buffer_set_error(&cmdbuf->vk, error);
}
return ptr;
}
#define panvk_cmd_alloc_dev_mem(__cmdbuf, __poolnm, __sz, __alignment) \
panvk_cmd_alloc_from_pool(__cmdbuf, &(__cmdbuf)->__poolnm##_pool, \
(struct panvk_pool_alloc_info){ \
.size = __sz, \
.alignment = __alignment, \
})
#define panvk_cmd_alloc_desc_aggregate(__cmdbuf, ...) \
panvk_cmd_alloc_from_pool( \
__cmdbuf, &(__cmdbuf)->desc_pool, \
panvk_pool_descs_to_alloc_info(PAN_DESC_AGGREGATE(__VA_ARGS__)))
#define panvk_cmd_alloc_desc(__cmdbuf, __desc) \
panvk_cmd_alloc_desc_aggregate(__cmdbuf, PAN_DESC(__desc))
#define panvk_cmd_alloc_desc_array(__cmdbuf, __count, __desc) \
panvk_cmd_alloc_desc_aggregate(__cmdbuf, PAN_DESC_ARRAY(__count, __desc))
#endif