summaryrefslogtreecommitdiffstats
path: root/src/glx/clientattrib.c
diff options
context:
space:
mode:
authorIago Toral Quiroga <[email protected]>2018-05-31 10:34:03 +0200
committerIago Toral Quiroga <[email protected]>2019-01-02 07:54:39 +0100
commitec79069856b05840630da3a2612fdb9ce1debb82 (patch)
tree867f8a070a503835feb80fbf45afe29854fc0b82 /src/glx/clientattrib.c
parentfda3f6d4243468dd66f5ec01e69ced538d73af2e (diff)
compiler/spirv: use 32-bit polynomial approximation for 16-bit asin()
The 16-bit polynomial execution doesn't meet Khronos precision requirements. Also, the half-float denorm range starts at 2^(-14) and with asin taking input values in the range [0, 1], polynomial approximations can lead to flushing relatively easy. An alternative is to use the atan2 formula to compute asin, which is the reference taken by Khronos to determine precision requirements, but that ends up generating too many additional instructions when compared to the polynomial approximation. Specifically, for the Intel case, doing this adds +41 instructions to the program for each asin/acos call, which looks like an undesirable trade off. So for now we take the easy way out and fallback to using the 32-bit polynomial approximation, which is better (faster) than the 16-bit atan2 implementation and gives us better precision that matches Khronos requirements. v2: - Fallback to 32-bit using recursion (Jason). Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/glx/clientattrib.c')
0 files changed, 0 insertions, 0 deletions