diff options
author | Brian Paul <[email protected]> | 2008-12-16 15:50:14 -0700 |
---|---|---|
committer | Brian Paul <[email protected]> | 2008-12-16 15:50:14 -0700 |
commit | b0caa10a85b39f0e657dc0c4816884c9356b0b1a (patch) | |
tree | 812ec91f0cf375921533c2722de313461004aa20 /src/mesa/shader/slang/slang_emit.c | |
parent | 3616fb08da8ef392db1d5ccab55b8eb9f6a6f32b (diff) | |
parent | 3be8d6db9e8bfbd1b3ebf9ac382857ad1e6ef753 (diff) |
Merge commit 'origin/master' into gallium-0.2
Diffstat (limited to 'src/mesa/shader/slang/slang_emit.c')
-rw-r--r-- | src/mesa/shader/slang/slang_emit.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c index e3cb252a3d7..6587f9cf276 100644 --- a/src/mesa/shader/slang/slang_emit.c +++ b/src/mesa/shader/slang/slang_emit.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 7.1 * * Copyright (C) 2005-2008 Brian Paul All Rights Reserved. + * Copyright (C) 2008 VMware, Inc. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -155,6 +155,28 @@ _slang_swizzle_swizzle(GLuint swz1, GLuint swz2) /** + * Return the default swizzle mask for accessing a variable of the + * given size (in floats). If size = 1, comp is used to identify + * which component [0..3] of the register holds the variable. + */ +GLuint +_slang_var_swizzle(GLint size, GLint comp) +{ + switch (size) { + case 1: + return MAKE_SWIZZLE4(comp, comp, comp, comp); + case 2: + return MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_NIL, SWIZZLE_NIL); + case 3: + return MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_NIL); + default: + return SWIZZLE_XYZW; + } +} + + + +/** * Allocate storage for the given node (if it hasn't already been allocated). * * Typically this is temporary storage for an intermediate result (such as @@ -1917,6 +1939,7 @@ emit_array_element(slang_emit_info *emitInfo, slang_ir_node *n) } n->Store->Size = elemSize; + n->Store->Swizzle = _slang_var_swizzle(elemSize, 0); return NULL; /* no instruction */ } |