diff --git a/src/compiler/nir/meson.build b/src/compiler/nir/meson.build index edb831fc528..000bdaf026a 100644 --- a/src/compiler/nir/meson.build +++ b/src/compiler/nir/meson.build @@ -203,6 +203,7 @@ files_libnir = files( 'nir_lower_var_copies.c', 'nir_lower_vec_to_regs.c', 'nir_lower_vec3_to_vec4.c', + 'nir_lower_view_index_to_device_index.c', 'nir_lower_viewport_transform.c', 'nir_lower_wpos_center.c', 'nir_lower_wpos_ytransform.c', diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index c423398c167..65b9b9acb29 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -6512,6 +6512,8 @@ bool nir_shader_uses_view_index(nir_shader *shader); bool nir_can_lower_multiview(nir_shader *shader); bool nir_lower_multiview(nir_shader *shader, uint32_t view_mask); +bool nir_lower_view_index_to_device_index(nir_shader *shader); + typedef enum { nir_lower_fp16_rtz = (1 << 0), nir_lower_fp16_rtne = (1 << 1), diff --git a/src/compiler/nir/nir_lower_view_index_to_device_index.c b/src/compiler/nir/nir_lower_view_index_to_device_index.c new file mode 100644 index 00000000000..7010bd27cea --- /dev/null +++ b/src/compiler/nir/nir_lower_view_index_to_device_index.c @@ -0,0 +1,24 @@ +/* + * Copyright 2024 Intel Corporation + * SPDX-License-Identifier: MIT + */ + +#include "nir.h" + +bool +nir_lower_view_index_to_device_index(nir_shader *shader) +{ + bool progress = false; + + nir_foreach_variable_with_modes(var, shader, nir_var_system_value) { + if (var->data.location == SYSTEM_VALUE_VIEW_INDEX) { + var->data.location = SYSTEM_VALUE_DEVICE_INDEX; + progress = true; + /* Can there be more than one of these or should we break here? */ + } + } + + nir_shader_preserve_all_metadata(shader); + + return progress; +}