On 12 November 2013 17:51, Kenneth Graunke <kenn...@whitecape.org> wrote:

> We need to SEND from a GRF, and we can only obtain those prior to
> register allocation.
>
> This allows us to do pull constant loads without the MRF hack.
>
> Signed-off-by: Kenneth Graunke <kenn...@whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> index a036e2d..5f0d0b4 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> @@ -1582,7 +1582,13 @@ vec4_visitor::visit(ir_expression *ir)
>        src_reg surf_index =
>           src_reg(prog_data->base.binding_table.ubo_start +
> uniform_block->value.u[0]);
>        if (const_offset_ir) {
> -         offset = src_reg(const_offset / 16);
> +         if (brw->gen >= 8) {
> +            /* Put the offset in a GRF; we can't SEND from immediates. */
> +            offset = src_reg(this, glsl_type::int_type);
> +            emit(MOV(dst_reg(offset), src_reg(const_offset / 16)));
> +         } else {
> +            offset = src_reg(const_offset / 16);
> +         }
>        } else {
>           offset = src_reg(this, glsl_type::uint_type);
>           emit(SHR(dst_reg(offset), op[1], src_reg(4)));
> @@ -2983,6 +2989,11 @@
> vec4_visitor::get_pull_constant_offset(vec4_instruction *inst,
>        }
>
>        return index;
> +   } else if (brw->gen >= 8) {
> +      /* Put the offset in a GRF; we can't SEND from immediates. */
> +      src_reg offset = src_reg(this, glsl_type::int_type);
> +      emit_before(inst, MOV(dst_reg(offset), src_reg(reg_offset)));
> +      return offset;
>     } else {
>        int message_header_scale = brw->gen < 6 ? 16 : 1;
>        return src_reg(reg_offset * message_header_scale);
> --
> 1.8.3.2
>

Looking at the docs, it appears to me that SENDs from immediates have never
been allowed.  Is it possible that they have been working just by luck?
Maybe we should make this change apply regardless of brw->gen.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to