[Mesa-dev] [PATCH v2 01/16] i965: Don't copy propagate sat MOVs into LOAD_PAYLOAD

Kristian Høgsberg krh at bitplanet.net
Tue Nov 25 14:52:56 PST 2014


On Thu, Nov 13, 2014 at 8:49 PM, Matt Turner <mattst88 at gmail.com> wrote:
> On Thu, Nov 13, 2014 at 4:28 PM, Kristian Høgsberg <krh at bitplanet.net> wrote:
>> The LOAD_PAYLOAD opcode can't saturate its sources, so skip
>> saturating MOVs.  The register coalescing after lower_load_payload()
>> will clean up the extra MOVs.
>>
>> Signed-off-by: Kristian Høgsberg <krh at bitplanet.net>
>> ---
>>  src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 6 +++++-
>>  1 file changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
>> index e1989cb..87ea9c2 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
>> @@ -454,8 +454,12 @@ fs_visitor::try_constant_propagate(fs_inst *inst, acp_entry *entry)
>>        val.effective_width = inst->src[i].effective_width;
>>
>>        switch (inst->opcode) {
>> -      case BRW_OPCODE_MOV:
>>        case SHADER_OPCODE_LOAD_PAYLOAD:
>> +         /* LOAD_PAYLOAD can't sat its sources. */
>> +         if (entry->saturate)
>> +            break;
>> +         /* Otherwise, fall through */
>> +      case BRW_OPCODE_MOV:
>>           inst->src[i] = val;
>>           progress = true;
>>           break;
>> --
>> 2.1.0
>
> This looks like the same patch as 01/14 in the previous series. I
> suggested a better approach there:
>
> At the beginning of fs_visitor::try_constant_propagate, if
> (entry->saturate) return false, or just saturate the argument and
> proceed. We don't want to be propagating the result of a mov.sat 4.0
> into anything without saturating the result first.

Fixed in v3.

Kristian


More information about the mesa-dev mailing list