[Mesa-dev] [PATCH 27/59] i965/fs: add a stride helper

Francisco Jerez currojerez at riseup.net
Tue May 3 01:48:18 UTC 2016


Samuel Iglesias Gonsálvez <siglesias at igalia.com> writes:

> From: Connor Abbott <connor.w.abbott at intel.com>
>
> Similar to retype() and offset().
> ---
>  src/mesa/drivers/dri/i965/brw_ir_fs.h | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_ir_fs.h b/src/mesa/drivers/dri/i965/brw_ir_fs.h
> index e4f20f4..abda2c3 100644
> --- a/src/mesa/drivers/dri/i965/brw_ir_fs.h
> +++ b/src/mesa/drivers/dri/i965/brw_ir_fs.h
> @@ -78,6 +78,14 @@ retype(fs_reg reg, enum brw_reg_type type)
>  }
>  
>  static inline fs_reg
> +stride(fs_reg reg, unsigned stride)
> +{
> +   if (reg.stride != 0)
> +      reg.stride = stride;
> +   return reg;
> +}
> +

This only works if reg.stride == 0 or 1, we need to honour the stride of
the original register (e.g. by doing reg.stride *= stride) or you'll end
up taking components not part of the region given as argument.  It gets
messy with ARF and HW registers because they represent the stride
differently...  I suggest that instead of fixing this you take the
following patch from my SIMD32 branch that introduces a somewhat easier
to use helper: Instead of doing 'stride(horiz_offset(retype(reg, t), i),
type_sz(reg.type) / type_sz(t))' to take the i-th subcomponent of type t
of the original register you would just do 'subscript(reg, t, i)'.  I
think I've looked through all the uses of stride() in your branch and
they are all sort of an open-coded version of subscript().  This will
also address the issue Ken pointed out in patch 29 related to the use of
horiz_offset() on uniforms (or anything with stride other than one,
really) -- See the attached patch (yes, correct ARF/HW reg handling will
be required for SIMD32...).

> +static inline fs_reg
>  byte_offset(fs_reg reg, unsigned delta)
>  {
>     switch (reg.file) {
> -- 
> 2.5.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-i965-fs-Introduce-helper-to-extract-a-field-from-eac.patch
Type: text/x-diff
Size: 1668 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160502/fa110f86/attachment.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160502/fa110f86/attachment.sig>


More information about the mesa-dev mailing list