diff options
Diffstat (limited to 'src/virtio/vulkan/vn_renderer_internal.h')
-rw-r--r-- | src/virtio/vulkan/vn_renderer_internal.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/virtio/vulkan/vn_renderer_internal.h b/src/virtio/vulkan/vn_renderer_internal.h new file mode 100644 index 00000000000..3589788b0b3 --- /dev/null +++ b/src/virtio/vulkan/vn_renderer_internal.h @@ -0,0 +1,57 @@ +/* + * Copyright 2021 Google LLC + * SPDX-License-Identifier: MIT + */ + +#ifndef VN_RENDERER_INTERNAL_H +#define VN_RENDERER_INTERNAL_H + +#include "vn_renderer.h" + +typedef void (*vn_renderer_shmem_cache_destroy_func)( + struct vn_renderer *renderer, struct vn_renderer_shmem *shmem); + +struct vn_renderer_shmem_cache { + bool initialized; + + struct vn_renderer *renderer; + vn_renderer_shmem_cache_destroy_func destroy_func; + + simple_mtx_t mutex; + + /* cache shmems up to 2^26 in size (see choose_bucket) */ + struct vn_renderer_shmem_bucket { + struct list_head shmems; + } buckets[27]; + + /* which buckets have shmems */ + uint32_t bucket_mask; + + struct { + uint32_t cache_skip_count; + uint32_t cache_hit_count; + uint32_t cache_miss_count; + } debug; +}; + +void +vn_renderer_shmem_cache_init( + struct vn_renderer_shmem_cache *cache, + struct vn_renderer *renderer, + vn_renderer_shmem_cache_destroy_func destroy_func); + +void +vn_renderer_shmem_cache_fini(struct vn_renderer_shmem_cache *cache); + +bool +vn_renderer_shmem_cache_add(struct vn_renderer_shmem_cache *cache, + struct vn_renderer_shmem *shmem); + +struct vn_renderer_shmem * +vn_renderer_shmem_cache_get(struct vn_renderer_shmem_cache *cache, + size_t size); + +void +vn_renderer_shmem_cache_debug_dump(struct vn_renderer_shmem_cache *cache); + +#endif /* VN_RENDERER_INTERNAL_H */ |