[Mesa-dev] [PATCH v2 16/19] i965/fs: Use the builder dispatch_width for computing register offsets

2015-06-25 Thread Jason Ekstrand
Reviewed-by: Topi Pohjolainen 
---
 src/mesa/drivers/dri/i965/brw_fs.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
b/src/mesa/drivers/dri/i965/brw_fs.h
index d4cc43d..d94a842 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -72,7 +72,7 @@ offset(fs_reg reg, const brw::fs_builder& bld, unsigned delta)
case MRF:
case ATTR:
   return byte_offset(reg,
- delta * MAX2(reg.width * reg.stride, 1) *
+ delta * bld.dispatch_width() * reg.stride *
  type_sz(reg.type));
case UNIFORM:
   reg.reg_offset += delta;
-- 
2.4.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v2 16/19] i965/fs: Use the builder dispatch_width for computing register offsets

2015-06-26 Thread Francisco Jerez
Jason Ekstrand  writes:

> Reviewed-by: Topi Pohjolainen 
> ---
>  src/mesa/drivers/dri/i965/brw_fs.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
> b/src/mesa/drivers/dri/i965/brw_fs.h
> index d4cc43d..d94a842 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.h
> +++ b/src/mesa/drivers/dri/i965/brw_fs.h
> @@ -72,7 +72,7 @@ offset(fs_reg reg, const brw::fs_builder& bld, unsigned 
> delta)
> case MRF:
> case ATTR:
>return byte_offset(reg,
> - delta * MAX2(reg.width * reg.stride, 1) *
> + delta * bld.dispatch_width() * reg.stride *

Er...  This doesn't look right for stride == 0.  If you keep the
MAX2(.., 1) expression this patch is:

Reviewed-by: Francisco Jerez 

>   type_sz(reg.type));
> case UNIFORM:
>reg.reg_offset += delta;
> -- 
> 2.4.3
>
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v2 16/19] i965/fs: Use the builder dispatch_width for computing register offsets

2015-06-26 Thread Jason Ekstrand
On Fri, Jun 26, 2015 at 8:52 AM, Francisco Jerez  wrote:
> Jason Ekstrand  writes:
>
>> Reviewed-by: Topi Pohjolainen 
>> ---
>>  src/mesa/drivers/dri/i965/brw_fs.h | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
>> b/src/mesa/drivers/dri/i965/brw_fs.h
>> index d4cc43d..d94a842 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs.h
>> +++ b/src/mesa/drivers/dri/i965/brw_fs.h
>> @@ -72,7 +72,7 @@ offset(fs_reg reg, const brw::fs_builder& bld, unsigned 
>> delta)
>> case MRF:
>> case ATTR:
>>return byte_offset(reg,
>> - delta * MAX2(reg.width * reg.stride, 1) *
>> + delta * bld.dispatch_width() * reg.stride *
>
> Er...  This doesn't look right for stride == 0.  If you keep the
> MAX2(.., 1) expression this patch is:

I don't think offset() even makes sense for something with stride ==
0.  I added "assert(stride != 0)" right above the byte_offset() call
and it passed Jenkins.  Would that be an acceptable alternative?
--Jason

> Reviewed-by: Francisco Jerez 
>
>>   type_sz(reg.type));
>> case UNIFORM:
>>reg.reg_offset += delta;
>> --
>> 2.4.3
>>
>> ___
>> mesa-dev mailing list
>> mesa-dev@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v2 16/19] i965/fs: Use the builder dispatch_width for computing register offsets

2015-06-26 Thread Francisco Jerez
Jason Ekstrand  writes:

> On Fri, Jun 26, 2015 at 8:52 AM, Francisco Jerez  
> wrote:
>> Jason Ekstrand  writes:
>>
>>> Reviewed-by: Topi Pohjolainen 
>>> ---
>>>  src/mesa/drivers/dri/i965/brw_fs.h | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
>>> b/src/mesa/drivers/dri/i965/brw_fs.h
>>> index d4cc43d..d94a842 100644
>>> --- a/src/mesa/drivers/dri/i965/brw_fs.h
>>> +++ b/src/mesa/drivers/dri/i965/brw_fs.h
>>> @@ -72,7 +72,7 @@ offset(fs_reg reg, const brw::fs_builder& bld, unsigned 
>>> delta)
>>> case MRF:
>>> case ATTR:
>>>return byte_offset(reg,
>>> - delta * MAX2(reg.width * reg.stride, 1) *
>>> + delta * bld.dispatch_width() * reg.stride *
>>
>> Er...  This doesn't look right for stride == 0.  If you keep the
>> MAX2(.., 1) expression this patch is:
>
> I don't think offset() even makes sense for something with stride ==
> 0.  I added "assert(stride != 0)" right above the byte_offset() call
> and it passed Jenkins.  Would that be an acceptable alternative?

stride == 0 implies that each logical component of your vector takes 1
scalar component (because all the N channels of your SIMDN value are one
and the same scalar in your register file), that means that logically
independent components of a vector or array are stored 1 scalar apart,
and the previous code was doing the right thing.

> --Jason
>
>> Reviewed-by: Francisco Jerez 
>>
>>>   type_sz(reg.type));
>>> case UNIFORM:
>>>reg.reg_offset += delta;
>>> --
>>> 2.4.3
>>>
>>> ___
>>> mesa-dev mailing list
>>> mesa-dev@lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v2 16/19] i965/fs: Use the builder dispatch_width for computing register offsets

2015-06-30 Thread Jason Ekstrand
On Fri, Jun 26, 2015 at 11:51 AM, Francisco Jerez  wrote:
> Jason Ekstrand  writes:
>
>> On Fri, Jun 26, 2015 at 8:52 AM, Francisco Jerez  
>> wrote:
>>> Jason Ekstrand  writes:
>>>
 Reviewed-by: Topi Pohjolainen 
 ---
  src/mesa/drivers/dri/i965/brw_fs.h | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
 b/src/mesa/drivers/dri/i965/brw_fs.h
 index d4cc43d..d94a842 100644
 --- a/src/mesa/drivers/dri/i965/brw_fs.h
 +++ b/src/mesa/drivers/dri/i965/brw_fs.h
 @@ -72,7 +72,7 @@ offset(fs_reg reg, const brw::fs_builder& bld, unsigned 
 delta)
 case MRF:
 case ATTR:
return byte_offset(reg,
 - delta * MAX2(reg.width * reg.stride, 1) *
 + delta * bld.dispatch_width() * reg.stride *
>>>
>>> Er...  This doesn't look right for stride == 0.  If you keep the
>>> MAX2(.., 1) expression this patch is:
>>
>> I don't think offset() even makes sense for something with stride ==
>> 0.  I added "assert(stride != 0)" right above the byte_offset() call
>> and it passed Jenkins.  Would that be an acceptable alternative?
>
> stride == 0 implies that each logical component of your vector takes 1
> scalar component (because all the N channels of your SIMDN value are one
> and the same scalar in your register file), that means that logically
> independent components of a vector or array are stored 1 scalar apart,
> and the previous code was doing the right thing.

I still think offset() is bogus for stride == 0.  However, I don't
really feel like arguing the point, so I added the MAX2().
--Jason

>> --Jason
>>
>>> Reviewed-by: Francisco Jerez 
>>>
   type_sz(reg.type));
 case UNIFORM:
reg.reg_offset += delta;
 --
 2.4.3

 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v2 16/19] i965/fs: Use the builder dispatch_width for computing register offsets

2015-07-01 Thread Francisco Jerez
Jason Ekstrand  writes:

> On Fri, Jun 26, 2015 at 11:51 AM, Francisco Jerez  
> wrote:
>> Jason Ekstrand  writes:
>>
>>> On Fri, Jun 26, 2015 at 8:52 AM, Francisco Jerez  
>>> wrote:
 Jason Ekstrand  writes:

> Reviewed-by: Topi Pohjolainen 
> ---
>  src/mesa/drivers/dri/i965/brw_fs.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.h 
> b/src/mesa/drivers/dri/i965/brw_fs.h
> index d4cc43d..d94a842 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.h
> +++ b/src/mesa/drivers/dri/i965/brw_fs.h
> @@ -72,7 +72,7 @@ offset(fs_reg reg, const brw::fs_builder& bld, unsigned 
> delta)
> case MRF:
> case ATTR:
>return byte_offset(reg,
> - delta * MAX2(reg.width * reg.stride, 1) *
> + delta * bld.dispatch_width() * reg.stride *

 Er...  This doesn't look right for stride == 0.  If you keep the
 MAX2(.., 1) expression this patch is:
>>>
>>> I don't think offset() even makes sense for something with stride ==
>>> 0.  I added "assert(stride != 0)" right above the byte_offset() call
>>> and it passed Jenkins.  Would that be an acceptable alternative?
>>
>> stride == 0 implies that each logical component of your vector takes 1
>> scalar component (because all the N channels of your SIMDN value are one
>> and the same scalar in your register file), that means that logically
>> independent components of a vector or array are stored 1 scalar apart,
>> and the previous code was doing the right thing.
>
> I still think offset() is bogus for stride == 0.  However, I don't
> really feel like arguing the point, so I added the MAX2().

No need to argue about it, let me explain it step by step:

In the FS back-end (SoA) registers are in general a sequence of SIMDN
values, each SIMDN value being itself a sequence of N per-channel scalar
values.

Agreed?

offset(reg, i) returns another register reg' based on the i-th SIMDN
value from the start of reg.  [IOW if reg logically represented a vector
(say in a high-level language like GLSL) reg' would be at the i-th
logical component of the the vector]

Agreed?

offset(reg, i) is well-defined as long as the size of a single SIMDN
value is well-defined in the register file, because logically
independent elements of a SoA sequence of SIMDN values are simply stored
contiguously.

Agreed?

The size of a SIMDN value with stride=0 (i.e. a uniform) in the register
file is the same as the size of a single scalar value.  [And, although
it's irrelevant here, the size of a SIMDN value with stride!=0 is
stride*type_sz(type)]

Agreed?

If you agreed with the last two points, you'll also agree that
offset(reg, i) is well-defined for reg.stride=0.  If you're still not
convinced stop for a moment and consider the natural layout of an array
of uniforms in the GRF, and what would be the natural way to pick the
i-th component from such an array.

> --Jason
>
>>> --Jason
>>>
 Reviewed-by: Francisco Jerez 

>   type_sz(reg.type));
> case UNIFORM:
>reg.reg_offset += delta;
> --
> 2.4.3
>
> ___
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


signature.asc
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev