diff options
author | Michal Krol <[email protected]> | 2008-11-26 13:54:28 +0100 |
---|---|---|
committer | Michal Krol <[email protected]> | 2008-11-26 13:54:28 +0100 |
commit | 823aac36d5580ea46f76ccec3fd31c91f168274e (patch) | |
tree | 17e01221fb347c67805ec32b60fab98360d2f1fa /src/gallium/auxiliary/tgsi/tgsi_exec.c | |
parent | adf14090fb6e43a25eabb13796d5a9385d8511ea (diff) |
tgsi: Implement OPCODE_SSG/SGN.
Diffstat (limited to 'src/gallium/auxiliary/tgsi/tgsi_exec.c')
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_exec.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index 1981d8b68f9..9fd0497043f 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -829,6 +829,17 @@ micro_rnd( } static void +micro_sgn( + union tgsi_exec_channel *dst, + const union tgsi_exec_channel *src ) +{ + dst->f[0] = src->f[0] < 0.0f ? -1.0f : src->f[0] > 0.0f ? 1.0f : 0.0f; + dst->f[1] = src->f[1] < 0.0f ? -1.0f : src->f[1] > 0.0f ? 1.0f : 0.0f; + dst->f[2] = src->f[2] < 0.0f ? -1.0f : src->f[2] > 0.0f ? 1.0f : 0.0f; + dst->f[3] = src->f[3] < 0.0f ? -1.0f : src->f[3] > 0.0f ? 1.0f : 0.0f; +} + +static void micro_shl( union tgsi_exec_channel *dst, const union tgsi_exec_channel *src0, @@ -2480,7 +2491,12 @@ exec_instruction( break; case TGSI_OPCODE_SSG: - assert (0); + /* TGSI_OPCODE_SGN */ + FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) { + FETCH( &r[0], 0, chan_index ); + micro_sgn( &r[0], &r[0] ); + STORE( &r[0], 0, chan_index ); + } break; case TGSI_OPCODE_CMP: |