[Mesa-dev] [PATCH] i965/fs: Strip trailing contant zeroes in sample messages

Matt Turner mattst88 at gmail.com
Fri Apr 24 17:19:03 PDT 2015


On Fri, Apr 24, 2015 at 5:15 PM, Neil Roberts <neil at linux.intel.com> wrote:
> Matt Turner <mattst88 at gmail.com> writes:
>
>>> +   foreach_block_and_inst(block, fs_inst, inst, cfg) {
>>> +      if ((inst->opcode == SHADER_OPCODE_TEX ||
>>> +           inst->opcode == SHADER_OPCODE_TXF) &&
>>> +          !inst->shadow_compare) {
>>> +         fs_inst *load_payload = (fs_inst *) inst->prev;
>>> +
>>> +         if (load_payload->is_head_sentinel() ||
>>> +             load_payload->opcode != SHADER_OPCODE_LOAD_PAYLOAD)
>>> +            continue;
>>
>> We can't guarantee that the load_payload isn't used by another texture
>> later in the program, and since you need to change the texture
>> operation's mlen, I think you need to check that the load_payload
>> isn't used after this texture operation.
>>
>> To do that, (1) add an ip variable and initialize it to -1, (2) add
>> ip++ as the first statement in the foreach_block_and_inst loop, (3)
>> add some code to this check similar to in
>> brw_fs_saturate_propagation.cpp using this->live_intervals.
>
> Hrm, I'm not modifying the LOAD_PAYLOAD instruction, only the
> SHADRE_OPCODE_TEX/TXF instruction. If there is a later instruction that
> is using the LOAD_PAYLOAD, won't that end up making it's own dependency
> on the MOV instructions so they won't get removed?

On Fri, Apr 24, 2015 at 5:15 PM, Neil Roberts <neil at linux.intel.com> wrote:
> Matt Turner <mattst88 at gmail.com> writes:
>
>>> +   foreach_block_and_inst(block, fs_inst, inst, cfg) {
>>> +      if ((inst->opcode == SHADER_OPCODE_TEX ||
>>> +           inst->opcode == SHADER_OPCODE_TXF) &&
>>> +          !inst->shadow_compare) {
>>> +         fs_inst *load_payload = (fs_inst *) inst->prev;
>>> +
>>> +         if (load_payload->is_head_sentinel() ||
>>> +             load_payload->opcode != SHADER_OPCODE_LOAD_PAYLOAD)
>>> +            continue;
>>
>> We can't guarantee that the load_payload isn't used by another texture
>> later in the program, and since you need to change the texture
>> operation's mlen, I think you need to check that the load_payload
>> isn't used after this texture operation.
>>
>> To do that, (1) add an ip variable and initialize it to -1, (2) add
>> ip++ as the first statement in the foreach_block_and_inst loop, (3)
>> add some code to this check similar to in
>> brw_fs_saturate_propagation.cpp using this->live_intervals.
>
> Hrm, I'm not modifying the LOAD_PAYLOAD instruction, only the
> SHADRE_OPCODE_TEX/TXF instruction. If there is a later instruction that
> is using the LOAD_PAYLOAD, won't that end up making it's own dependency
> on the MOV instructions so they won't get removed?

Oh, you're right. I misread what the patch was doing. Indeed, I think
this should work fine.

>>> +   OPT(opt_zero_samples);
>>
>> I think you're probably right that this can be done after the
>> optimization loop. I guess it's possible that we might trim a texture
>> payload down and it'll then be the same as an existing payload and we
>> can then CSE them. I'd be interested to see if putting it inside the
>> optimization loop improves anything.
>
> Hrm, it might be worth trying. However, as I mentioned above, I'm not
> modifying the LOAD_PAYLOAD instruction so it probably won't hit the
> example you mentioned.

Right, okay. I don't mind if you want to try that later.


More information about the mesa-dev mailing list