xref: /aosp_15_r20/external/mesa3d/src/amd/vulkan/winsys/null/radv_null_bo.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2020 Valve Corporation
3  *
4  * based on amdgpu winsys.
5  * Copyright © 2016 Red Hat.
6  * Copyright © 2016 Bas Nieuwenhuizen
7  *
8  * SPDX-License-Identifier: MIT
9  */
10 
11 #include "radv_null_bo.h"
12 #include "util/u_memory.h"
13 
14 static VkResult
radv_null_winsys_bo_create(struct radeon_winsys * _ws,uint64_t size,unsigned alignment,enum radeon_bo_domain initial_domain,enum radeon_bo_flag flags,unsigned priority,uint64_t address,struct radeon_winsys_bo ** out_bo)15 radv_null_winsys_bo_create(struct radeon_winsys *_ws, uint64_t size, unsigned alignment,
16                            enum radeon_bo_domain initial_domain, enum radeon_bo_flag flags, unsigned priority,
17                            uint64_t address, struct radeon_winsys_bo **out_bo)
18 {
19    struct radv_null_winsys_bo *bo;
20 
21    /* Courtesy for users using NULL to check if they need to destroy the BO. */
22    *out_bo = NULL;
23 
24    bo = CALLOC_STRUCT(radv_null_winsys_bo);
25    if (!bo)
26       return VK_ERROR_OUT_OF_HOST_MEMORY;
27 
28    bo->ptr = malloc(size);
29    if (!bo->ptr)
30       goto error_ptr_alloc;
31 
32    *out_bo = (struct radeon_winsys_bo *)bo;
33    return VK_SUCCESS;
34 error_ptr_alloc:
35    FREE(bo);
36    return VK_ERROR_OUT_OF_HOST_MEMORY;
37 }
38 
39 static void *
radv_null_winsys_bo_map(struct radeon_winsys * _ws,struct radeon_winsys_bo * _bo,bool use_fixed_addr,void * fixed_addr)40 radv_null_winsys_bo_map(struct radeon_winsys *_ws, struct radeon_winsys_bo *_bo, bool use_fixed_addr, void *fixed_addr)
41 {
42    struct radv_null_winsys_bo *bo = radv_null_winsys_bo(_bo);
43    return bo->ptr;
44 }
45 
46 static void
radv_null_winsys_bo_unmap(struct radeon_winsys * _ws,struct radeon_winsys_bo * _bo,bool replace)47 radv_null_winsys_bo_unmap(struct radeon_winsys *_ws, struct radeon_winsys_bo *_bo, bool replace)
48 {
49 }
50 
51 static VkResult
radv_null_winsys_bo_make_resident(struct radeon_winsys * _ws,struct radeon_winsys_bo * _bo,bool resident)52 radv_null_winsys_bo_make_resident(struct radeon_winsys *_ws, struct radeon_winsys_bo *_bo, bool resident)
53 {
54    return VK_SUCCESS;
55 }
56 
57 static void
radv_null_winsys_bo_destroy(struct radeon_winsys * _ws,struct radeon_winsys_bo * _bo)58 radv_null_winsys_bo_destroy(struct radeon_winsys *_ws, struct radeon_winsys_bo *_bo)
59 {
60    struct radv_null_winsys_bo *bo = radv_null_winsys_bo(_bo);
61    FREE(bo->ptr);
62    FREE(bo);
63 }
64 
65 void
radv_null_bo_init_functions(struct radv_null_winsys * ws)66 radv_null_bo_init_functions(struct radv_null_winsys *ws)
67 {
68    ws->base.buffer_create = radv_null_winsys_bo_create;
69    ws->base.buffer_destroy = radv_null_winsys_bo_destroy;
70    ws->base.buffer_map = radv_null_winsys_bo_map;
71    ws->base.buffer_unmap = radv_null_winsys_bo_unmap;
72    ws->base.buffer_make_resident = radv_null_winsys_bo_make_resident;
73 }
74