lower_uniform_pull_constant_loads();
}
+/**
+ * Three source instruction must have a GRF/MRF destination register.
+ * ARF NULL is not allowed. Fix that up by allocating a temporary GRF.
+ */
+void
+fs_visitor::fixup_3src_null_dest()
+{
+ foreach_block_and_inst_safe (block, fs_inst, inst, cfg) {
+ if (inst->is_3src() && inst->dst.is_null()) {
+ inst->dst = fs_reg(GRF, virtual_grf_alloc(dispatch_width / 8),
+ inst->dst.type);
+ }
+ }
+}
+
void
fs_visitor::allocate_registers()
{
assign_curb_setup();
assign_vs_urb_setup();
+ fixup_3src_null_dest();
allocate_registers();
return !failed;
assign_curb_setup();
assign_urb_setup();
+ fixup_3src_null_dest();
allocate_registers();
if (failed)
void setup_payload_gen4();
void setup_payload_gen6();
void setup_vs_payload();
+ void fixup_3src_null_dest();
void assign_curb_setup();
void calculate_urb_setup();
void assign_urb_setup();