mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 03:48:06 +02:00
anv/pipeline: Fix up deref modes if we delete a FS output
With the new deref instructions, we have to keep the modes consistent between the derefs and the variables they reference. Since we remove outputs by changing them to local variables, we need to run the fixup pass to fix the modes. Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
parent
7f75cf2a94
commit
4d57e543b8
1 changed files with 5 additions and 0 deletions
|
|
@ -930,6 +930,7 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline,
|
|||
num_rts++;
|
||||
}
|
||||
|
||||
bool deleted_output = false;
|
||||
nir_foreach_variable_safe(var, &nir->outputs) {
|
||||
if (var->data.location < FRAG_RESULT_DATA0)
|
||||
continue;
|
||||
|
|
@ -937,6 +938,7 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline,
|
|||
const unsigned rt = var->data.location - FRAG_RESULT_DATA0;
|
||||
if (rt >= key.nr_color_regions) {
|
||||
/* Out-of-bounds, throw it away */
|
||||
deleted_output = true;
|
||||
var->data.mode = nir_var_local;
|
||||
exec_node_remove(&var->node);
|
||||
exec_list_push_tail(&impl->locals, &var->node);
|
||||
|
|
@ -948,6 +950,9 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline,
|
|||
var->data.location = rt_to_bindings[rt] + FRAG_RESULT_DATA0;
|
||||
}
|
||||
|
||||
if (deleted_output)
|
||||
nir_fixup_deref_modes(nir);
|
||||
|
||||
if (num_rts == 0) {
|
||||
/* If we have no render targets, we need a null render target */
|
||||
rt_bindings[0] = (struct anv_pipeline_binding) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue