Lines Matching refs:cache
44 radv_pipeline_cache_init(struct radv_pipeline_cache *cache, in radv_pipeline_cache_init() argument
47 cache->device = device; in radv_pipeline_cache_init()
48 pthread_mutex_init(&cache->mutex, NULL); in radv_pipeline_cache_init()
50 cache->modified = false; in radv_pipeline_cache_init()
51 cache->kernel_count = 0; in radv_pipeline_cache_init()
52 cache->total_size = 0; in radv_pipeline_cache_init()
53 cache->table_size = 1024; in radv_pipeline_cache_init()
54 const size_t byte_size = cache->table_size * sizeof(cache->hash_table[0]); in radv_pipeline_cache_init()
55 cache->hash_table = malloc(byte_size); in radv_pipeline_cache_init()
59 if (cache->hash_table == NULL || in radv_pipeline_cache_init()
61 cache->table_size = 0; in radv_pipeline_cache_init()
63 memset(cache->hash_table, 0, byte_size); in radv_pipeline_cache_init()
67 radv_pipeline_cache_finish(struct radv_pipeline_cache *cache) in radv_pipeline_cache_finish() argument
69 for (unsigned i = 0; i < cache->table_size; ++i) in radv_pipeline_cache_finish()
70 if (cache->hash_table[i]) { in radv_pipeline_cache_finish()
71 if (cache->hash_table[i]->variant) in radv_pipeline_cache_finish()
72 radv_shader_variant_destroy(cache->device, in radv_pipeline_cache_finish()
73 cache->hash_table[i]->variant); in radv_pipeline_cache_finish()
74 vk_free(&cache->alloc, cache->hash_table[i]); in radv_pipeline_cache_finish()
76 pthread_mutex_destroy(&cache->mutex); in radv_pipeline_cache_finish()
77 free(cache->hash_table); in radv_pipeline_cache_finish()
112 radv_pipeline_cache_search_unlocked(struct radv_pipeline_cache *cache, in radv_pipeline_cache_search_unlocked() argument
115 const uint32_t mask = cache->table_size - 1; in radv_pipeline_cache_search_unlocked()
118 for (uint32_t i = 0; i < cache->table_size; i++) { in radv_pipeline_cache_search_unlocked()
120 struct cache_entry *entry = cache->hash_table[index]; in radv_pipeline_cache_search_unlocked()
134 radv_pipeline_cache_search(struct radv_pipeline_cache *cache, in radv_pipeline_cache_search() argument
139 pthread_mutex_lock(&cache->mutex); in radv_pipeline_cache_search()
141 entry = radv_pipeline_cache_search_unlocked(cache, sha1); in radv_pipeline_cache_search()
143 pthread_mutex_unlock(&cache->mutex); in radv_pipeline_cache_search()
150 struct radv_pipeline_cache *cache, in radv_create_shader_variant_from_pipeline_cache() argument
153 struct cache_entry *entry = radv_pipeline_cache_search(cache, sha1); in radv_create_shader_variant_from_pipeline_cache()
187 radv_pipeline_cache_set_entry(struct radv_pipeline_cache *cache, in radv_pipeline_cache_set_entry() argument
190 const uint32_t mask = cache->table_size - 1; in radv_pipeline_cache_set_entry()
194 assert(cache->kernel_count < cache->table_size / 2); in radv_pipeline_cache_set_entry()
196 for (uint32_t i = 0; i < cache->table_size; i++) { in radv_pipeline_cache_set_entry()
198 if (!cache->hash_table[index]) { in radv_pipeline_cache_set_entry()
199 cache->hash_table[index] = entry; in radv_pipeline_cache_set_entry()
204 cache->total_size += entry_size(entry); in radv_pipeline_cache_set_entry()
205 cache->kernel_count++; in radv_pipeline_cache_set_entry()
210 radv_pipeline_cache_grow(struct radv_pipeline_cache *cache) in radv_pipeline_cache_grow() argument
212 const uint32_t table_size = cache->table_size * 2; in radv_pipeline_cache_grow()
213 const uint32_t old_table_size = cache->table_size; in radv_pipeline_cache_grow()
214 const size_t byte_size = table_size * sizeof(cache->hash_table[0]); in radv_pipeline_cache_grow()
216 struct cache_entry **old_table = cache->hash_table; in radv_pipeline_cache_grow()
222 cache->hash_table = table; in radv_pipeline_cache_grow()
223 cache->table_size = table_size; in radv_pipeline_cache_grow()
224 cache->kernel_count = 0; in radv_pipeline_cache_grow()
225 cache->total_size = 0; in radv_pipeline_cache_grow()
227 memset(cache->hash_table, 0, byte_size); in radv_pipeline_cache_grow()
233 radv_pipeline_cache_set_entry(cache, entry); in radv_pipeline_cache_grow()
242 radv_pipeline_cache_add_entry(struct radv_pipeline_cache *cache, in radv_pipeline_cache_add_entry() argument
245 if (cache->kernel_count == cache->table_size / 2) in radv_pipeline_cache_add_entry()
246 radv_pipeline_cache_grow(cache); in radv_pipeline_cache_add_entry()
251 if (cache->kernel_count < cache->table_size / 2) in radv_pipeline_cache_add_entry()
252 radv_pipeline_cache_set_entry(cache, entry); in radv_pipeline_cache_add_entry()
256 radv_pipeline_cache_insert_shader(struct radv_pipeline_cache *cache, in radv_pipeline_cache_insert_shader() argument
261 pthread_mutex_lock(&cache->mutex); in radv_pipeline_cache_insert_shader()
262 struct cache_entry *entry = radv_pipeline_cache_search_unlocked(cache, sha1); in radv_pipeline_cache_insert_shader()
265 radv_shader_variant_destroy(cache->device, variant); in radv_pipeline_cache_insert_shader()
271 pthread_mutex_unlock(&cache->mutex); in radv_pipeline_cache_insert_shader()
275 entry = vk_alloc(&cache->alloc, sizeof(*entry) + code_size, 8, in radv_pipeline_cache_insert_shader()
278 pthread_mutex_unlock(&cache->mutex); in radv_pipeline_cache_insert_shader()
292 radv_pipeline_cache_add_entry(cache, entry); in radv_pipeline_cache_insert_shader()
294 cache->modified = true; in radv_pipeline_cache_insert_shader()
295 pthread_mutex_unlock(&cache->mutex); in radv_pipeline_cache_insert_shader()
307 radv_pipeline_cache_load(struct radv_pipeline_cache *cache, in radv_pipeline_cache_load() argument
310 struct radv_device *device = cache->device; in radv_pipeline_cache_load()
336 dest_entry = vk_alloc(&cache->alloc, sizeof(*entry) + entry->code_size, in radv_pipeline_cache_load()
341 radv_pipeline_cache_add_entry(cache, dest_entry); in radv_pipeline_cache_load()
354 struct radv_pipeline_cache *cache; in radv_CreatePipelineCache() local
359 cache = vk_alloc2(&device->alloc, pAllocator, in radv_CreatePipelineCache()
360 sizeof(*cache), 8, in radv_CreatePipelineCache()
362 if (cache == NULL) in radv_CreatePipelineCache()
366 cache->alloc = *pAllocator; in radv_CreatePipelineCache()
368 cache->alloc = device->alloc; in radv_CreatePipelineCache()
370 radv_pipeline_cache_init(cache, device); in radv_CreatePipelineCache()
373 radv_pipeline_cache_load(cache, in radv_CreatePipelineCache()
378 *pPipelineCache = radv_pipeline_cache_to_handle(cache); in radv_CreatePipelineCache()
389 RADV_FROM_HANDLE(radv_pipeline_cache, cache, _cache); in radv_DestroyPipelineCache()
391 if (!cache) in radv_DestroyPipelineCache()
393 radv_pipeline_cache_finish(cache); in radv_DestroyPipelineCache()
395 vk_free2(&device->alloc, pAllocator, cache); in radv_DestroyPipelineCache()
405 RADV_FROM_HANDLE(radv_pipeline_cache, cache, _cache); in radv_GetPipelineCacheData()
408 const size_t size = sizeof(*header) + cache->total_size; in radv_GetPipelineCacheData()
427 for (uint32_t i = 0; i < cache->table_size; i++) { in radv_GetPipelineCacheData()
428 if (!cache->hash_table[i]) in radv_GetPipelineCacheData()
430 entry = cache->hash_table[i]; in radv_GetPipelineCacheData()