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