i965: don't use disk cache with SPIR-V shaders
authorAlejandro Piñeiro <apinheiro@igalia.com>
Wed, 27 Feb 2019 14:28:47 +0000 (15:28 +0100)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Fri, 12 Jul 2019 21:42:41 +0000 (23:42 +0200)
Right now we don't support disk cache for SPIR-V shaders (from
ARB_gl_spirv), so let's avoid writing the program data to or reading
it from the disk if any in-use shaders use SPIR-V.

Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
src/mesa/drivers/dri/i965/brw_disk_cache.c

index f7fe1e2aec84e7f9fc8df474c164de55e861a46d..15e3e895d6cdc4a889ee76773284f4958d93158c 100644 (file)
@@ -235,6 +235,9 @@ brw_disk_cache_upload_program(struct brw_context *brw, gl_shader_stage stage)
    if (prog == NULL)
       return false;
 
+   if (prog->sh.data->spirv)
+      return false;
+
    if (brw->ctx._Shader->Flags & GLSL_CACHE_FALLBACK)
       goto fail;
 
@@ -296,8 +299,15 @@ brw_disk_cache_write_render_programs(struct brw_context *brw)
    if (cache == NULL)
       return;
 
-   struct gl_program *prog =
-      brw->ctx._Shader->CurrentProgram[MESA_SHADER_VERTEX];
+   struct gl_program *prog;
+   gl_shader_stage stage;
+   for (stage = MESA_SHADER_VERTEX; stage <= MESA_SHADER_FRAGMENT; stage++) {
+      prog = brw->ctx._Shader->CurrentProgram[stage];
+      if (prog && prog->sh.data->spirv)
+         return;
+   }
+
+   prog = brw->ctx._Shader->CurrentProgram[MESA_SHADER_VERTEX];
    if (prog && !prog->program_written_to_cache) {
       struct brw_vs_prog_key vs_key;
       brw_vs_populate_key(brw, &vs_key);
@@ -362,6 +372,10 @@ brw_disk_cache_write_compute_program(struct brw_context *brw)
 
    struct gl_program *prog =
       brw->ctx._Shader->CurrentProgram[MESA_SHADER_COMPUTE];
+
+   if (prog && prog->sh.data->spirv)
+      return;
+
    if (prog && !prog->program_written_to_cache) {
       struct brw_cs_prog_key cs_key;
       brw_cs_populate_key(brw, &cs_key);