Skip to content
Snippets Groups Projects
Commit cf0e7aa9 authored by Paul Berry's avatar Paul Berry
Browse files

i965/fs: Refactor interpolation code to prepare for adding centroid support.


Reviewed-by: default avatarEric Anholt <eric@anholt.net>
parent 6d7ebb21
No related branches found
No related tags found
No related merge requests found
...@@ -419,6 +419,20 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir) ...@@ -419,6 +419,20 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir)
return reg; return reg;
} }
fs_inst *
fs_visitor::emit_linterp(const fs_reg &attr, const fs_reg &interp,
glsl_interp_qualifier interpolation_mode)
{
brw_wm_barycentric_interp_mode barycoord_mode;
if (interpolation_mode == INTERP_QUALIFIER_SMOOTH)
barycoord_mode = BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC;
else
barycoord_mode = BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC;
return emit(FS_OPCODE_LINTERP, attr,
this->delta_x[barycoord_mode],
this->delta_y[barycoord_mode], interp);
}
fs_reg * fs_reg *
fs_visitor::emit_general_interpolation(ir_variable *ir) fs_visitor::emit_general_interpolation(ir_variable *ir)
{ {
...@@ -482,14 +496,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) ...@@ -482,14 +496,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
emit(BRW_OPCODE_MOV, attr, fs_reg(1.0f)); emit(BRW_OPCODE_MOV, attr, fs_reg(1.0f));
} else { } else {
struct brw_reg interp = interp_reg(location, k); struct brw_reg interp = interp_reg(location, k);
brw_wm_barycentric_interp_mode barycoord_mode; emit_linterp(attr, fs_reg(interp), interpolation_mode);
if (interpolation_mode == INTERP_QUALIFIER_SMOOTH)
barycoord_mode = BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC;
else
barycoord_mode = BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC;
emit(FS_OPCODE_LINTERP, attr,
this->delta_x[barycoord_mode],
this->delta_y[barycoord_mode], fs_reg(interp));
if (intel->gen < 6) { if (intel->gen < 6) {
emit(BRW_OPCODE_MUL, attr, attr, this->pixel_w); emit(BRW_OPCODE_MUL, attr, attr, this->pixel_w);
} }
......
...@@ -542,6 +542,8 @@ public: ...@@ -542,6 +542,8 @@ public:
void emit_dummy_fs(); void emit_dummy_fs();
fs_reg *emit_fragcoord_interpolation(ir_variable *ir); fs_reg *emit_fragcoord_interpolation(ir_variable *ir);
fs_inst *emit_linterp(const fs_reg &attr, const fs_reg &interp,
glsl_interp_qualifier interpolation_mode);
fs_reg *emit_frontfacing_interpolation(ir_variable *ir); fs_reg *emit_frontfacing_interpolation(ir_variable *ir);
fs_reg *emit_general_interpolation(ir_variable *ir); fs_reg *emit_general_interpolation(ir_variable *ir);
void emit_interpolation_setup_gen4(); void emit_interpolation_setup_gen4();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment