bool lower_integer_multiplication();
bool lower_minmax();
bool lower_simd_width();
+ bool lower_barycentrics();
bool lower_scoreboard();
+ bool lower_sub_sat();
bool opt_combine_constants();
void emit_dummy_fs();
void lower_mul_dword_inst(fs_inst *inst, bblock_t *block);
void lower_mul_qword_inst(fs_inst *inst, bblock_t *block);
void lower_mulh_inst(fs_inst *inst, bblock_t *block);
+
+ unsigned workgroup_size() const;
};
/**
namespace brw {
inline fs_reg
fetch_payload_reg(const brw::fs_builder &bld, uint8_t regs[2],
- brw_reg_type type = BRW_REGISTER_TYPE_F, unsigned n = 1)
+ brw_reg_type type = BRW_REGISTER_TYPE_F)
{
if (!regs[0])
return fs_reg();
if (bld.dispatch_width() > 16) {
- const fs_reg tmp = bld.vgrf(type, n);
+ const fs_reg tmp = bld.vgrf(type);
const brw::fs_builder hbld = bld.exec_all().group(16, 0);
const unsigned m = bld.dispatch_width() / hbld.dispatch_width();
- fs_reg *const components = new fs_reg[n * m];
+ fs_reg *const components = new fs_reg[m];
- for (unsigned c = 0; c < n; c++) {
- for (unsigned g = 0; g < m; g++) {
- components[c * m + g] =
- offset(retype(brw_vec8_grf(regs[g], 0), type), hbld, c);
- }
- }
+ for (unsigned g = 0; g < m; g++)
+ components[g] = retype(brw_vec8_grf(regs[g], 0), type);
- hbld.LOAD_PAYLOAD(tmp, components, n * m, 0);
+ hbld.LOAD_PAYLOAD(tmp, components, m, 0);
delete[] components;
return tmp;
}
}
+ inline fs_reg
+ fetch_barycentric_reg(const brw::fs_builder &bld, uint8_t regs[2])
+ {
+ if (!regs[0])
+ return fs_reg();
+
+ const fs_reg tmp = bld.vgrf(BRW_REGISTER_TYPE_F, 2);
+ const brw::fs_builder hbld = bld.exec_all().group(8, 0);
+ const unsigned m = bld.dispatch_width() / hbld.dispatch_width();
+ fs_reg *const components = new fs_reg[2 * m];
+
+ for (unsigned c = 0; c < 2; c++) {
+ for (unsigned g = 0; g < m; g++)
+ components[c * m + g] = offset(brw_vec8_grf(regs[g / 2], 0),
+ hbld, c + 2 * (g % 2));
+ }
+
+ hbld.LOAD_PAYLOAD(tmp, components, 2 * m, 0);
+
+ delete[] components;
+ return tmp;
+ }
+
bool
lower_src_modifiers(fs_visitor *v, bblock_t *block, fs_inst *inst, unsigned i);
}