Mesa (master): translate_sse: major rewrite (v5)

Luca Barbieri lb at kemper.freedesktop.org
Mon Aug 16 15:09:50 UTC 2010


Module: Mesa
Branch: master
Commit: c2da8e77023325f46dde2009def2947b1a687c7b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c2da8e77023325f46dde2009def2947b1a687c7b

Author: Luca Barbieri <luca at luca-barbieri.com>
Date:   Tue Aug 10 02:14:04 2010 +0200

translate_sse: major rewrite (v5)

NOTE: Win64 is untested, and is thus currently disabled.
If you have such a system, please enable it and report whether it works.
To enable it, change src/gallium/auxiliary/translate/translate.c

Changes in v5:
- On Win64, preserve %xmm6 and %xmm7 as required by the ABI
- Use _WIN64 instead of WIN64

Changes in v4:
- Use x86_target() and x86_target_caps()
- Enable translate_sse in x86-64, but not in Win64

Changes in v3:
- Win64 support (untested)
- Use u_cpu_detect.h constants instead of #ifs

Changes in v2:
- Minimize #ifs
- Give a name to magic number CHANNELS_0001
- Add support for CPUs without SSE (only memcpy and swizzles, like non SSE2)
- Fixed comments

translate_sse is currently very limited to the point of
being useless in essentially all cases.

In particular, it only support some float32 and unorm8
formats and doesn't work on x86-64.

This commit rewrites it to support:
1. Dumb memory copy for any pair of identical formats
2. All formats that are swizzles of each other
3. Converting 32/64-bit floats and all 8/16/32-bit integers to 32-bit float
4. Converting unorm8/snorm8 to snorm16 and uscaled8/sscaled8 to sscaled16
5. Support for x86-64 (doesn't take advantage of it in any way though)

This new translate can even be useful to translate index buffers for
cards that lack 8-bit index support.

It passes the testsuite I wrote, but note that this is a major change, and more
testing would be great.

---

 src/gallium/auxiliary/translate/translate.c     |    3 +-
 src/gallium/auxiliary/translate/translate_sse.c | 1172 ++++++++++++++++++-----
 2 files changed, 936 insertions(+), 239 deletions(-)

Diff:   http://cgit.freedesktop.org/mesa/mesa/diff/?id=c2da8e77023325f46dde2009def2947b1a687c7b



More information about the mesa-commit mailing list