[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:23:42 UTC 2017


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(-)



More information about the mesa-dev mailing list