[Mesa-dev] [PATCH] intel/fs: Prevent emission of IR instructions not aligned to their own execution size.
Sagar Ghuge
sagar.ghuge at intel.com
Fri Nov 9 18:00:14 UTC 2018
Tested-by: Sagar Ghuge <sagar.ghuge at intel.com>
On 11/8/18 5:26 PM, Francisco Jerez wrote:
> This can occur during payload setup of SIMD-split send message
> instructions, which can lead to the emission of header setup
> instructions with a non-zero channel group and fixed SIMD width. Such
> instructions could end up using undefined channel enable signals
> except they don't care since they're always marked force_writemask_all.
>
> Not known to affect correctness of any workload at this point, but it
> would be trivial to back-port to stable if something comes up.
>
> Reported-by: Sagar Ghuge <sagar.ghuge at intel.com>
> ---
> src/intel/compiler/brw_fs_builder.h | 20 +++++++++++++++++---
> 1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/src/intel/compiler/brw_fs_builder.h b/src/intel/compiler/brw_fs_builder.h
> index 0cafaf50e56..4846820722c 100644
> --- a/src/intel/compiler/brw_fs_builder.h
> +++ b/src/intel/compiler/brw_fs_builder.h
> @@ -114,11 +114,25 @@ namespace brw {
> fs_builder
> group(unsigned n, unsigned i) const
> {
> - assert(force_writemask_all ||
> - (n <= dispatch_width() && i < dispatch_width() / n));
> fs_builder bld = *this;
> +
> + if (n <= dispatch_width() && i < dispatch_width() / n) {
> + bld._group += i * n;
> + } else {
> + /* The requested channel group isn't a subset of the channel group
> + * of this builder, which means that the resulting instructions
> + * would use (potentially undefined) channel enable signals not
> + * specified by the parent builder. That's only valid if the
> + * instruction doesn't have per-channel semantics, in which case
> + * we should clear off the default group index in order to prevent
> + * emitting instructions with channel group not aligned to their
> + * own execution size.
> + */
> + assert(force_writemask_all);
> + bld._group = 0;
> + }
> +
> bld._dispatch_width = n;
> - bld._group += i * n;
> return bld;
> }
>
>
More information about the mesa-dev
mailing list