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:
parent
d6053bf2a1
commit
6dc1c2d8bd
|
@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue