[Mesa-dev] [PATCH 7/8] gallium: remove TGSI opcode SCS
Jose Fonseca
jfonseca at vmware.com
Tue Aug 22 13:17:57 UTC 2017
On 22/08/17 12:28, Marek Olšák wrote:
> On Tue, Aug 22, 2017 at 1:10 PM, Jose Fonseca <jfonseca at vmware.com> wrote:
>> On 20/08/17 01:49, Marek Olšák wrote:
>>>
>>> From: Marek Olšák <marek.olsak at amd.com>
>>>
>>> use COS+SIN instead.
>>
>>
>> I don't know if any existing gallium driver leverages that, but it's a basic
>> trigonometric principle that one can easily extract the sin from cos or
>> vice-versa. It requires some extra care for getting the right sign. But
>> the fact is that it should be considerably cheaper to comput both
>> simultaneously than indepdently.
>>
>> Unfortunately GLSL/SPIR-V doesn't allow to express that. D3D9/D3D11 and
>> Metal all do. And from what I've seen from D3D9/D3D11 apps, 99% of the
>> times the shader wants both SIN/COS at the same time.
>>
>> If we want one opcode to rule them all, then a combined SIN+COS seems a
>> better choice IMO. On SM4 the sincos has two outputs:
>> https://msdn.microsoft.com/en-us/library/windows/desktop/hh447234.aspx but
>> they are both optional to use. I don't know if there's a precedent for
>> that. I recall we had similar discussions about UMUL/UMUL_HI, and I suspect
>> we chose not to go that route.
>>
>>
>> Don't GPUs allow to express the computation of both sin/cos with a single
>> opcode? If nothing else there would be a non-negligible impact of
>> leveraging this in llvmpipe at some point. On the other hand, is possible
>> that LLVM common-subexpression elimination optimization passes already do
>> that, so we gain nothing.
>>
>>
>> In short, not big deal either way, but I think it's worth give it a 2nd
>> thought here.
>
> R300 doesn't have trigonometric functions. R500, R600 and later VLIW
> chips, and GCN all only have separate sin and cos.
>
> svga is the only driver that has sincos. No gallium hardware driver has that.
I see. Fair enough. Considering that, plus the fact that GLSL doesn't
have conbined sin/cos, and that LLVM will most likely eliminate common
expressions generated by llvmpipe for cos/sin with same arg, there's
really not a significant upside left to justify keeping this around.
FWIW the patch is
Acked-by: Jose Fonseca <jfonseca at vmware.com>
Jose
More information about the mesa-dev
mailing list