diff options
Diffstat (limited to 'src/gallium')
| -rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_swizzle.c | 49 | ||||
| -rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_swizzle.h | 12 | ||||
| -rw-r--r-- | src/gallium/drivers/llvmpipe/lp_bld_blend_aos.c | 41 | 
3 files changed, 19 insertions, 83 deletions
| diff --git a/src/gallium/auxiliary/gallivm/lp_bld_swizzle.c b/src/gallium/auxiliary/gallivm/lp_bld_swizzle.c index 3c8a7bc09e..53705fa082 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_swizzle.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_swizzle.c @@ -205,55 +205,6 @@ lp_build_swizzle1_aos(struct lp_build_context *bld,  } -LLVMValueRef -lp_build_swizzle2_aos(struct lp_build_context *bld, -                      LLVMValueRef a, -                      LLVMValueRef b, -                      const unsigned char swizzle[4]) -{ -   const unsigned n = bld->type.length; -   unsigned i, j; - -   if(swizzle[0] < 4 && swizzle[1] < 4 && swizzle[2] < 4 && swizzle[3] < 4) -      return lp_build_swizzle1_aos(bld, a, swizzle); - -   if(a == b) { -      unsigned char swizzle1[4]; -      swizzle1[0] = swizzle[0] % 4; -      swizzle1[1] = swizzle[1] % 4; -      swizzle1[2] = swizzle[2] % 4; -      swizzle1[3] = swizzle[3] % 4; -      return lp_build_swizzle1_aos(bld, a, swizzle1); -   } - -   if(swizzle[0] % 4 == 0 && -      swizzle[1] % 4 == 1 && -      swizzle[2] % 4 == 2 && -      swizzle[3] % 4 == 3) { -      boolean cond[4]; -      cond[0] = swizzle[0] / 4; -      cond[1] = swizzle[1] / 4; -      cond[2] = swizzle[2] / 4; -      cond[3] = swizzle[3] / 4; -      return lp_build_select_aos(bld, a, b, cond); -   } - -   { -      /* -       * Shuffle. -       */ -      LLVMTypeRef elem_type = LLVMInt32Type(); -      LLVMValueRef shuffles[LP_MAX_VECTOR_LENGTH]; - -      for(j = 0; j < n; j += 4) -         for(i = 0; i < 4; ++i) -            shuffles[j + i] = LLVMConstInt(elem_type, j + (swizzle[i] % 4) + (swizzle[i] / 4 * n), 0); - -      return LLVMBuildShuffleVector(bld->builder, a, b, LLVMConstVector(shuffles, n), ""); -   } -} - -  /**   * Extended swizzle of a single channel of a SoA vector.   * diff --git a/src/gallium/auxiliary/gallivm/lp_bld_swizzle.h b/src/gallium/auxiliary/gallivm/lp_bld_swizzle.h index 4f4fa777c9..509e97c0ae 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_swizzle.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_swizzle.h @@ -76,18 +76,6 @@ lp_build_swizzle1_aos(struct lp_build_context *bld,                        const unsigned char swizzle[4]); -/** - * Swizzle two vector consisting of an array of XYZW structs. - * - * @param swizzle is the in [0,8[ range. Values in [4,8[ range refer to b. - */ -LLVMValueRef -lp_build_swizzle2_aos(struct lp_build_context *bld, -                      LLVMValueRef a, -                      LLVMValueRef b, -                      const unsigned char swizzle[4]); - -  LLVMValueRef  lp_build_swizzle_soa_channel(struct lp_build_context *bld,                               const LLVMValueRef *unswizzled, diff --git a/src/gallium/drivers/llvmpipe/lp_bld_blend_aos.c b/src/gallium/drivers/llvmpipe/lp_bld_blend_aos.c index 70d08e71f6..09e9833057 100644 --- a/src/gallium/drivers/llvmpipe/lp_bld_blend_aos.c +++ b/src/gallium/drivers/llvmpipe/lp_bld_blend_aos.c @@ -190,30 +190,27 @@ lp_build_blend_swizzle(struct lp_build_blend_aos_context *bld,                         enum lp_build_blend_swizzle rgb_swizzle,                         unsigned alpha_swizzle)  { -   if(rgb == alpha) { -      if(rgb_swizzle == LP_BUILD_BLEND_SWIZZLE_RGBA) -         return rgb; -      if(rgb_swizzle == LP_BUILD_BLEND_SWIZZLE_AAAA) -         return lp_build_broadcast_aos(&bld->base, rgb, alpha_swizzle); +   LLVMValueRef swizzled_rgb; + +   switch (rgb_swizzle) { +   case LP_BUILD_BLEND_SWIZZLE_RGBA: +      swizzled_rgb = rgb; +      break; +   case LP_BUILD_BLEND_SWIZZLE_AAAA: +      swizzled_rgb = lp_build_broadcast_aos(&bld->base, rgb, alpha_swizzle); +      break; +   default: +      assert(0); +      swizzled_rgb = bld->base.undef;     } -   else { -      if(rgb_swizzle == LP_BUILD_BLEND_SWIZZLE_RGBA) { -         boolean cond[4] = {0, 0, 0, 0}; -         cond[alpha_swizzle] = 1; -         return lp_build_select_aos(&bld->base, alpha, rgb, cond); -      } -      if(rgb_swizzle == LP_BUILD_BLEND_SWIZZLE_AAAA) { -         unsigned char swizzle[4]; -         swizzle[0] = alpha_swizzle; -         swizzle[1] = alpha_swizzle; -         swizzle[2] = alpha_swizzle; -         swizzle[3] = alpha_swizzle; -         swizzle[alpha_swizzle] += 4; -         return lp_build_swizzle2_aos(&bld->base, rgb, alpha, swizzle); -      } + +   if (rgb != alpha) { +      boolean cond[4] = {0, 0, 0, 0}; +      cond[alpha_swizzle] = 1; +      swizzled_rgb = lp_build_select_aos(&bld->base, alpha, swizzled_rgb, cond);     } -   assert(0); -   return bld->base.undef; + +   return swizzled_rgb;  } | 
