From: Brian Paul Date: Wed, 20 Aug 2008 20:40:02 +0000 (-0600) Subject: mesa: glsl: fix a swizzle bug in storage_to_src_reg() X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ad9c862ffbb42d733595052d5769405ef7a98a75;p=mesa.git mesa: glsl: fix a swizzle bug in storage_to_src_reg() Need to remove the 'nil' components before swizzling a swizzle --- diff --git a/src/mesa/shader/slang/slang_emit.c b/src/mesa/shader/slang/slang_emit.c index f5f41eb116d..9e8daa10517 100644 --- a/src/mesa/shader/slang/slang_emit.c +++ b/src/mesa/shader/slang/slang_emit.c @@ -108,7 +108,9 @@ writemask_to_swizzle(GLuint writemask) /** - * Swizzle a swizzle. That is, return swz2(swz1) + * Swizzle a swizzle (function composition). + * That is, return swz2(swz1), or said another way: swz1.szw2 + * Example: swizzle_swizzle(".zwxx", ".xxyw") yields ".zzwx" */ GLuint _slang_swizzle_swizzle(GLuint swz1, GLuint swz2) @@ -279,7 +281,7 @@ storage_to_src_reg(struct prog_src_register *src, const slang_ir_storage *st) while (st->Parent) { st = st->Parent; index += st->Index; - swizzle = _slang_swizzle_swizzle(st->Swizzle, swizzle); + swizzle = _slang_swizzle_swizzle(fix_swizzle(st->Swizzle), swizzle); } assert(st->File >= 0);