OSDN Git Service

anv/pipeline: Split setting up per-stage keys into its own loop
authorJason Ekstrand <jason@jlekstrand.net>
Thu, 25 Apr 2019 00:54:14 +0000 (19:54 -0500)
committerJason Ekstrand <jason@jlekstrand.net>
Mon, 12 Aug 2019 22:56:07 +0000 (22:56 +0000)
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/intel/vulkan/anv_pipeline.c

index 323a789..c1941ec 100644 (file)
@@ -1135,6 +1135,14 @@ anv_pipeline_compile_graphics(struct anv_pipeline *pipeline,
    unsigned char sha1[20];
    anv_pipeline_hash_graphics(pipeline, layout, stages, sha1);
 
+   for (unsigned s = 0; s < MESA_SHADER_STAGES; s++) {
+      if (!stages[s].entrypoint)
+         continue;
+
+      stages[s].cache_key.stage = s;
+      memcpy(stages[s].cache_key.sha1, sha1, sizeof(sha1));
+   }
+
    unsigned found = 0;
    unsigned cache_hits = 0;
    for (unsigned s = 0; s < MESA_SHADER_STAGES; s++) {
@@ -1143,9 +1151,6 @@ anv_pipeline_compile_graphics(struct anv_pipeline *pipeline,
 
       int64_t stage_start = os_time_get_nano();
 
-      stages[s].cache_key.stage = s;
-      memcpy(stages[s].cache_key.sha1, sha1, sizeof(sha1));
-
       bool cache_hit;
       struct anv_shader_bin *bin =
          anv_device_search_for_kernel(pipeline->device, cache,