intel/fs: Move the scalar-region conversion to the generator.
Move the scalar-region conversion from the IR to the generator, so it doesn't affect the Gen11 path. We need the non-scalar regioning for a later lowering pass that we are adding. v2: Better commit message (Matt) Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
@@ -1211,7 +1211,7 @@ fs_visitor::emit_fragcoord_interpolation(fs_reg wpos)
|
|||||||
} else {
|
} else {
|
||||||
bld.emit(FS_OPCODE_LINTERP, wpos,
|
bld.emit(FS_OPCODE_LINTERP, wpos,
|
||||||
this->delta_xy[BRW_BARYCENTRIC_PERSPECTIVE_PIXEL],
|
this->delta_xy[BRW_BARYCENTRIC_PERSPECTIVE_PIXEL],
|
||||||
component(interp_reg(VARYING_SLOT_POS, 2), 0));
|
interp_reg(VARYING_SLOT_POS, 2));
|
||||||
}
|
}
|
||||||
wpos = offset(wpos, bld, 1);
|
wpos = offset(wpos, bld, 1);
|
||||||
|
|
||||||
|
@@ -818,7 +818,7 @@ fs_generator::generate_linterp(fs_inst *inst,
|
|||||||
*/
|
*/
|
||||||
struct brw_reg delta_x = src[0];
|
struct brw_reg delta_x = src[0];
|
||||||
struct brw_reg delta_y = offset(src[0], inst->exec_size / 8);
|
struct brw_reg delta_y = offset(src[0], inst->exec_size / 8);
|
||||||
struct brw_reg interp = src[1];
|
struct brw_reg interp = stride(src[1], 0, 1, 0);
|
||||||
brw_inst *i[4];
|
brw_inst *i[4];
|
||||||
|
|
||||||
if (devinfo->gen >= 11) {
|
if (devinfo->gen >= 11) {
|
||||||
|
@@ -3612,8 +3612,8 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder &bld,
|
|||||||
|
|
||||||
for (unsigned int i = 0; i < instr->num_components; i++) {
|
for (unsigned int i = 0; i < instr->num_components; i++) {
|
||||||
fs_reg interp =
|
fs_reg interp =
|
||||||
component(interp_reg(nir_intrinsic_base(instr),
|
interp_reg(nir_intrinsic_base(instr),
|
||||||
nir_intrinsic_component(instr) + i), 0);
|
nir_intrinsic_component(instr) + i);
|
||||||
interp.type = BRW_REGISTER_TYPE_F;
|
interp.type = BRW_REGISTER_TYPE_F;
|
||||||
dest.type = BRW_REGISTER_TYPE_F;
|
dest.type = BRW_REGISTER_TYPE_F;
|
||||||
|
|
||||||
|
@@ -194,7 +194,7 @@ fs_visitor::emit_interpolation_setup_gen4()
|
|||||||
*/
|
*/
|
||||||
this->wpos_w = vgrf(glsl_type::float_type);
|
this->wpos_w = vgrf(glsl_type::float_type);
|
||||||
abld.emit(FS_OPCODE_LINTERP, wpos_w, delta_xy,
|
abld.emit(FS_OPCODE_LINTERP, wpos_w, delta_xy,
|
||||||
component(interp_reg(VARYING_SLOT_POS, 3), 0));
|
interp_reg(VARYING_SLOT_POS, 3));
|
||||||
/* Compute the pixel 1/W value from wpos.w. */
|
/* Compute the pixel 1/W value from wpos.w. */
|
||||||
this->pixel_w = vgrf(glsl_type::float_type);
|
this->pixel_w = vgrf(glsl_type::float_type);
|
||||||
abld.emit(SHADER_OPCODE_RCP, this->pixel_w, wpos_w);
|
abld.emit(SHADER_OPCODE_RCP, this->pixel_w, wpos_w);
|
||||||
|
Reference in New Issue
Block a user