[Mesa-dev] [PATCH 06/22] i965/fs: double-precision execution does not use 2 channels per DF in IVB/VLV

Francisco Jerez currojerez at riseup.net
Tue Jan 10 22:01:06 UTC 2017


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

> On Mon, 2017-01-09 at 16:18 -0800, Francisco Jerez wrote:
>> Samuel Iglesias Gonsálvez <siglesias at igalia.com> writes:
>> 
>> > From: Iago Toral Quiroga <itoral at igalia.com>
>> > 
>> > It seems to use 1 channel por DF, just like later hardware. The
>> > docs say things
>> > like:
>> > 
>> > "Each DF operand uses a pair of channels and all masking  and
>> > swizzling
>> >  should be adjusted appropriately."
>> > 
>> > "In Align16, all regioning parameters must use the syntax of a pair
>> > of packed
>> >  floats, including channel selects and channel enables."
>> > 
>> > In these cases, masking and channel select/enables seem to refere
>> > only to
>> > Align16's swizzle and writemasks respectively, not to execution
>> > masking.
>> > 
>> > In any case, this means that execution masking controls and
>> > execsize go
>> > in different units and we need to adjust the assertion on the
>> > relation
>> > between the two accordingly.
>> > ---
>> >  src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 6 +++++-
>> >  1 file changed, 5 insertions(+), 1 deletion(-)
>> > 
>> > diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
>> > b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
>> > index 90ee7c1..ac2d8ad 100644
>> > --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
>> > +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
>> > @@ -1646,7 +1646,11 @@ fs_generator::generate_code(const cfg_t
>> > *cfg, int dispatch_width)
>> >        brw_set_default_exec_size(p, cvt(inst->exec_size) - 1);
>> >  
>> >        assert(inst->force_writemask_all || inst->exec_size >= 4);
>> > -      assert(inst->force_writemask_all || inst->group % inst-
>> > >exec_size == 0);
>> > +      assert(inst->force_writemask_all ||
>> > +             ((devinfo->gen != 7 || devinfo->is_haswell) &&
>> > +              inst->group % inst->exec_size == 0) ||
>> > +             ((devinfo->gen == 7 && !devinfo->is_haswell) &&
>> > +              (2 * inst->group) % inst->exec_size == 0));
>> 
>> NAK, exec size doubling happens at the codegen level so the IR group
>> and
>> exec_size controls should still be expressed in the same units.
>> 
>
> Actually the patch is right because the exec size doubling already
> happened at this point, so this is fixing the difference in units.
>

It may match the expectations of PATCH 3 from this series, but at the
same time it breaks the expectations of the rest of the back-end IR
infrastructure.  E.g. regs_read() will now return bogus results from the
point you whacked the execution size of DF instructions.  I don't want
to have to think which portion of the public IR interface still behaves
sensibly and which portion will give me garbage values when I use it
From the generator.

To make the matter scarier this happens from the back-end code generator
which isn't even supposed to modify its input in a semantics-preserving
way (it's supposed to emit machine code matching the IR given as input).
PATCH 3 causes it to destroy its input (try invoking the code generator
a second time on the same shader and you'll get garbage as result...).

> One alternative to this patch is to move the exec_size doubling code to
> just after this assert, so we can discard this patch.
>
> What do you think?
>

Please let's not modify the IR from the codegen pass [this goes as
modification request for PATCH 3 too].  Just have the generator emit
machine code with twice the IR execution size for double-precision
instructions on IVB.

> Sam
>
>> >        assert(inst->base_mrf + inst->mlen <= BRW_MAX_MRF(devinfo-
>> > >gen));
>> >        assert(inst->mlen <= BRW_MAX_MSG_LENGTH);
>> >  
>> > -- 
>> > 2.9.3
>> > 
>> > _______________________________________________
>> > 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: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170110/3022bbf2/attachment.sig>


More information about the mesa-dev mailing list