[Mesa-dev] [PATCH 00/11] glsl, tgsi, radeonsi: ldexp and frexp bug fixes and features

Nicolai Hähnle nhaehnle at gmail.com
Sat Sep 16 11:27:34 UTC 2017


If you want to test, you can find the series at

https://cgit.freedesktop.org/~nh/mesa/log/?h=ldexp

On 16.09.2017 13:23, Nicolai Hähnle wrote:
> 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(-)
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list