[Mesa-dev] [PATCH 020/133] i965/fs: make emit_fragcoord_interpolation() more general

Connor Abbott cwabbott0 at gmail.com
Tue Dec 16 10:17:52 PST 2014


When Ken rebased my texture patches, he changed the titles to say
"make thing() not take an ir_variable", which I like. Can you change
the title of this one too?

On Tue, Dec 16, 2014 at 1:04 AM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> From: Connor Abbott <connor.abbott at intel.com>
>
> ---
>  src/mesa/drivers/dri/i965/brw_fs.cpp         | 13 +++++++------
>  src/mesa/drivers/dri/i965/brw_fs.h           |  3 ++-
>  src/mesa/drivers/dri/i965/brw_fs_fp.cpp      |  4 +++-
>  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp |  3 ++-
>  4 files changed, 14 insertions(+), 9 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 6cac6d7..5de862c 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -1194,16 +1194,17 @@ fs_visitor::setup_builtin_uniform_values(ir_variable *ir)
>  }
>
>  fs_reg *
> -fs_visitor::emit_fragcoord_interpolation(ir_variable *ir)
> +fs_visitor::emit_fragcoord_interpolation(bool pixel_center_integer,
> +                                         bool origin_upper_left)
>  {
>     assert(stage == MESA_SHADER_FRAGMENT);
>     brw_wm_prog_key *key = (brw_wm_prog_key*) this->key;
> -   fs_reg *reg = new(this->mem_ctx) fs_reg(this, ir->type);
> +   fs_reg *reg = new(this->mem_ctx) fs_reg(this, glsl_type::vec4_type);
>     fs_reg wpos = *reg;
> -   bool flip = !ir->data.origin_upper_left ^ key->render_to_fbo;
> +   bool flip = !origin_upper_left ^ key->render_to_fbo;
>
>     /* gl_FragCoord.x */
> -   if (ir->data.pixel_center_integer) {
> +   if (pixel_center_integer) {
>        emit(MOV(wpos, this->pixel_x));
>     } else {
>        emit(ADD(wpos, this->pixel_x, fs_reg(0.5f)));
> @@ -1211,11 +1212,11 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir)
>     wpos = offset(wpos, 1);
>
>     /* gl_FragCoord.y */
> -   if (!flip && ir->data.pixel_center_integer) {
> +   if (!flip && pixel_center_integer) {
>        emit(MOV(wpos, this->pixel_y));
>     } else {
>        fs_reg pixel_y = this->pixel_y;
> -      float offset = (ir->data.pixel_center_integer ? 0.0 : 0.5);
> +      float offset = (pixel_center_integer ? 0.0 : 0.5);
>
>        if (flip) {
>          pixel_y.negate = true;
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
> index 58bb3ae..b270623 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.h
> +++ b/src/mesa/drivers/dri/i965/brw_fs.h
> @@ -471,7 +471,8 @@ public:
>
>     void emit_dummy_fs();
>     void emit_repclear_shader();
> -   fs_reg *emit_fragcoord_interpolation(ir_variable *ir);
> +   fs_reg *emit_fragcoord_interpolation(bool pixel_center_integer,
> +                                        bool origin_upper_left);
>     fs_inst *emit_linterp(const fs_reg &attr, const fs_reg &interp,
>                           glsl_interp_qualifier interpolation_mode,
>                           bool is_centroid, bool is_sample);
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_fp.cpp b/src/mesa/drivers/dri/i965/brw_fs_fp.cpp
> index 6348bc1..acef9de 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_fp.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_fp.cpp
> @@ -586,8 +586,10 @@ fs_visitor::setup_fp_regs()
>                 gl_fragment_program *fp = (gl_fragment_program*) prog;
>                 ir->data.pixel_center_integer = fp->PixelCenterInteger;
>                 ir->data.origin_upper_left = fp->OriginUpperLeft;
> +               fp_input_regs[i] =
> +                  *emit_fragcoord_interpolation(fp->PixelCenterInteger,
> +                                                fp->OriginUpperLeft);
>              }
> -            fp_input_regs[i] = *emit_fragcoord_interpolation(ir);
>              break;
>           case VARYING_SLOT_FACE:
>              fp_input_regs[i] = *emit_frontfacing_interpolation();
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> index 399e772..593c6e9 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> @@ -92,7 +92,8 @@ fs_visitor::visit(ir_variable *ir)
>              fs_reg(ATTR, ir->data.location,
>                     brw_type_for_base_type(ir->type->get_scalar_type()));
>        } else if (!strcmp(ir->name, "gl_FragCoord")) {
> -        reg = emit_fragcoord_interpolation(ir);
> +         reg = emit_fragcoord_interpolation(ir->data.pixel_center_integer,
> +                                            ir->data.origin_upper_left);
>        } else if (!strcmp(ir->name, "gl_FrontFacing")) {
>          reg = emit_frontfacing_interpolation();
>        } else {
> --
> 2.2.0
>
> _______________________________________________
> 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