1 /* 2 * Copyright © 2021 Collabora Ltd. 3 * SPDX-License-Identifier: MIT 4 */ 5 6 #ifndef PANVK_PRIV_BO_H 7 #define PANVK_PRIV_BO_H 8 9 #include <vulkan/vulkan_core.h> 10 11 #include "util/list.h" 12 #include "util/u_atomic.h" 13 14 struct panvk_kmod_bo; 15 16 /* Used for internal object allocation. */ 17 struct panvk_priv_bo { 18 struct list_head node; 19 uint64_t refcnt; 20 struct panvk_device *dev; 21 struct pan_kmod_bo *bo; 22 struct { 23 uint64_t dev; 24 void *host; 25 } addr; 26 }; 27 28 VkResult panvk_priv_bo_create(struct panvk_device *dev, size_t size, 29 uint32_t flags, VkSystemAllocationScope scope, 30 struct panvk_priv_bo **out); 31 32 static inline struct panvk_priv_bo * panvk_priv_bo_ref(struct panvk_priv_bo * bo)33panvk_priv_bo_ref(struct panvk_priv_bo *bo) 34 { 35 assert(p_atomic_read(&bo->refcnt) > 0); 36 p_atomic_inc(&bo->refcnt); 37 return bo; 38 } 39 40 void panvk_priv_bo_unref(struct panvk_priv_bo *bo); 41 42 #endif 43