nir: add pass to convert ViewIndex to DeviceIndex

Used to implement VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30329>
This commit is contained in:
Iván Briano 2024-07-23 10:30:06 -07:00 committed by Marge Bot
parent b6d3f666ab
commit 7fce39484e
3 changed files with 27 additions and 0 deletions

View file

@ -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',

View file

@ -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),

View file

@ -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;
}