glsl/shader_cache: handle SPIR-V shaders
authorAlejandro Piñeiro <apinheiro@igalia.com>
Wed, 27 Feb 2019 14:29:15 +0000 (15:29 +0100)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Fri, 12 Jul 2019 21:42:41 +0000 (23:42 +0200)
Right now we don't have cache support for SPIR-V shaders (from
ARB_gl_spirv). Right now they are properly skipped because they fall
on the ff shader code path (no key, no name), but it would be better
to update current comments, and add some guards.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/compiler/glsl/shader_cache.cpp

index 97049043345d490f855a523979d37cc3f84e81b5..aacaa46748e92b71873f4a71bb8ccdd9cf14f909 100644 (file)
@@ -90,10 +90,10 @@ shader_cache_write_program_metadata(struct gl_context *ctx,
       return;
 
    /* Exit early when we are dealing with a ff shader with no source file to
-    * generate a source from.
+    * generate a source from, or with a SPIR-V shader.
     *
     * TODO: In future we should use another method to generate a key for ff
-    * programs.
+    * programs, and SPIR-V shaders.
     */
    static const char zero[sizeof(prog->data->sha1)] = {0};
    if (memcmp(prog->data->sha1, zero, sizeof(prog->data->sha1)) == 0)
@@ -144,10 +144,10 @@ bool
 shader_cache_read_program_metadata(struct gl_context *ctx,
                                    struct gl_shader_program *prog)
 {
-   /* Fixed function programs generated by Mesa are not cached. So don't
-    * try to read metadata for them from the cache.
+   /* Fixed function programs generated by Mesa, or SPIR-V shaders, are not
+    * cached. So don't try to read metadata for them from the cache.
     */
-   if (prog->Name == 0)
+   if (prog->Name == 0 || prog->data->spirv)
       return false;
 
    struct disk_cache *cache = ctx->Cache;