[Mesa-dev] [PATCH 25/57] i965/fs: Stop using fs_reg::in_range() in favor of regions_overlap().

Francisco Jerez currojerez at riseup.net
Fri Sep 9 20:02:57 UTC 2016


Iago Toral <itoral at igalia.com> writes:

> On Wed, 2016-09-07 at 18:48 -0700, Francisco Jerez wrote:
>> Its only use left in the FS back-end should be using
>> regions_overlap()
>> instead to avoid getting a false negative result in cases where
>> source
>> and destination overlap but the former starts before the latter in
>> the
>> VGRF file.
>> ---
>>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>> 
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
>> b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
>> index 42ed131..b06606b 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
>> @@ -4820,7 +4820,8 @@ shuffle_64bit_data_for_32bit_write(const
>> fs_builder &bld,
>>     assert(type_sz(src.type) == 8);
>>     assert(type_sz(dst.type) == 4);
>>  
>> -   assert(!src.in_range(dst, 2 * components * bld.dispatch_width() /
>> 8));
>> +   assert(!regions_overlap(dst, 2 *
>> dst.component_size(bld.dispatch_width()),
>> +                           src,
>> src.component_size(bld.dispatch_width())));
>
> I think you need to multiply the sizes of the regions for dst and src
> by the number of components being shuffled, like in the original
> assert, otherwise we would only be testing if there is overlap for the
> first component.
>
Good point, thanks!

>>     for (unsigned i = 0; i < components; i++) {
>>        const fs_reg component_i = offset(src, bld, i);
-------------- 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/20160909/acdfa290/attachment.sig>


More information about the mesa-dev mailing list