diff options
author | Anuj Phogat <[email protected]> | 2019-05-10 13:22:31 -0700 |
---|---|---|
committer | Anuj Phogat <[email protected]> | 2019-05-15 23:30:30 +0000 |
commit | a42163cbbc1abe02b7db4ade74b569f455942d1a (patch) | |
tree | e7e2f6eb4ab9094a8985314f1d2d42772ab446d4 /src | |
parent | d305409db51b998f99330ebd27044758ef207abf (diff) |
compiler: Add lowering support for 64-bit saturate operations to software
Fixes 7 Khronos GL CTS tests:
KHR-GL45.gpu_shader_fp64.builtin.smoothstep_dvec{double, 2, 3, 4}
KHR-GL45.gpu_shader_fp64.builtin.smoothstep_against_scalar_dvec{2, 3, 4}
Suggested-by: Jason Ekstrand <[email protected]>
Signed-off-by: Anuj Phogat <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/glsl/float64.glsl | 12 | ||||
-rw-r--r-- | src/compiler/nir/nir_lower_double_ops.c | 3 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/compiler/glsl/float64.glsl b/src/compiler/glsl/float64.glsl index 415dde3907c..babfad20e9c 100644 --- a/src/compiler/glsl/float64.glsl +++ b/src/compiler/glsl/float64.glsl @@ -218,6 +218,18 @@ __fge64(uint64_t a, uint64_t b) return !__flt64_nonnan(a, b); } +uint64_t +__fsat64(uint64_t __a) +{ + if (__flt64(__a, 0ul)) + return 0ul; + + if (__fge64(__a, 0x3FF0000000000000ul /* 1.0 */)) + return 0x3FF0000000000000ul; + + return __a; +} + /* Adds the 64-bit value formed by concatenating `a0' and `a1' to the 64-bit * value formed by concatenating `b0' and `b1'. Addition is modulo 2^64, so * any carry out is lost. The result is broken into two 32-bit pieces which diff --git a/src/compiler/nir/nir_lower_double_ops.c b/src/compiler/nir/nir_lower_double_ops.c index 18fe08c7d5d..04ec2a82801 100644 --- a/src/compiler/nir/nir_lower_double_ops.c +++ b/src/compiler/nir/nir_lower_double_ops.c @@ -550,6 +550,9 @@ lower_doubles_instr_to_soft(nir_builder *b, nir_alu_instr *instr, case nir_op_ffma: name = "__ffma64"; break; + case nir_op_fsat: + name = "__fsat64"; + break; default: return false; } |