2019-01-24 13:07:42 +10:00
|
|
|
/*
|
|
|
|
|
* Copyright © 2015 Red Hat
|
2025-09-17 12:39:05 -04:00
|
|
|
* SPDX-License-Identifier: MIT
|
2019-01-24 13:07:42 +10:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "nir.h"
|
|
|
|
|
#include "nir_builder.h"
|
|
|
|
|
|
2024-03-18 12:54:20 -04:00
|
|
|
static bool
|
2025-09-17 12:39:05 -04:00
|
|
|
lower(nir_builder *b, nir_intrinsic_instr *intr, void *data)
|
2024-03-18 12:54:33 -04:00
|
|
|
{
|
|
|
|
|
if (intr->intrinsic != nir_intrinsic_load_interpolated_input)
|
2025-02-24 15:09:24 -05:00
|
|
|
return false;
|
2025-09-17 12:39:05 -04:00
|
|
|
|
2024-03-18 12:54:33 -04:00
|
|
|
nir_io_semantics sem = nir_intrinsic_io_semantics(intr);
|
2025-09-17 12:39:05 -04:00
|
|
|
if (!(BITFIELD64_BIT(sem.location) & VARYING_BITS_COLOR))
|
2024-03-18 12:54:33 -04:00
|
|
|
return false;
|
2025-09-17 12:39:05 -04:00
|
|
|
|
|
|
|
|
nir_intrinsic_instr *interp = nir_src_as_intrinsic(intr->src[0]);
|
|
|
|
|
if (nir_intrinsic_interp_mode(interp) != INTERP_MODE_NONE)
|
2024-03-18 12:54:33 -04:00
|
|
|
return false;
|
2025-09-17 12:39:05 -04:00
|
|
|
|
2024-03-18 12:54:33 -04:00
|
|
|
b->cursor = nir_before_instr(&intr->instr);
|
|
|
|
|
nir_def *load = nir_load_input(b, intr->num_components,
|
|
|
|
|
intr->def.bit_size, intr->src[1].ssa);
|
2025-09-17 12:39:05 -04:00
|
|
|
nir_intrinsic_copy_const_indices(nir_def_as_intrinsic(load), intr);
|
2024-06-20 12:07:26 -04:00
|
|
|
nir_def_replace(&intr->def, load);
|
2024-03-18 12:54:33 -04:00
|
|
|
return true;
|
|
|
|
|
}
|
2024-12-24 18:08:43 -05:00
|
|
|
|
2019-01-24 13:07:42 +10:00
|
|
|
bool
|
|
|
|
|
nir_lower_flatshade(nir_shader *shader)
|
|
|
|
|
{
|
2024-12-24 18:08:43 -05:00
|
|
|
assert(shader->info.io_lowered);
|
2025-09-17 12:39:05 -04:00
|
|
|
return nir_shader_intrinsics_pass(shader, lower, nir_metadata_all, NULL);
|
2019-01-24 13:07:42 +10:00
|
|
|
}
|