• Home
  • Raw
  • Download

Lines Matching refs:cache

48 tu_pipeline_cache_init(struct tu_pipeline_cache *cache,  in tu_pipeline_cache_init()  argument
51 cache->device = device; in tu_pipeline_cache_init()
52 pthread_mutex_init(&cache->mutex, NULL); in tu_pipeline_cache_init()
54 cache->modified = false; in tu_pipeline_cache_init()
55 cache->kernel_count = 0; in tu_pipeline_cache_init()
56 cache->total_size = 0; in tu_pipeline_cache_init()
57 cache->table_size = 1024; in tu_pipeline_cache_init()
58 const size_t byte_size = cache->table_size * sizeof(cache->hash_table[0]); in tu_pipeline_cache_init()
59 cache->hash_table = malloc(byte_size); in tu_pipeline_cache_init()
64 if (cache->hash_table == NULL) in tu_pipeline_cache_init()
65 cache->table_size = 0; in tu_pipeline_cache_init()
67 memset(cache->hash_table, 0, byte_size); in tu_pipeline_cache_init()
71 tu_pipeline_cache_finish(struct tu_pipeline_cache *cache) in tu_pipeline_cache_finish() argument
73 for (unsigned i = 0; i < cache->table_size; ++i) in tu_pipeline_cache_finish()
74 if (cache->hash_table[i]) { in tu_pipeline_cache_finish()
75 vk_free(&cache->alloc, cache->hash_table[i]); in tu_pipeline_cache_finish()
77 pthread_mutex_destroy(&cache->mutex); in tu_pipeline_cache_finish()
78 free(cache->hash_table); in tu_pipeline_cache_finish()
93 tu_pipeline_cache_search_unlocked(struct tu_pipeline_cache *cache, in tu_pipeline_cache_search_unlocked() argument
96 const uint32_t mask = cache->table_size - 1; in tu_pipeline_cache_search_unlocked()
99 if (cache->table_size == 0) in tu_pipeline_cache_search_unlocked()
102 for (uint32_t i = 0; i < cache->table_size; i++) { in tu_pipeline_cache_search_unlocked()
104 struct cache_entry *entry = cache->hash_table[index]; in tu_pipeline_cache_search_unlocked()
118 tu_pipeline_cache_search(struct tu_pipeline_cache *cache, in tu_pipeline_cache_search() argument
123 pthread_mutex_lock(&cache->mutex); in tu_pipeline_cache_search()
125 entry = tu_pipeline_cache_search_unlocked(cache, sha1); in tu_pipeline_cache_search()
127 pthread_mutex_unlock(&cache->mutex); in tu_pipeline_cache_search()
133 tu_pipeline_cache_set_entry(struct tu_pipeline_cache *cache, in tu_pipeline_cache_set_entry() argument
136 const uint32_t mask = cache->table_size - 1; in tu_pipeline_cache_set_entry()
140 assert(cache->kernel_count < cache->table_size / 2); in tu_pipeline_cache_set_entry()
142 for (uint32_t i = 0; i < cache->table_size; i++) { in tu_pipeline_cache_set_entry()
144 if (!cache->hash_table[index]) { in tu_pipeline_cache_set_entry()
145 cache->hash_table[index] = entry; in tu_pipeline_cache_set_entry()
150 cache->total_size += entry_size(entry); in tu_pipeline_cache_set_entry()
151 cache->kernel_count++; in tu_pipeline_cache_set_entry()
155 tu_pipeline_cache_grow(struct tu_pipeline_cache *cache) in tu_pipeline_cache_grow() argument
157 const uint32_t table_size = cache->table_size * 2; in tu_pipeline_cache_grow()
158 const uint32_t old_table_size = cache->table_size; in tu_pipeline_cache_grow()
159 const size_t byte_size = table_size * sizeof(cache->hash_table[0]); in tu_pipeline_cache_grow()
161 struct cache_entry **old_table = cache->hash_table; in tu_pipeline_cache_grow()
165 return vk_error(cache, VK_ERROR_OUT_OF_HOST_MEMORY); in tu_pipeline_cache_grow()
167 cache->hash_table = table; in tu_pipeline_cache_grow()
168 cache->table_size = table_size; in tu_pipeline_cache_grow()
169 cache->kernel_count = 0; in tu_pipeline_cache_grow()
170 cache->total_size = 0; in tu_pipeline_cache_grow()
172 memset(cache->hash_table, 0, byte_size); in tu_pipeline_cache_grow()
178 tu_pipeline_cache_set_entry(cache, entry); in tu_pipeline_cache_grow()
187 tu_pipeline_cache_add_entry(struct tu_pipeline_cache *cache, in tu_pipeline_cache_add_entry() argument
190 if (cache->kernel_count == cache->table_size / 2) in tu_pipeline_cache_add_entry()
191 tu_pipeline_cache_grow(cache); in tu_pipeline_cache_add_entry()
196 if (cache->kernel_count < cache->table_size / 2) in tu_pipeline_cache_add_entry()
197 tu_pipeline_cache_set_entry(cache, entry); in tu_pipeline_cache_add_entry()
201 tu_pipeline_cache_load(struct tu_pipeline_cache *cache, in tu_pipeline_cache_load() argument
205 struct tu_device *device = cache->device; in tu_pipeline_cache_load()
234 vk_alloc(&cache->alloc, size, 8, VK_SYSTEM_ALLOCATION_SCOPE_CACHE); in tu_pipeline_cache_load()
239 tu_pipeline_cache_add_entry(cache, dest_entry); in tu_pipeline_cache_load()
252 struct tu_pipeline_cache *cache; in tu_CreatePipelineCache() local
257 cache = vk_object_alloc(&device->vk, pAllocator, sizeof(*cache), in tu_CreatePipelineCache()
259 if (cache == NULL) in tu_CreatePipelineCache()
263 cache->alloc = *pAllocator; in tu_CreatePipelineCache()
265 cache->alloc = device->vk.alloc; in tu_CreatePipelineCache()
267 tu_pipeline_cache_init(cache, device); in tu_CreatePipelineCache()
270 tu_pipeline_cache_load(cache, pCreateInfo->pInitialData, in tu_CreatePipelineCache()
274 *pPipelineCache = tu_pipeline_cache_to_handle(cache); in tu_CreatePipelineCache()
285 TU_FROM_HANDLE(tu_pipeline_cache, cache, _cache); in tu_DestroyPipelineCache()
287 if (!cache) in tu_DestroyPipelineCache()
289 tu_pipeline_cache_finish(cache); in tu_DestroyPipelineCache()
291 vk_object_free(&device->vk, pAllocator, cache); in tu_DestroyPipelineCache()
301 TU_FROM_HANDLE(tu_pipeline_cache, cache, _cache); in tu_GetPipelineCacheData()
305 pthread_mutex_lock(&cache->mutex); in tu_GetPipelineCacheData()
307 const size_t size = sizeof(*header) + cache->total_size; in tu_GetPipelineCacheData()
309 pthread_mutex_unlock(&cache->mutex); in tu_GetPipelineCacheData()
314 pthread_mutex_unlock(&cache->mutex); in tu_GetPipelineCacheData()
328 for (uint32_t i = 0; i < cache->table_size; i++) { in tu_GetPipelineCacheData()
329 if (!cache->hash_table[i]) in tu_GetPipelineCacheData()
331 entry = cache->hash_table[i]; in tu_GetPipelineCacheData()
345 pthread_mutex_unlock(&cache->mutex); in tu_GetPipelineCacheData()