xref: /aosp_15_r20/external/mesa3d/src/virtio/vulkan/vn_renderer_util.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright 2021 Google LLC
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #ifndef VN_RENDERER_UTIL_H
7 #define VN_RENDERER_UTIL_H
8 
9 #include "vn_renderer.h"
10 
11 /* for suballocations of short-lived shmems, thread-safe */
12 struct vn_renderer_shmem_pool {
13    mtx_t mutex;
14    size_t min_alloc_size;
15 
16    struct vn_renderer_shmem *shmem;
17    size_t size;
18    size_t used;
19 };
20 
21 static inline VkResult
vn_renderer_submit_simple(struct vn_renderer * renderer,const void * cs_data,size_t cs_size)22 vn_renderer_submit_simple(struct vn_renderer *renderer,
23                           const void *cs_data,
24                           size_t cs_size)
25 {
26    const struct vn_renderer_submit submit = {
27       .batches =
28          &(const struct vn_renderer_submit_batch){
29             .cs_data = cs_data,
30             .cs_size = cs_size,
31             .ring_idx = 0, /* CPU ring */
32          },
33       .batch_count = 1,
34    };
35    return vn_renderer_submit(renderer, &submit);
36 }
37 
38 void
39 vn_renderer_shmem_pool_init(struct vn_renderer *renderer,
40                             struct vn_renderer_shmem_pool *pool,
41                             size_t min_alloc_size);
42 
43 void
44 vn_renderer_shmem_pool_fini(struct vn_renderer *renderer,
45                             struct vn_renderer_shmem_pool *pool);
46 
47 struct vn_renderer_shmem *
48 vn_renderer_shmem_pool_alloc(struct vn_renderer *renderer,
49                              struct vn_renderer_shmem_pool *pool,
50                              size_t size,
51                              size_t *out_offset);
52 
53 #endif /* VN_RENDERER_UTIL_H */
54