[Mesa-dev] [PATCH 2/3] i965/fs: Make emit_uniformize a no-op for immediates
Jordan Justen
jordan.l.justen at intel.com
Tue Oct 20 00:53:20 PDT 2015
I wrote a similar patch a while back because I was annoyed by how this
was causing the send disassembly to not be as nice. :) I dropped it
from my branch at some point, but I still think it is a good idea.
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
On 2015-10-18 21:31:43, Kristian Høgsberg Kristensen wrote:
> An immdiate is already uniform so just return it up front. Without this,
> brw_fs_surface_builder ends up passing immediate surface indices through
> SHADER_OPCODE_BROADCAST. This writes to a stride 0 dst, which we can't
> constant propagate out of, and further, we don't constant propagate into
> the typed/untype read/write opcodes at all. The end result is that all
> typed/untyped read/write/atomics end up as indirect sends.
>
> Code generation should always produce either an immediate or an actual
> indirect surface index, so we can fix this by just special casing
> immediates in emit_uniformize.
>
> Signed-off-by: Kristian Høgsberg Kristensen <krh at bitplanet.net>
> ---
> src/mesa/drivers/dri/i965/brw_fs_builder.h | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_builder.h b/src/mesa/drivers/dri/i965/brw_fs_builder.h
> index df10a9d..98ce71e 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_builder.h
> +++ b/src/mesa/drivers/dri/i965/brw_fs_builder.h
> @@ -394,6 +394,9 @@ namespace brw {
> const dst_reg chan_index = component(vgrf(BRW_REGISTER_TYPE_UD), 0);
> const dst_reg dst = component(vgrf(src.type), 0);
>
> + if (src.file == IMM)
> + return src;
> +
> ubld.emit(SHADER_OPCODE_FIND_LIVE_CHANNEL, chan_index);
> ubld.emit(SHADER_OPCODE_BROADCAST, dst, src, chan_index);
>
> --
> 2.6.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