unsigned index);
void
-emit_sysval_read(compiler_context *ctx, nir_instr *instr, signed dest_override);
+emit_sysval_read(compiler_context *ctx, nir_instr *instr, signed dest_override, unsigned nr_components);
void
midgard_emit_derivatives(compiler_context *ctx, nir_alu_instr *instr);
}
void
-emit_sysval_read(compiler_context *ctx, nir_instr *instr, signed dest_override)
+emit_sysval_read(compiler_context *ctx, nir_instr *instr, signed dest_override,
+ unsigned nr_components)
{
unsigned dest = 0;
unsigned uniform = ((uintptr_t) val) - 1;
/* Emit the read itself -- this is never indirect */
- emit_ubo_read(ctx, dest, uniform, NULL, 0);
+ midgard_instruction *ins =
+ emit_ubo_read(ctx, dest, uniform, NULL, 0);
+
+ ins->mask = mask_of(nr_components);
}
static void
case nir_intrinsic_load_viewport_scale:
case nir_intrinsic_load_viewport_offset:
- emit_sysval_read(ctx, &instr->instr, -1);
+ emit_sysval_read(ctx, &instr->instr, -1, 3);
break;
default:
emit_texop_native(ctx, instr, TEXTURE_OP_TEXEL_FETCH);
break;
case nir_texop_txs:
- emit_sysval_read(ctx, &instr->instr, -1);
+ emit_sysval_read(ctx, &instr->instr, -1, 4);
break;
default:
unreachable("Unhanlded texture op");