anv: Don't re-upload shaders when merging
authorKristian Høgsberg Kristensen <kristian.h.kristensen@intel.com>
Fri, 4 Mar 2016 20:27:31 +0000 (12:27 -0800)
committerKristian Høgsberg Kristensen <kristian.h.kristensen@intel.com>
Sat, 5 Mar 2016 21:50:07 +0000 (13:50 -0800)
Using anv_pipeline_cache_upload_kernel() will re-upload the kernel and
prog_data when we merge caches. Since the kernel and prog_data is
already in the program_stream, use anv_pipeline_cache_add_entry()
instead to only add the entry to the hash table.

src/intel/vulkan/anv_pipeline_cache.c

index c85916fd1f8d060fcb526747fe94469d5773bc63..376cd2a7716da46e75518e109c1bbd0a07b64794 100644 (file)
@@ -406,23 +406,17 @@ anv_pipeline_cache_merge(struct anv_pipeline_cache *dst,
                          struct anv_pipeline_cache *src)
 {
    for (uint32_t i = 0; i < src->table_size; i++) {
-      if (src->hash_table[i] == ~0)
+      const uint32_t offset = src->hash_table[i];
+      if (offset == ~0)
          continue;
 
       struct cache_entry *entry =
-         src->program_stream.block_pool->map + src->hash_table[i];
+         src->program_stream.block_pool->map + offset;
 
       if (anv_pipeline_cache_search(dst, entry->sha1, NULL) != NO_KERNEL)
          continue;
 
-      const void *kernel = (void *) entry +
-         align_u32(sizeof(*entry) + entry->prog_data_size, 64);
-      const struct brw_stage_prog_data *prog_data =
-         (const struct brw_stage_prog_data *) entry->prog_data;
-
-      anv_pipeline_cache_upload_kernel(dst, entry->sha1,
-                                       kernel, entry->kernel_size,
-                                       &prog_data, entry->prog_data_size);
+      anv_pipeline_cache_add_entry(dst, entry, offset);
    }
 }