diff options
author | Zack Rusin <[email protected]> | 2013-07-08 23:45:55 -0400 |
---|---|---|
committer | Zack Rusin <[email protected]> | 2013-07-09 23:30:55 -0400 |
commit | 63386b2f66a6d450889cd5368bc599beb7f1efbf (patch) | |
tree | a82f6a2acbbfc7d639687033060a44a0621e12a3 /src/gallium/drivers/llvmpipe/lp_rast.c | |
parent | 80bc14370a4db876ababc13404a93526c2b14de7 (diff) |
util: treat denorm'ed floats like zero
The D3D10 spec is very explicit about treatment of denorm floats and
the behavior is exactly the same for them as it would be for -0 or
+0. This makes our shading code match that behavior, since OpenGL
doesn't care and on a few cpu's it's faster (worst case the same).
Float16 conversions will likely break but we'll fix them in a follow
up commit.
Signed-off-by: Zack Rusin <[email protected]>
Reviewed-by: Jose Fonseca <[email protected]>
Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_rast.c')
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_rast.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c index 871cc50fb4c..e172dac40cb 100644 --- a/src/gallium/drivers/llvmpipe/lp_rast.c +++ b/src/gallium/drivers/llvmpipe/lp_rast.c @@ -751,6 +751,12 @@ static PIPE_THREAD_ROUTINE( thread_function, init_data ) struct lp_rasterizer_task *task = (struct lp_rasterizer_task *) init_data; struct lp_rasterizer *rast = task->rast; boolean debug = false; + unsigned fpstate = util_fpstate_get(); + + /* Make sure that denorms are treated like zeros. This is + * the behavior required by D3D10. OpenGL doesn't care. + */ + util_fpstate_set_denorms_to_zero(fpstate); while (1) { /* wait for work */ |