summaryrefslogtreecommitdiff
path: root/src/virtio/vulkan/vn_renderer_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/virtio/vulkan/vn_renderer_internal.h')
-rw-r--r--src/virtio/vulkan/vn_renderer_internal.h57
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 */