Hi all, This series fixes one of the last remaining CTS failures for radeonsi, GL45-CTS.gpu_shader_fp64.built_in_functions.
Specifically, that test checks that mod(13.375, 13.375) == 0.0. As part of the lowering of modulo, we compute 13.375 / 13.375, which is of course 1.0. Unfortunately, when each of the steps in 13.375 * (1.0 / 13.375) is computed with double precision and rounded to nearest, the result is the largest number strictly smaller than 1.0. Computing the floor of that becomes 0.0, hence we get a very wrong result. With this series, we keep the division as a division, and let LLVM produce the correct code for it. The resulting shader code is actually faster than the RCP+MUL sequence, at least as long as the denominator isn't re-used (not that anybody really cares about the performance of double precision in OpenGL, but whatever). Please review! Thanks, Nicolai -- src/compiler/glsl/ir_optimization.h | 4 +++- src/compiler/glsl/lower_instructions.cpp | 19 ++++++++++-------- .../auxiliary/gallivm/lp_bld_tgsi_action.c | 2 ++ src/gallium/auxiliary/tgsi/tgsi_info.c | 2 ++ src/gallium/docs/source/screen.rst | 2 ++ src/gallium/docs/source/tgsi.rst | 9 +++++++++ .../drivers/freedreno/freedreno_screen.c | 3 ++- src/gallium/drivers/i915/i915_screen.c | 1 + src/gallium/drivers/ilo/ilo_screen.c | 1 + src/gallium/drivers/llvmpipe/lp_screen.c | 1 + .../drivers/nouveau/nv30/nv30_screen.c | 1 + .../drivers/nouveau/nv50/nv50_screen.c | 1 + .../drivers/nouveau/nvc0/nvc0_screen.c | 1 + src/gallium/drivers/r300/r300_screen.c | 1 + src/gallium/drivers/r600/r600_pipe.c | 3 ++- src/gallium/drivers/radeonsi/si_pipe.c | 3 ++- src/gallium/drivers/softpipe/sp_screen.c | 1 + src/gallium/drivers/svga/svga_screen.c | 1 + src/gallium/drivers/swr/swr_screen.cpp | 1 + src/gallium/drivers/vc4/vc4_screen.c | 1 + src/gallium/drivers/virgl/virgl_screen.c | 1 + src/gallium/include/pipe/p_defines.h | 1 + src/gallium/include/pipe/p_shader_tokens.h | 5 ++++- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 11 +++++----- 24 files changed, 57 insertions(+), 19 deletions(-) _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev