mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 19:58:09 +02:00
st/nir: Unify inputs_read/outputs_written before serializing NIR
Otherwise input/output interfaces won't be unified when reading
NIR from a cache.
Fixes piglit test on iris:
clip-distance-vs-gs-out.shader_test
Fixes: 19ed12af
Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3787>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3787>
This commit is contained in:
parent
9903f10636
commit
b684ba6ce7
1 changed files with 19 additions and 22 deletions
|
|
@ -793,6 +793,25 @@ st_link_nir(struct gl_context *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
struct shader_info *prev_info = NULL;
|
||||
|
||||
for (unsigned i = 0; i < num_shaders; i++) {
|
||||
struct gl_linked_shader *shader = linked_shader[i];
|
||||
struct shader_info *info = &shader->Program->nir->info;
|
||||
|
||||
if (prev_info &&
|
||||
ctx->Const.ShaderCompilerOptions[shader->Stage].NirOptions->unify_interfaces) {
|
||||
prev_info->outputs_written |= info->inputs_read &
|
||||
~(VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER);
|
||||
info->inputs_read |= prev_info->outputs_written &
|
||||
~(VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER);
|
||||
|
||||
prev_info->patch_outputs_written |= info->patch_inputs_read;
|
||||
info->patch_inputs_read |= prev_info->patch_outputs_written;
|
||||
}
|
||||
prev_info = info;
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < num_shaders; i++) {
|
||||
struct gl_linked_shader *shader = linked_shader[i];
|
||||
struct gl_program *prog = shader->Program;
|
||||
|
|
@ -819,28 +838,6 @@ st_link_nir(struct gl_context *ctx,
|
|||
shader->ir = NULL;
|
||||
}
|
||||
|
||||
struct shader_info *prev_info = NULL;
|
||||
|
||||
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||
struct gl_linked_shader *shader = shader_program->_LinkedShaders[i];
|
||||
if (!shader)
|
||||
continue;
|
||||
|
||||
struct shader_info *info = &shader->Program->nir->info;
|
||||
|
||||
if (prev_info &&
|
||||
ctx->Const.ShaderCompilerOptions[i].NirOptions->unify_interfaces) {
|
||||
prev_info->outputs_written |= info->inputs_read &
|
||||
~(VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER);
|
||||
info->inputs_read |= prev_info->outputs_written &
|
||||
~(VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER);
|
||||
|
||||
prev_info->patch_outputs_written |= info->patch_inputs_read;
|
||||
info->patch_inputs_read |= prev_info->patch_outputs_written;
|
||||
}
|
||||
prev_info = info;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue