| |
| #include "cell/common.h" |
| #include "pipe/p_shader_tokens.h" |
| #include "util/u_debug.h" |
| #include "tgsi/tgsi_parse.h" |
| //#include "tgsi_build.h" |
| #include "tgsi/tgsi_util.h" |
| |
| unsigned |
| tgsi_util_get_src_register_swizzle( |
| const struct tgsi_src_register *reg, |
| unsigned component ) |
| { |
| switch( component ) { |
| case 0: |
| return reg->SwizzleX; |
| case 1: |
| return reg->SwizzleY; |
| case 2: |
| return reg->SwizzleZ; |
| case 3: |
| return reg->SwizzleW; |
| default: |
| ASSERT( 0 ); |
| } |
| return 0; |
| } |
| |
| |
| unsigned |
| tgsi_util_get_full_src_register_swizzle( |
| const struct tgsi_full_src_register *reg, |
| unsigned component ) |
| { |
| return tgsi_util_get_src_register_swizzle( |
| reg->Register, |
| component ); |
| } |
| |
| |
| unsigned |
| tgsi_util_get_full_src_register_sign_mode( |
| const struct tgsi_full_src_register *reg, |
| unsigned component ) |
| { |
| unsigned sign_mode; |
| |
| if( reg->RegisterExtMod.Absolute ) { |
| /* Consider only the post-abs negation. */ |
| |
| if( reg->RegisterExtMod.Negate ) { |
| sign_mode = TGSI_UTIL_SIGN_SET; |
| } |
| else { |
| sign_mode = TGSI_UTIL_SIGN_CLEAR; |
| } |
| } |
| else { |
| /* Accumulate the three negations. */ |
| |
| unsigned negate; |
| |
| negate = reg->Register.Negate; |
| if( reg->RegisterExtMod.Negate ) { |
| negate = !negate; |
| } |
| |
| if( negate ) { |
| sign_mode = TGSI_UTIL_SIGN_TOGGLE; |
| } |
| else { |
| sign_mode = TGSI_UTIL_SIGN_KEEP; |
| } |
| } |
| |
| return sign_mode; |
| } |