1 /*
2 * Copyright © 2024 Collabora Ltd.
3 * SPDX-License-Identifier: MIT
4 */
5
6 #ifndef PANVK_CMD_ALLOC_H
7 #define PANVK_CMD_ALLOC_H
8
9 #include "panvk_cmd_buffer.h"
10 #include "panvk_mempool.h"
11
12 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)13 panvk_cmd_alloc_from_pool(struct panvk_cmd_buffer *cmdbuf,
14 struct panvk_pool *pool,
15 struct panvk_pool_alloc_info info)
16 {
17 if (!info.size)
18 return (struct panfrost_ptr){0};
19
20 struct panfrost_ptr ptr =
21 pan_pool_alloc_aligned(&pool->base, info.size, info.alignment);
22
23 if (!ptr.gpu)
24 vk_command_buffer_set_error(&cmdbuf->vk,
25 VK_ERROR_OUT_OF_DEVICE_MEMORY);
26
27 return ptr;
28 }
29
30 #define panvk_cmd_alloc_dev_mem(__cmdbuf, __poolnm, __sz, __alignment) \
31 panvk_cmd_alloc_from_pool(__cmdbuf, &(__cmdbuf)->__poolnm##_pool, \
32 (struct panvk_pool_alloc_info){ \
33 .size = __sz, \
34 .alignment = __alignment, \
35 })
36
37 #define panvk_cmd_alloc_desc_aggregate(__cmdbuf, ...) \
38 panvk_cmd_alloc_from_pool( \
39 __cmdbuf, &(__cmdbuf)->desc_pool, \
40 panvk_pool_descs_to_alloc_info(PAN_DESC_AGGREGATE(__VA_ARGS__)))
41
42 #define panvk_cmd_alloc_desc(__cmdbuf, __desc) \
43 panvk_cmd_alloc_desc_aggregate(__cmdbuf, PAN_DESC(__desc))
44
45 #define panvk_cmd_alloc_desc_array(__cmdbuf, __count, __desc) \
46 panvk_cmd_alloc_desc_aggregate(__cmdbuf, PAN_DESC_ARRAY(__count, __desc))
47
48 #endif
49