anv: Add anv_pipeline_cache_add_entry()

This function will grow the cache to make room and then add the entry.
This commit is contained in:
Kristian Høgsberg Kristensen 2016-03-04 12:25:23 -08:00
parent 07441c344c
commit 626559ed37
1 changed files with 15 additions and 8 deletions

View File

@ -195,6 +195,20 @@ anv_pipeline_cache_grow(struct anv_pipeline_cache *cache)
return VK_SUCCESS;
}
static void
anv_pipeline_cache_add_entry(struct anv_pipeline_cache *cache,
struct cache_entry *entry, uint32_t entry_offset)
{
if (cache->kernel_count == cache->table_size / 2)
anv_pipeline_cache_grow(cache);
/* Failing to grow that hash table isn't fatal, but may mean we don't
* have enough space to add this new kernel. Only add it if there's room.
*/
if (cache->kernel_count < cache->table_size / 2)
anv_pipeline_cache_set_entry(cache, entry, entry_offset);
}
uint32_t
anv_pipeline_cache_upload_kernel(struct anv_pipeline_cache *cache,
const unsigned char *sha1,
@ -224,14 +238,7 @@ anv_pipeline_cache_upload_kernel(struct anv_pipeline_cache *cache,
assert(anv_pipeline_cache_search(cache, sha1, NULL) == NO_KERNEL);
memcpy(entry->sha1, sha1, sizeof(entry->sha1));
if (cache->kernel_count == cache->table_size / 2)
anv_pipeline_cache_grow(cache);
/* Failing to grow that hash table isn't fatal, but may mean we don't
* have enough space to add this new kernel. Only add it if there's room.
*/
if (cache->kernel_count < cache->table_size / 2)
anv_pipeline_cache_set_entry(cache, entry, state.offset);
anv_pipeline_cache_add_entry(cache, entry, state.offset);
}
pthread_mutex_unlock(&cache->mutex);