summaryrefslogtreecommitdiffstats
path: root/virtual-programs
diff options
context:
space:
mode:
authorOmar Rizwan <omar@omar.website>2023-09-30 16:12:48 +0000
committerOmar Rizwan <omar@omar.website>2023-09-30 16:13:03 +0000
commitb4fe442a55d200fc682a7ca4f202274458ec5f12 (patch)
tree611ae8b2ef8a2686b8c8597805cb00e7796499d9 /virtual-programs
parentmain,display: Version the Folk heap; evict stale/unused images. (diff)
downloadfolk-b4fe442a55d200fc682a7ca4f202274458ec5f12.tar.gz
folk-b4fe442a55d200fc682a7ca4f202274458ec5f12.zip
display: Camera slice works! Always evict stale draw set images
Diffstat (limited to 'virtual-programs')
-rw-r--r--virtual-programs/display.folk12
1 files changed, 12 insertions, 0 deletions
diff --git a/virtual-programs/display.folk b/virtual-programs/display.folk
index 222813a1..f7b70959 100644
--- a/virtual-programs/display.folk
+++ b/virtual-programs/display.folk
@@ -340,6 +340,18 @@ On process {
proc checkImCacheAndCopyIfNeeded {imDrawSet} {
variable imCache
variable IMCACHE_MAX_IMAGES
+
+ dict for {im v} $imDrawSet {
+ if {![dict exists $imCache $im]} { continue }
+ # Check for staleness and remove from cache if so.
+ lassign [dict get $imCache $im] gim expectedVersion
+ set version [Heap::folkHeapGetVersion [string map {uint8_t void} [::image_t data_ptr $im]]]
+ if {$expectedVersion != $version} {
+ Gpu::ImageManager::freeGpuImage $gim
+ dict unset imCache $im
+ }
+ }
+
set notInCache [dictset difference $imDrawSet $imCache]
set notInDrawSet [dictset difference $imCache $imDrawSet]