lp_bld_swizzle.h revision 0d71ba46e613230c84165106c1fcc9027dec4cd3
11dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca/**************************************************************************
21dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca *
31dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Copyright 2009 VMware, Inc.
41dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * All Rights Reserved.
51dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca *
61dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Permission is hereby granted, free of charge, to any person obtaining a
71dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * copy of this software and associated documentation files (the
81dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * "Software"), to deal in the Software without restriction, including
91dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * without limitation the rights to use, copy, modify, merge, publish,
101dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * distribute, sub license, and/or sell copies of the Software, and to
111dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * permit persons to whom the Software is furnished to do so, subject to
121dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * the following conditions:
131dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca *
141dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * The above copyright notice and this permission notice (including the
151dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * next paragraph) shall be included in all copies or substantial portions
161dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * of the Software.
171dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca *
181dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
191dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
201dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
211dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
221dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
231dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
241dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
251dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca *
261dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca **************************************************************************/
271dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
281dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca/**
291dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * @file
305811ed87d732101ab8cfbd087bc99d8c6c963f30José Fonseca * Helper functions for swizzling/shuffling.
311dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca *
321dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * @author Jose Fonseca <jfonseca@vmware.com>
331dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca */
341dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
351dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
361dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca#ifndef LP_BLD_SWIZZLE_H
371dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca#define LP_BLD_SWIZZLE_H
381dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
391dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
400d71ba46e613230c84165106c1fcc9027dec4cd3Brian Paul#include "gallivm/lp_bld.h"
411dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
421dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
43ce98860012b10cc6cc124fd1ed6fa3a5e28712bbJosé Fonsecastruct lp_type;
441dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonsecastruct lp_build_context;
451dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
461dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
474393ca7956bd03e07b4d7a019705fc62d4ac7155José FonsecaLLVMValueRef
486f5cd15f80d612e165078dfe2126cf44cf509d91José Fonsecalp_build_broadcast(LLVMBuilderRef builder,
496f5cd15f80d612e165078dfe2126cf44cf509d91José Fonseca                   LLVMTypeRef vec_type,
506f5cd15f80d612e165078dfe2126cf44cf509d91José Fonseca                   LLVMValueRef scalar);
516f5cd15f80d612e165078dfe2126cf44cf509d91José Fonseca
526f5cd15f80d612e165078dfe2126cf44cf509d91José Fonseca
536f5cd15f80d612e165078dfe2126cf44cf509d91José FonsecaLLVMValueRef
544393ca7956bd03e07b4d7a019705fc62d4ac7155José Fonsecalp_build_broadcast_scalar(struct lp_build_context *bld,
554393ca7956bd03e07b4d7a019705fc62d4ac7155José Fonseca                          LLVMValueRef scalar);
564393ca7956bd03e07b4d7a019705fc62d4ac7155José Fonseca
574393ca7956bd03e07b4d7a019705fc62d4ac7155José Fonseca
581dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca/**
591dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Broadcast one channel of a vector composed of arrays of XYZW structures into
601dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * all four channel.
611dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca */
621dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé FonsecaLLVMValueRef
631dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonsecalp_build_broadcast_aos(struct lp_build_context *bld,
641dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                       LLVMValueRef a,
651dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                       unsigned channel);
661dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
671dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
681dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca/**
691dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Swizzle a vector consisting of an array of XYZW structs.
701dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca *
711dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * @param swizzle is the in [0,4[ range.
721dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca */
731dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé FonsecaLLVMValueRef
741dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonsecalp_build_swizzle1_aos(struct lp_build_context *bld,
751dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                      LLVMValueRef a,
765e13e987da6ce656b08f6c25f8d373c80949e3b0José Fonseca                      const unsigned char swizzle[4]);
771dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
781dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
791dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca/**
801dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Swizzle two vector consisting of an array of XYZW structs.
811dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca *
821dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * @param swizzle is the in [0,8[ range. Values in [4,8[ range refer to b.
831dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca */
841dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé FonsecaLLVMValueRef
851dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonsecalp_build_swizzle2_aos(struct lp_build_context *bld,
861dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                      LLVMValueRef a,
871dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                      LLVMValueRef b,
885e13e987da6ce656b08f6c25f8d373c80949e3b0José Fonseca                      const unsigned char swizzle[4]);
891dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
901dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
911dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca#endif /* !LP_BLD_SWIZZLE_H */
92