iris: Fix ALT mode regressions from shader cache

We were checking this based on nir->info.name, but with the shader
cache enabled, nir_strip throws out the name, causing us to use IEEE
mode for ARB programs.

gl-1.0-spot-light regressed because it wants ALT mode for 0^0 behavior.

Fixes: dc5dc727d5 iris: Serialize the NIR to a blob we can use for shader cache purposes.
This commit is contained in:
Kenneth Graunke 2019-05-21 16:10:21 -07:00
parent d6053bf2a1
commit 6dc1c2d8bd
2 changed files with 9 additions and 4 deletions

View File

@ -271,6 +271,9 @@ struct iris_uncompiled_shader {
/** Have any shader variants been compiled yet? */
bool compiled_once;
/** Should we use ALT mode for math? Useful for ARB programs. */
bool use_alt_mode;
};
/**

View File

@ -543,8 +543,7 @@ iris_compile_vs(struct iris_context *ice,
nir_shader_gather_info(nir, impl);
}
if (nir->info.name && strncmp(nir->info.name, "ARB", 3) == 0)
prog_data->use_alt_mode = true;
prog_data->use_alt_mode = ish->use_alt_mode;
iris_setup_uniforms(compiler, mem_ctx, nir, prog_data, &system_values,
&num_system_values, &num_cbufs);
@ -1061,8 +1060,7 @@ iris_compile_fs(struct iris_context *ice,
nir_shader *nir = nir_shader_clone(mem_ctx, ish->nir);
if (nir->info.name && strncmp(nir->info.name, "ARB", 3) == 0)
prog_data->use_alt_mode = true;
prog_data->use_alt_mode = ish->use_alt_mode;
iris_setup_uniforms(compiler, mem_ctx, nir, prog_data, &system_values,
&num_system_values, &num_cbufs);
@ -1490,6 +1488,10 @@ iris_create_uncompiled_shader(struct pipe_context *ctx,
update_so_info(&ish->stream_output, nir->info.outputs_written);
}
/* Save this now before potentially dropping nir->info.name */
if (nir->info.name && strncmp(nir->info.name, "ARB", 3) == 0)
ish->use_alt_mode = true;
if (screen->disk_cache) {
/* Serialize the NIR to a binary blob that we can hash for the disk
* cache. First, drop unnecessary information (like variable names)