[Mesa-dev] [PATCH] i965/hsw: Initialize SLM index in state register
Kenneth Graunke
kenneth at whitecape.org
Sat Mar 5 19:40:23 UTC 2016
On Friday, March 4, 2016 4:07:08 PM PST Matt Turner wrote:
> On Mon, Feb 22, 2016 at 11:35 AM, Jordan Justen
> <jordan.l.justen at intel.com> wrote:
> > For Haswell, we need to initialize the SLM index in the state
> > register. This can be copied out of the CS header dword 0.
> >
> > Fixes piglit: arb_compute_shader/execution/shared-atomics.shader_test
> >
> > Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
> > Cc: Ilia Mirkin <imirkin at alum.mit.edu>
> > Cc: "11.2" <mesa-stable at lists.freedesktop.org>
> > ---
> > src/mesa/drivers/dri/i965/brw_fs.cpp | 7 +++++++
> > src/mesa/drivers/dri/i965/brw_reg.h | 16 ++++++++++++++++
> > 2 files changed, 23 insertions(+)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/
i965/brw_fs.cpp
> > index b506040..377c83d 100644
> > --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> > +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> > @@ -5470,6 +5470,13 @@ fs_visitor::run_cs()
> > if (shader_time_index >= 0)
> > emit_shader_time_begin();
> >
> > + if (devinfo->is_haswell && prog_data->total_shared > 0) {
> > + /* Move SLM index from g0.0[27:24] to sr0.1[11:8] */
> > + fs_reg g0 = fs_reg(retype(brw_vec1_grf(0, 0),
BRW_REGISTER_TYPE_UD));
> > + const fs_builder abld = bld.exec_all().group(1, 0);
> > + abld.SHR(suboffset(brw_sr0_reg(), 1), g0, brw_imm_d(16));
>
> Nit: since the dst and src0 are UD, use brw_imm_ud(16).
>
> The only other field in sr0.1 is "Fixed Function Thread ID" at 31:23.
> I don't have any idea what overwriting that might do. Is that safe? Or
> is the register simply uninitialized?
>
> If that's safe, this patch is
>
> Reviewed-by: Matt Turner <mattst88 at gmail.com>
>
> But I don't think I can make that determination by myself.
>
> Alternatively, if overwriting FFTID is bad, instead of emitting
>
> shr(1) sr0.1:UD g0.0:UD 16UD
>
> you could write only the low word:
>
> mov(1) sr0.2:UW g0.1:UW
>
> or maybe use an AND to ensure you're writing zeros to the MBZ bits of
> the status register.
I'm not entirely comfortable with overwriting FFTID. It might be fine
to overwrite the copy in sr0 - I don't know. It's generally used to
communicate which thread is talking to the fixed-function hardware.
At one point, I supplied 0 in URB write messages where FFTID ought to
have gone, and things slowed down by 80% on Ivybridge, presumably due
to major stalls and confusion about what threads were done.
--Ken
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160305/74335511/attachment.sig>
More information about the mesa-dev
mailing list