Hi all, This series was motivated by radeonsi failing some ldexp tests due to not handling denorms correctly and not handling overflows (which GLSL doesn't require, but GLSL ES does).
The first patch fixes the GLSL IR lowering of ldexp() to handle all cases fully except: 1. Denorms; they're annoying and therefore all flushed to zero. 2. Exponent 32-bit overflow. This would be easy to fix at the cost of an additional min() instruction, but neither GLSL nor GLSL ES requires it. The goal of the remainder of the series is to move radeonsi to use the hardware implementation of ldexp and frexp. This entails cleaning up a lot of stuff around the existing DLDEXP and DFRACEXP (implemented by softpipe and r600), as well as adding a new LDEXP opcode. Please review! Cheers, Nicolai -- src/compiler/glsl/lower_instructions.cpp | 171 +++++++++++------ .../auxiliary/gallivm/lp_bld_limits.h | 1 + src/gallium/auxiliary/gallivm/lp_bld_tgsi.c | 26 ++- src/gallium/auxiliary/gallivm/lp_bld_tgsi.h | 1 + .../auxiliary/gallivm/lp_bld_tgsi_action.h | 5 + .../auxiliary/gallivm/lp_bld_tgsi_soa.c | 19 +- src/gallium/auxiliary/nir/tgsi_to_nir.c | 7 +- src/gallium/auxiliary/tgsi/tgsi_exec.c | 31 ++- src/gallium/auxiliary/tgsi/tgsi_exec.h | 10 + src/gallium/auxiliary/tgsi/tgsi_info.c | 11 +- src/gallium/auxiliary/tgsi/tgsi_info.h | 4 +- .../auxiliary/tgsi/tgsi_info_opcodes.h | 4 +- src/gallium/docs/source/screen.rst | 1 + src/gallium/docs/source/tgsi.rst | 24 ++- src/gallium/drivers/etnaviv/etnaviv_screen.c | 1 + .../drivers/freedreno/freedreno_screen.c | 1 + src/gallium/drivers/i915/i915_screen.c | 1 + .../drivers/nouveau/nv30/nv30_screen.c | 2 + .../drivers/nouveau/nv50/nv50_screen.c | 1 + .../drivers/nouveau/nvc0/nvc0_screen.c | 1 + src/gallium/drivers/r300/r300_screen.c | 2 + src/gallium/drivers/r600/r600_pipe.c | 1 + src/gallium/drivers/r600/r600_shader.c | 14 +- src/gallium/drivers/radeonsi/si_pipe.c | 3 +- src/gallium/drivers/radeonsi/si_shader.c | 14 +- .../drivers/radeonsi/si_shader_internal.h | 1 + .../drivers/radeonsi/si_shader_tgsi_alu.c | 27 +++ .../drivers/radeonsi/si_shader_tgsi_setup.c | 16 +- src/gallium/drivers/svga/svga_screen.c | 3 + src/gallium/drivers/vc4/vc4_screen.c | 1 + src/gallium/include/pipe/p_defines.h | 1 + src/gallium/include/pipe/p_shader_tokens.h | 2 +- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 10 +- 33 files changed, 290 insertions(+), 127 deletions(-) _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev