[Mesa-dev] [PATCH 2/4] i965/fs: Predicate PLN instructions used in unlit centroid WA.

Kristian Høgsberg hoegsberg at gmail.com
Mon Jun 30 09:18:53 PDT 2014


On Sun, Jun 29, 2014 at 11:18:15PM -0700, Matt Turner wrote:
> Maybe lets us skip some PLN instructions if whole subspans are disabled?

Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>

> ---
>  src/mesa/drivers/dri/i965/brw_fs.cpp | 20 ++++++++++++++------
>  1 file changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 1d58615..3b7a170 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -1168,9 +1168,6 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
>  	    /* Smooth/noperspective interpolation case. */
>  	    for (unsigned int k = 0; k < type->vector_elements; k++) {
>                 struct brw_reg interp = interp_reg(location, k);
> -               emit_linterp(attr, fs_reg(interp), interpolation_mode,
> -                            ir->data.centroid && !key->persample_shading,
> -                            ir->data.sample || key->persample_shading);
>                 if (brw->needs_unlit_centroid_workaround && ir->data.centroid) {
>                    /* Get the pixel/sample mask into f0 so that we know
>                     * which pixels are lit.  Then, for each channel that is
> @@ -1178,11 +1175,22 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
>                     * data.
>                     */
>                    emit(FS_OPCODE_MOV_DISPATCH_TO_FLAGS);
> -                  fs_inst *inst = emit_linterp(attr, fs_reg(interp),
> -                                               interpolation_mode,
> -                                               false, false);
> +
> +                  fs_inst *inst;
> +                  inst = emit_linterp(attr, fs_reg(interp), interpolation_mode,
> +                                      ir->data.centroid && !key->persample_shading,
> +                                      ir->data.sample || key->persample_shading);
> +                  inst->predicate = BRW_PREDICATE_NORMAL;
> +                  inst->predicate_inverse = false;
> +
> +                  inst = emit_linterp(attr, fs_reg(interp), interpolation_mode,
> +                                      false, false);
>                    inst->predicate = BRW_PREDICATE_NORMAL;
>                    inst->predicate_inverse = true;
> +               } else {
> +                  emit_linterp(attr, fs_reg(interp), interpolation_mode,
> +                               ir->data.centroid && !key->persample_shading,
> +                               ir->data.sample || key->persample_shading);
>                 }
>                 if (brw->gen < 6 && interpolation_mode == INTERP_QUALIFIER_SMOOTH) {
>                    emit(BRW_OPCODE_MUL, attr, attr, this->pixel_w);
> -- 
> 1.8.3.2
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list