r600: Scale integer valued texture border colors to float (v2)
authorGert Wollny <gw.fossdev@gmail.com>
Fri, 29 Jun 2018 19:44:53 +0000 (21:44 +0200)
committerGert Wollny <gw.fossdev@gmail.com>
Wed, 25 Jul 2018 06:58:33 +0000 (08:58 +0200)
commit82fc6bdebfe3c4e2b224c12257b1f9317f7242cf
tree0f45636ce9b8df8ffe174529fa1f3f20368da4e9
parentb3b170ade9cc3abe6b861a549292c9ec230844bc
r600: Scale integer valued texture border colors to float (v2)

It seems the hardware always expects floating point border color values
[0,1] for unsigned, and [-1,1] for signed texture component, regardless
of pixel type, but the border colors are passed according to texture
component type. Hence, before submitting the border color, convert and
scale it these ranges accordingly.

This doesn't seem to work for textures with 32 bit integer components
though, here, it seems that the border color is always set to zero,
regardless of the BORDER_COLOR_TYPE state set in Q_TEX_SAMPLER_WORD0_0.

v2: Simplyfy logic as suggested by Roland Schneidegger

Fixes:
  dEQP-GLES31.functional.texture.border_clamp.formats.compressed*
  dEQP-GLES31.functional.texture.border_clamp.formats.r* (non 32 bit integer)
  dEQP-GLES31.functional.texture.border_clamp.per_axis_wrap_mode.texture_2d*
 and a number of piglits out of
  piglit run gpu -t texture -t gather -t formats

Signed-off-by: Gert Wollny <gw.fossdev@gmail.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/gallium/drivers/r600/evergreen_state.c