• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_macros.h"
11 #include "panvk_mempool.h"
12 
13 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)14 panvk_cmd_alloc_from_pool(struct panvk_cmd_buffer *cmdbuf,
15                           struct panvk_pool *pool,
16                           struct panvk_pool_alloc_info info)
17 {
18    if (!info.size)
19       return (struct panfrost_ptr){0};
20 
21    struct panfrost_ptr ptr =
22       pan_pool_alloc_aligned(&pool->base, info.size, info.alignment);
23 
24    if (!ptr.gpu) {
25       VkResult error =
26          panvk_catch_indirect_alloc_failure(VK_ERROR_OUT_OF_DEVICE_MEMORY);
27       vk_command_buffer_set_error(&cmdbuf->vk, error);
28    }
29 
30    return ptr;
31 }
32 
33 #define panvk_cmd_alloc_dev_mem(__cmdbuf, __poolnm, __sz, __alignment)         \
34    panvk_cmd_alloc_from_pool(__cmdbuf, &(__cmdbuf)->__poolnm##_pool,           \
35                              (struct panvk_pool_alloc_info){                   \
36                                 .size = __sz,                                  \
37                                 .alignment = __alignment,                      \
38                              })
39 
40 #define panvk_cmd_alloc_desc_aggregate(__cmdbuf, ...)                          \
41    panvk_cmd_alloc_from_pool(                                                  \
42       __cmdbuf, &(__cmdbuf)->desc_pool,                                        \
43       panvk_pool_descs_to_alloc_info(PAN_DESC_AGGREGATE(__VA_ARGS__)))
44 
45 #define panvk_cmd_alloc_desc(__cmdbuf, __desc)                                 \
46    panvk_cmd_alloc_desc_aggregate(__cmdbuf, PAN_DESC(__desc))
47 
48 #define panvk_cmd_alloc_desc_array(__cmdbuf, __count, __desc)                  \
49    panvk_cmd_alloc_desc_aggregate(__cmdbuf, PAN_DESC_ARRAY(__count, __desc))
50 
51 #endif
52