aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-07-15 09:08:32 -0700
committerAlyssa Rosenzweig <[email protected]>2019-07-15 16:12:56 -0700
commitf02278ae8735e013206ce32fc825aa05a47ec1cb (patch)
tree2f61de6a66e92214d43940ba08df191236d70248 /src
parent525e5dc4eda5740ba44fcf8ffb1652b0c896ffbd (diff)
panfrost: Implement panfrost_bo_cache_get
Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/panfrost/pan_bo_cache.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/gallium/drivers/panfrost/pan_bo_cache.c b/src/gallium/drivers/panfrost/pan_bo_cache.c
index 2b7a5d208a6..4cbec51a2c1 100644
--- a/src/gallium/drivers/panfrost/pan_bo_cache.c
+++ b/src/gallium/drivers/panfrost/pan_bo_cache.c
@@ -82,7 +82,22 @@ panfrost_bo_cache_fetch(
struct panfrost_screen *screen,
size_t size, uint32_t flags)
{
- /* Stub */
+ struct list_head *bucket = pan_bucket(screen, size);
+
+ /* TODO: Honour flags? */
+
+ /* Iterate the bucket looking for something suitable */
+ list_for_each_entry_safe(struct panfrost_bo, entry, bucket, link) {
+ if (entry->size >= size) {
+ /* This one works, splice it out of the cache */
+ list_del(&entry->link);
+
+ /* Let's go! */
+ return entry;
+ }
+ }
+
+ /* We didn't find anything */
return NULL;
}