[Mesa-dev] [PATCH] i965/fs: Handle MRF destinations in lower_integer_multiplication().

Mark Janes mark.a.janes at intel.com
Wed Sep 2 10:44:37 PDT 2015


Kenneth Graunke <kenneth at whitecape.org> writes:

> On Wednesday, September 02, 2015 12:03:12 AM Matt Turner wrote:
>> The lowered code reads from the destination, which isn't possible from
>> message registers.
>> 
>> Fixes the dEQP functional.shaders.precision.int.highp_mul_fragment test
>> on SNB.
>> ---
>>  src/mesa/drivers/dri/i965/brw_fs.cpp | 8 ++++----
>>  1 file changed, 4 insertions(+), 4 deletions(-)
>> 
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
>> index 269914d..e28eb5d 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
>> @@ -3192,7 +3192,8 @@ fs_visitor::lower_integer_multiplication()
>>               * schedule multi-component multiplications much better.
>>               */
>>  
>> -            if (inst->conditional_mod && inst->dst.is_null()) {
>> +            fs_reg orig_dst = inst->dst;
>> +            if (orig_dst.is_null() || orig_dst.file == MRF) {
>>                 inst->dst = fs_reg(GRF, alloc.allocate(dispatch_width / 8),
>>                                    inst->dst.type);
>>              }
>> @@ -3258,10 +3259,9 @@ fs_visitor::lower_integer_multiplication()
>>  
>>              ibld.ADD(dst, low, high);
>>  
>> -            if (inst->conditional_mod) {
>> -               fs_reg null(retype(ibld.null_reg_f(), inst->dst.type));
>> +            if (inst->conditional_mod || orig_dst.file == MRF) {
>>                 set_condmod(inst->conditional_mod,
>> -                           ibld.MOV(null, inst->dst));
>> +                           ibld.MOV(orig_dst, inst->dst));
>>              }
>>           }
>>  
>> 
>
> Cc: "10.6 11.0" <mesa-stable at lists.freedesktop.org>
> Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

The second hunk doesn't apply to 10.6.


More information about the mesa-dev mailing list