41#define DT_PIXELPIPE_CACHE_HASH_INVALID ((uint64_t)-1)
149 const char *
name,
const int id,
const gboolean alloc,
192 const size_t size,
const char *
name,
const int id,
193 const gboolean alloc,
const gboolean allow_rekey_reuse,
232 int preferred_devid,
void **
data);
259 gboolean *out_reused);
393 void **cl_mem_output);
atomic_int dt_atomic_int
Definition atomic.h:63
int width
Definition bilateral.h:1
int height
Definition bilateral.h:1
#define dt_pthread_rwlock_t
Definition dtpthread.h:389
size_t size
Definition mipmap_cache.c:3
dt_mipmap_buffer_dsc_flags flags
Definition mipmap_cache.c:4
void dt_dev_pixelpipe_cache_wrlock_entry(dt_dev_pixelpipe_cache_t *cache, gboolean lock, struct dt_pixel_cache_entry_t *entry)
Lock or release the write lock on the entry.
Definition pixelpipe_cache.c:1880
struct dt_pixel_cache_entry_t * dt_dev_pixelpipe_cache_get_entry(dt_dev_pixelpipe_cache_t *cache, const uint64_t hash)
Get an internal reference to the cache entry matching hash. If you are going to access this entry mor...
Definition pixelpipe_cache.c:136
void dt_dev_pixelpipe_cache_resync_host_pinned_image(dt_dev_pixelpipe_cache_t *cache, void *host_ptr, struct dt_pixel_cache_entry_t *entry_hint, int devid)
Resynchronize cached pinned OpenCL images from an authoritative host buffer.
Definition pixelpipe_cache.c:927
void dt_pixel_cache_clmem_put(struct dt_pixel_cache_entry_t *entry, void *host_ptr, int devid, int width, int height, int bpp, int flags, void *mem)
Definition pixelpipe_cache.c:665
void dt_pixelpipe_cache_free_align_cache(dt_dev_pixelpipe_cache_t *cache, void **mem, const char *message)
Free aligned memory allocated with dt_pixelpipe_cache_alloc_align_cache.
Definition pixelpipe_cache.c:1172
void dt_dev_pixelpipe_cache_cleanup(dt_dev_pixelpipe_cache_t *cache)
Definition pixelpipe_cache.c:1342
void dt_pixel_cache_clmem_unref(struct dt_pixel_cache_entry_t *entry, void *mem)
Definition pixelpipe_cache.c:641
void dt_dev_pixelpipe_cache_auto_destroy_apply(dt_dev_pixelpipe_cache_t *cache, struct dt_pixel_cache_entry_t *entry)
Free the entry if it has the flag "auto_destroy". See dt_dev_pixelpipe_cache_flag_auto_destroy()....
Definition pixelpipe_cache.c:1928
dt_dev_pixelpipe_cache_t * dt_dev_pixelpipe_cache_init(size_t max_memory)
Definition pixelpipe_cache.c:1307
void dt_dev_pixelpipe_cache_print(dt_dev_pixelpipe_cache_t *cache)
Definition pixelpipe_cache.c:2116
void dt_dev_pixelpipe_cache_unref_unlocked(dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, struct dt_pixel_cache_entry_t *cache_entry)
Decrease the refcount of an entry previously acquired with the transient realtime getter above.
Definition pixelpipe_cache.c:2008
dt_dev_pixelpipe_cache_writable_status_t dt_dev_pixelpipe_cache_get_writable(dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, const size_t size, const char *name, const int id, const gboolean alloc, const gboolean allow_rekey_reuse, const struct dt_pixel_cache_entry_t *reuse_hint, void **data, struct dt_pixel_cache_entry_t **entry)
Acquire a writable cache line for module output.
void dt_dev_pixelpipe_cache_flush(dt_dev_pixelpipe_cache_t *cache, const int id)
Remove cache lines matching id. Entries locked in read/write or having reference count greater than 0...
Definition pixelpipe_cache.c:1807
void dt_dev_pixelpipe_cache_unref_hash(dt_dev_pixelpipe_cache_t *cache, const uint64_t hash)
Find the entry matching hash, and decrease its ref_count if found.
Definition pixelpipe_cache.c:2016
void * dt_dev_pixelpipe_cache_get_read_only(dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, struct dt_pixel_cache_entry_t **cache_entry)
Find the existing cache entry linked to hash if any, lock it in read mode and increase its ref_count ...
Definition pixelpipe_cache.c:1951
void dt_dev_pixelpipe_cache_flush_clmem(dt_dev_pixelpipe_cache_t *cache, const int devid, void *keep)
Release cached OpenCL buffers for a device (-1 for all).
Definition pixelpipe_cache.c:461
int dt_dev_pixelpipe_cache_flush_old(dt_dev_pixelpipe_cache_t *cache)
Free cache entries older than 3 min, that are not locked and have been used 3 times or less.
Definition pixelpipe_cache.c:1836
void dt_dev_pixelpipe_cache_flag_auto_destroy(dt_dev_pixelpipe_cache_t *cache, struct dt_pixel_cache_entry_t *entry)
Flag the cache entry as "auto_destroy". This is useful for short-lived/disposable cache entries,...
Definition pixelpipe_cache.c:1912
int dt_dev_pixel_pipe_cache_remove_lru(dt_dev_pixelpipe_cache_t *cache)
Definition pixelpipe_cache.c:562
void * dt_pixel_cache_clmem_ref(struct dt_pixel_cache_entry_t *entry, void *host_ptr, int devid, int width, int height, int bpp, int flags)
Definition pixelpipe_cache.c:612
void dt_dev_pixelpipe_cache_put_pinned_image(dt_dev_pixelpipe_cache_t *cache, void *host_ptr, struct dt_pixel_cache_entry_t *entry_hint, void **mem)
Release or cache a pinned OpenCL image acquired with dt_dev_pixelpipe_cache_get_pinned_image().
Definition pixelpipe_cache.c:909
void * dt_pixel_cache_entry_get_data(struct dt_pixel_cache_entry_t *entry)
Definition pixelpipe_cache.c:1081
int dt_dev_pixelpipe_cache_remove(dt_dev_pixelpipe_cache_t *cache, const gboolean force, struct dt_pixel_cache_entry_t *entry)
Arbitrarily remove the cache entry matching hash. Entries having a reference count > 0 (inter-thread ...
Definition pixelpipe_cache.c:209
void * dt_dev_pixelpipe_cache_get_pinned_image(dt_dev_pixelpipe_cache_t *cache, void *host_ptr, struct dt_pixel_cache_entry_t *entry_hint, int devid, int width, int height, int bpp, int flags, gboolean *out_reused)
Acquire a pinned OpenCL image for a host buffer tracked by the pixelpipe cache.
Definition pixelpipe_cache.c:892
size_t dt_pixel_cache_entry_get_size(struct dt_pixel_cache_entry_t *entry)
Peek the size (in bytes) reserved for the host buffer of a cache entry.
Definition pixelpipe_cache.c:1086
void * dt_pixel_cache_alloc(dt_dev_pixelpipe_cache_t *cache, struct dt_pixel_cache_entry_t *entry)
Actually allocate the memory buffer attached to the cache entry once you create it with dt_dev_pixelp...
Definition pixelpipe_cache.c:1063
void dt_dev_pixelpipe_cache_rdlock_entry(dt_dev_pixelpipe_cache_t *cache, gboolean lock, struct dt_pixel_cache_entry_t *entry)
Lock or release the read lock on the entry.
Definition pixelpipe_cache.c:1896
void dt_pixel_cache_clmem_remove(struct dt_pixel_cache_entry_t *entry, void *mem)
Definition pixelpipe_cache.c:710
gboolean dt_dev_pixelpipe_cache_peek(dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, void **data, struct dt_pixel_cache_entry_t **entry, const int preferred_devid, void **cl_mem_output)
Non-owning lookup of an existing cache line.
Definition pixelpipe_cache.c:1704
void * dt_pixelpipe_cache_alloc_align_cache_impl(dt_dev_pixelpipe_cache_t *cache, size_t size, int id, const char *name)
Allocate aligned memory tracked by the pixelpipe cache. This allows LRU cache entries to be evicted i...
Definition pixelpipe_cache.c:1124
void dt_dev_pixelpipe_cache_ref_count_entry(dt_dev_pixelpipe_cache_t *cache, gboolean lock, struct dt_pixel_cache_entry_t *entry)
Increase/Decrease the reference count on the cache line as to prevent LRU item removal....
Definition pixelpipe_cache.c:1871
void * dt_pixel_cache_clmem_get(struct dt_pixel_cache_entry_t *entry, void *host_ptr, int devid, int width, int height, int bpp, int flags)
Definition pixelpipe_cache.c:570
void * dt_dev_pixelpipe_cache_get_ref_unlocked(dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, struct dt_pixel_cache_entry_t **cache_entry)
Find an existing cache entry, synchronize once with a short read lock, then keep only a refcount (no ...
Definition pixelpipe_cache.c:1980
struct dt_pixel_cache_entry_t * dt_dev_pixelpipe_cache_ref_entry_for_host_ptr(dt_dev_pixelpipe_cache_t *cache, void *host_ptr)
Resolve and retain the cache entry owning a host pointer.
Definition pixelpipe_cache.c:937
void dt_dev_pixelpipe_cache_close_read_only(dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, struct dt_pixel_cache_entry_t *cache_entry)
Decrease the ref_count and release the read lock over cache_entry all at once.
Definition pixelpipe_cache.c:1973
void dt_dev_pixelpipe_cache_flush_host_pinned_image(dt_dev_pixelpipe_cache_t *cache, void *host_ptr, struct dt_pixel_cache_entry_t *entry_hint, int devid)
Drop cached pinned OpenCL images associated with a given host buffer.
Definition pixelpipe_cache.c:918
gboolean dt_dev_pixelpipe_cache_restore_host_payload(dt_dev_pixelpipe_cache_t *cache, struct dt_pixel_cache_entry_t *entry, int preferred_devid, void **data)
Materialize a host payload for a live cache entry from its cached device payload.
Definition pixelpipe_cache.c:1676
void dt_pixel_cache_clmem_flush(struct dt_pixel_cache_entry_t *entry)
Definition pixelpipe_cache.c:735
int dt_dev_pixelpipe_cache_rekey(dt_dev_pixelpipe_cache_t *cache, const uint64_t old_hash, const uint64_t new_hash, struct dt_pixel_cache_entry_t *entry)
Change the hash/key of an existing cache line in place, without freeing, reallocating or invalidating...
Definition pixelpipe_cache.c:2029
dt_dev_pixelpipe_cache_writable_status_t
Definition pixelpipe_cache.h:69
@ DT_DEV_PIXELPIPE_CACHE_WRITABLE_REKEYED
Definition pixelpipe_cache.h:73
@ DT_DEV_PIXELPIPE_CACHE_WRITABLE_ERROR
Definition pixelpipe_cache.h:70
@ DT_DEV_PIXELPIPE_CACHE_WRITABLE_CREATED
Definition pixelpipe_cache.h:72
@ DT_DEV_PIXELPIPE_CACHE_WRITABLE_EXACT_HIT
Definition pixelpipe_cache.h:71
int dt_dev_pixelpipe_cache_get(dt_dev_pixelpipe_cache_t *cache, const uint64_t hash, const size_t size, const char *name, const int id, const gboolean alloc, void **data, struct dt_pixel_cache_entry_t **entry)
Get a cache line from the cache.
Definition pixelpipe_cache.c:1438
const char * dt_pixelpipe_cache_set_current_module(const char *module)
Set the current module name for cache diagnostics (thread-local).
Definition pixelpipe_cache.c:76
unsigned __int64 uint64_t
Definition strptime.c:74
Definition memory_arena.h:35
Definition pixelpipe_cache.h:55
uint64_t next_serial
Definition pixelpipe_cache.h:59
size_t current_memory
Definition pixelpipe_cache.h:63
dt_cache_arena_t arena
Definition pixelpipe_cache.h:65
GHashTable * entries
Definition pixelpipe_cache.h:56
dt_pthread_mutex_t lock
Definition pixelpipe_cache.h:64
size_t max_memory
Definition pixelpipe_cache.h:62
uint64_t queries
Definition pixelpipe_cache.h:60
GHashTable * external_entries
Definition pixelpipe_cache.h:58
uint64_t hits
Definition pixelpipe_cache.h:61
Definition pixelpipe_hb.h:216
Definition pixelpipe_cache.h:86
uint64_t hash
Definition pixelpipe_cache.h:87
gboolean auto_destroy
Definition pixelpipe_cache.h:96
dt_atomic_int refcount
Definition pixelpipe_cache.h:94
gboolean external_alloc
Definition pixelpipe_cache.h:97
void * data
Definition pixelpipe_cache.h:89
size_t size
Definition pixelpipe_cache.h:90
int64_t age
Definition pixelpipe_cache.h:91
uint64_t serial
Definition pixelpipe_cache.h:88
dt_dev_pixelpipe_cache_t * cache
Definition pixelpipe_cache.h:99
dt_pthread_rwlock_t lock
Definition pixelpipe_cache.h:95
dt_pthread_mutex_t cl_mem_lock
Definition pixelpipe_cache.h:101
GList * cl_mem_list
Definition pixelpipe_cache.h:100
char * name
Definition pixelpipe_cache.h:92
int hits
Definition pixelpipe_cache.h:98
int id
Definition pixelpipe_cache.h:93