mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 04:20:08 +01:00
st/nir: Optionally unify inputs_read/outputs_written when linking.
i965 and iris use inputs_read/outputs_written for a shader stage to determine the layout of input and output storage. Adjacent stages must agree on the layout, so adjacent input/output bitfields must match. This patch adds a new nir_shader_compiler_options::unify_interfaces flag which asks the linker to unify the input/output interfaces between adjacent stages. Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3249>
This commit is contained in:
parent
7a9c0fc0d7
commit
19ed12afd1
2 changed files with 28 additions and 0 deletions
|
|
@ -2839,6 +2839,12 @@ typedef struct nir_shader_compiler_options {
|
|||
bool vectorize_io;
|
||||
bool lower_to_scalar;
|
||||
|
||||
/**
|
||||
* Should the linker unify inputs_read/outputs_written between adjacent
|
||||
* shader stages which are linked into a single program?
|
||||
*/
|
||||
bool unify_interfaces;
|
||||
|
||||
/**
|
||||
* Should nir_lower_io() create load_interpolated_input intrinsics?
|
||||
*
|
||||
|
|
|
|||
|
|
@ -813,6 +813,28 @@ 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