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