#include "vc4_qir.h"
#include "compiler/nir/nir_builder.h"
-#include "util/u_format.h"
+#include "util/format/u_format.h"
+#include "util/u_helpers.h"
/**
* Walks the NIR generated by TGSI-to-NIR or GLSL-to-NIR to lower its io
/* We only accept direct outputs and TGSI only ever gives them to us
* with an offset value of 0.
*/
- assert(nir_src_as_const_value(intr->src[0]) &&
- nir_src_as_const_value(intr->src[0])->u32[0] == 0);
+ assert(nir_src_as_uint(intr->src[0]) == 0);
/* Generate dword loads for the VPM values (Since these intrinsics may
* be reordered, the actual reads will be generated at the top of the
replace_intrinsic_with_vec(b, intr, dests);
}
-static bool
-is_point_sprite(struct vc4_compile *c, nir_variable *var)
-{
- if (var->data.location < VARYING_SLOT_VAR0 ||
- var->data.location > VARYING_SLOT_VAR31)
- return false;
-
- return (c->fs_key->point_sprite_mask &
- (1 << (var->data.location - VARYING_SLOT_VAR0)));
-}
-
static void
vc4_nir_lower_fs_input(struct vc4_compile *c, nir_builder *b,
nir_intrinsic_instr *intr)
return;
}
- nir_variable *input_var = NULL;
- nir_foreach_variable(var, &c->s->inputs) {
- if (var->data.driver_location == nir_intrinsic_base(intr)) {
- input_var = var;
- break;
- }
- }
+ nir_variable *input_var =
+ nir_find_variable_with_driver_location(c->s, nir_var_shader_in,
+ nir_intrinsic_base(intr));
assert(input_var);
int comp = nir_intrinsic_component(intr);
/* Lower away point coordinates, and fix up PNTC. */
- if (is_point_sprite(c, input_var) ||
- input_var->data.location == VARYING_SLOT_PNTC) {
+ if (util_varying_is_point_coord(input_var->data.location,
+ c->fs_key->point_sprite_mask)) {
assert(intr->num_components == 1);
nir_ssa_def *result = &intr->dest.ssa;
vc4_nir_lower_output(struct vc4_compile *c, nir_builder *b,
nir_intrinsic_instr *intr)
{
- nir_variable *output_var = NULL;
- nir_foreach_variable(var, &c->s->outputs) {
- if (var->data.driver_location == nir_intrinsic_base(intr)) {
- output_var = var;
- break;
- }
- }
+ nir_variable *output_var =
+ nir_find_variable_with_driver_location(c->s, nir_var_shader_out,
+ nir_intrinsic_base(intr));
assert(output_var);
if (c->stage == QSTAGE_COORD &&
nir_intrinsic_set_base(intr_comp,
nir_intrinsic_base(intr) * 16 +
i * 4);
+ nir_intrinsic_set_range(intr_comp,
+ nir_intrinsic_range(intr) * 16 - i * 4);
intr_comp->src[0] =
nir_src_for_ssa(nir_ishl(b, intr->src[0].ssa,