On 5 August 2013 15:37, Anuj Phogat <anuj.pho...@gmail.com> wrote: > New function clamp_tex_coords() clamps the texture coordinates > to texture boundaries. This function will also be utilized later > for the BLORP implementation of single-sample scaled blit with > bilinear filter. > > Signed-off-by: Anuj Phogat <anuj.pho...@gmail.com> > --- > src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 63 > +++++++++++++++++----------- > 1 file changed, 39 insertions(+), 24 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp > b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp > index c86734f..8c0db48 100644 > --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp > +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp > @@ -631,6 +631,9 @@ private: > void decode_msaa(unsigned num_samples, intel_msaa_layout layout); > void kill_if_outside_dst_rect(); > void translate_dst_to_src(); > + void clamp_tex_coords(struct brw_reg regX, struct brw_reg regY, > + struct brw_reg clampX0, struct brw_reg clampY0, > + struct brw_reg clampX1, struct brw_reg clampY1); > void single_to_blend(); > void manual_blend_average(unsigned num_samples); > void manual_blend_bilinear(unsigned num_samples); > @@ -1389,6 +1392,10 @@ brw_blorp_blit_program::kill_if_outside_dst_rect() > brw_pop_insn_state(&func); > } > > +#define X_f retype(X, BRW_REGISTER_TYPE_F) > +#define Y_f retype(Y, BRW_REGISTER_TYPE_F) > +#define Xp_f retype(Xp, BRW_REGISTER_TYPE_F) > +#define Yp_f retype(Yp, BRW_REGISTER_TYPE_F) >
I don't see why it's necessary to turn these into #defines. It looks like they are only used in translate_dst_to_src(), so it should be ok to keep them as local variables. With that part of the patch reverted, patches 1 and 2 are: Reviewed-by: Paul Berry <stereotype...@gmail.com> > /** > * Emit code to translate from destination (X, Y) coordinates to source > (X, Y) > * coordinates. > @@ -1396,11 +1403,6 @@ brw_blorp_blit_program::kill_if_outside_dst_rect() > void > brw_blorp_blit_program::translate_dst_to_src() > { > - struct brw_reg X_f = retype(X, BRW_REGISTER_TYPE_F); > - struct brw_reg Y_f = retype(Y, BRW_REGISTER_TYPE_F); > - struct brw_reg Xp_f = retype(Xp, BRW_REGISTER_TYPE_F); > - struct brw_reg Yp_f = retype(Yp, BRW_REGISTER_TYPE_F); > - > brw_set_compression_control(&func, BRW_COMPRESSION_COMPRESSED); > /* Move the UD coordinates to float registers. */ > brw_MOV(&func, Xp_f, X); > @@ -1425,25 +1427,9 @@ brw_blorp_blit_program::translate_dst_to_src() > /* Clamp the X, Y texture coordinates to properly handle the > sampling of > * texels on texture edges. > */ > - brw_CMP(&func, vec16(brw_null_reg()), BRW_CONDITIONAL_L, > - X_f, brw_imm_f(0.0)); > - brw_MOV(&func, X_f, brw_imm_f(0.0)); > - brw_set_predicate_control(&func, BRW_PREDICATE_NONE); > - > - brw_CMP(&func, vec16(brw_null_reg()), BRW_CONDITIONAL_GE, > - X_f, rect_grid_x1); > - brw_MOV(&func, X_f, rect_grid_x1); > - brw_set_predicate_control(&func, BRW_PREDICATE_NONE); > - > - brw_CMP(&func, vec16(brw_null_reg()), BRW_CONDITIONAL_L, > - Y_f, brw_imm_f(0.0)); > - brw_MOV(&func, Y_f, brw_imm_f(0.0)); > - brw_set_predicate_control(&func, BRW_PREDICATE_NONE); > - > - brw_CMP(&func, vec16(brw_null_reg()), BRW_CONDITIONAL_GE, > - Y_f, rect_grid_y1); > - brw_MOV(&func, Y_f, rect_grid_y1); > - brw_set_predicate_control(&func, BRW_PREDICATE_NONE); > + clamp_tex_coords(X_f, Y_f, > + brw_imm_f(0.0), brw_imm_f(0.0), > + rect_grid_x1, rect_grid_y1); > > /* Store the fractional parts to be used as bilinear interpolation > * coefficients. > @@ -1467,6 +1453,35 @@ brw_blorp_blit_program::translate_dst_to_src() > brw_set_compression_control(&func, BRW_COMPRESSION_NONE); > } > > +void > +brw_blorp_blit_program::clamp_tex_coords(struct brw_reg regX, > + struct brw_reg regY, > + struct brw_reg clampX0, > + struct brw_reg clampY0, > + struct brw_reg clampX1, > + struct brw_reg clampY1) > +{ > + brw_CMP(&func, vec16(brw_null_reg()), BRW_CONDITIONAL_L, regX, > clampX0); > + brw_MOV(&func, regX, clampX0); > + brw_set_predicate_control(&func, BRW_PREDICATE_NONE); > + > + brw_CMP(&func, vec16(brw_null_reg()), BRW_CONDITIONAL_G, regX, > clampX1); > + brw_MOV(&func, regX, clampX1); > + brw_set_predicate_control(&func, BRW_PREDICATE_NONE); > + > + brw_CMP(&func, vec16(brw_null_reg()), BRW_CONDITIONAL_L, regY, > clampY0); > + brw_MOV(&func, regY, clampY0); > + brw_set_predicate_control(&func, BRW_PREDICATE_NONE); > + > + brw_CMP(&func, vec16(brw_null_reg()), BRW_CONDITIONAL_G, regY, > clampY1); > + brw_MOV(&func, regY, clampY1); > + brw_set_predicate_control(&func, BRW_PREDICATE_NONE); > +} > +#undef X_f > +#undef Y_f > +#undef Xp_f > +#undef Yp_f > + > /** > * Emit code to transform the X and Y coordinates as needed for blending > * together the different samples in an MSAA texture. > -- > 1.8.1.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev