i965/icl: Disable binding table prefetching
[mesa.git] / src / mesa / drivers / dri / i965 / brw_tes.c
index 225d2401c7e10cb45641ab6dc0b3e4bfecef8914..b3220a947415ed2e7efc6199594527587220dfbf 100644 (file)
@@ -85,7 +85,7 @@ brw_codegen_tes_prog(struct brw_context *brw,
    brw_nir_setup_glsl_uniforms(mem_ctx, nir, &tep->program,
                                &prog_data.base.base,
                                compiler->scalar_stage[MESA_SHADER_TESS_EVAL]);
-   brw_nir_analyze_ubo_ranges(compiler, tep->program.nir,
+   brw_nir_analyze_ubo_ranges(compiler, tep->program.nir, NULL,
                               prog_data.base.base.ubo_ranges);
 
    int st_index = -1;
@@ -106,7 +106,7 @@ brw_codegen_tes_prog(struct brw_context *brw,
       brw_compile_tes(compiler, brw, mem_ctx, key, &input_vue_map, &prog_data,
                       nir, &tep->program, st_index, &error_str);
    if (program == NULL) {
-      tep->program.sh.data->LinkStatus = linking_failure;
+      tep->program.sh.data->LinkStatus = LINKING_FAILURE;
       ralloc_strcat(&tep->program.sh.data->InfoLog, error_str);
 
       _mesa_problem(NULL, "Failed to compile tessellation evaluation shader: "
@@ -195,16 +195,45 @@ brw_upload_tes_prog(struct brw_context *brw)
 
    brw_tes_populate_key(brw, &key);
 
-   if (!brw_search_cache(&brw->cache, BRW_CACHE_TES_PROG,
-                         &key, sizeof(key),
-                         &stage_state->prog_offset,
-                         &brw->tes.base.prog_data)) {
-      bool success = brw_codegen_tes_prog(brw, tep, &key);
-      assert(success);
-      (void)success;
-   }
+   if (brw_search_cache(&brw->cache, BRW_CACHE_TES_PROG, &key, sizeof(key),
+                        &stage_state->prog_offset, &brw->tes.base.prog_data,
+                        true))
+      return;
+
+   if (brw_disk_cache_upload_program(brw, MESA_SHADER_TESS_EVAL))
+      return;
+
+   tep = (struct brw_program *) brw->programs[MESA_SHADER_TESS_EVAL];
+   tep->id = key.program_string_id;
+
+   MAYBE_UNUSED bool success = brw_codegen_tes_prog(brw, tep, &key);
+   assert(success);
 }
 
+void
+brw_tes_populate_default_key(const struct gen_device_info *devinfo,
+                             struct brw_tes_prog_key *key,
+                             struct gl_shader_program *sh_prog,
+                             struct gl_program *prog)
+{
+   struct brw_program *btep = brw_program(prog);
+
+   memset(key, 0, sizeof(*key));
+
+   key->program_string_id = btep->id;
+   key->inputs_read = prog->nir->info.inputs_read;
+   key->patch_inputs_read = prog->nir->info.patch_inputs_read;
+
+   if (sh_prog->_LinkedShaders[MESA_SHADER_TESS_CTRL]) {
+      struct gl_program *tcp =
+         sh_prog->_LinkedShaders[MESA_SHADER_TESS_CTRL]->Program;
+      key->inputs_read |= tcp->nir->info.outputs_written &
+         ~(VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER);
+      key->patch_inputs_read |= tcp->nir->info.patch_outputs_written;
+   }
+
+   brw_setup_tex_for_precompile(devinfo, &key->tex, prog);
+}
 
 bool
 brw_tes_precompile(struct gl_context *ctx,
@@ -219,21 +248,7 @@ brw_tes_precompile(struct gl_context *ctx,
 
    struct brw_program *btep = brw_program(prog);
 
-   memset(&key, 0, sizeof(key));
-
-   key.program_string_id = btep->id;
-   key.inputs_read = prog->nir->info.inputs_read;
-   key.patch_inputs_read = prog->nir->info.patch_inputs_read;
-
-   if (shader_prog->_LinkedShaders[MESA_SHADER_TESS_CTRL]) {
-      struct gl_program *tcp =
-         shader_prog->_LinkedShaders[MESA_SHADER_TESS_CTRL]->Program;
-      key.inputs_read |= tcp->nir->info.outputs_written &
-         ~(VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER);
-      key.patch_inputs_read |= tcp->nir->info.patch_outputs_written;
-   }
-
-   brw_setup_tex_for_precompile(brw, &key.tex, prog);
+   brw_tes_populate_default_key(&brw->screen->devinfo, &key, shader_prog, prog);
 
    success = brw_codegen_tes_prog(brw, btep, &key);