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 473469715a8a171512cf9b528702e70393f01c6041José Fonseca#define LP_BLD_SWIZZLE_DONTCARE 0xFF 483469715a8a171512cf9b528702e70393f01c6041José Fonseca 493469715a8a171512cf9b528702e70393f01c6041José Fonseca 504393ca7956bd03e07b4d7a019705fc62d4ac7155José FonsecaLLVMValueRef 51efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_broadcast(struct gallivm_state *gallivm, 526f5cd15f80d612e165078dfe2126cf44cf509d91José Fonseca LLVMTypeRef vec_type, 536f5cd15f80d612e165078dfe2126cf44cf509d91José Fonseca LLVMValueRef scalar); 546f5cd15f80d612e165078dfe2126cf44cf509d91José Fonseca 556f5cd15f80d612e165078dfe2126cf44cf509d91José Fonseca 566f5cd15f80d612e165078dfe2126cf44cf509d91José FonsecaLLVMValueRef 574393ca7956bd03e07b4d7a019705fc62d4ac7155José Fonsecalp_build_broadcast_scalar(struct lp_build_context *bld, 584393ca7956bd03e07b4d7a019705fc62d4ac7155José Fonseca LLVMValueRef scalar); 594393ca7956bd03e07b4d7a019705fc62d4ac7155José Fonseca 604393ca7956bd03e07b4d7a019705fc62d4ac7155José Fonseca 613fde8167a5d9c1e845053ae4e6a9cd49628adc71José FonsecaLLVMValueRef 62efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_extract_broadcast(struct gallivm_state *gallivm, 633fde8167a5d9c1e845053ae4e6a9cd49628adc71José Fonseca struct lp_type src_type, 643fde8167a5d9c1e845053ae4e6a9cd49628adc71José Fonseca struct lp_type dst_type, 653fde8167a5d9c1e845053ae4e6a9cd49628adc71José Fonseca LLVMValueRef vector, 663fde8167a5d9c1e845053ae4e6a9cd49628adc71José Fonseca LLVMValueRef index); 673fde8167a5d9c1e845053ae4e6a9cd49628adc71José Fonseca 683fde8167a5d9c1e845053ae4e6a9cd49628adc71José Fonseca 691dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca/** 701dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Broadcast one channel of a vector composed of arrays of XYZW structures into 711dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * all four channel. 721dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca */ 731dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé FonsecaLLVMValueRef 7434ea50f6720d6aca970613da560a1f25f5b5772cJosé Fonsecalp_build_swizzle_scalar_aos(struct lp_build_context *bld, 751dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca LLVMValueRef a, 761dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca unsigned channel); 771dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca 781dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca 791dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca/** 801dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Swizzle a vector consisting of an array of XYZW structs. 811dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * 82a70ec096aaece3aaadc1a8307e32554f7ad4d082José Fonseca * @param swizzles is the in [0,4[ range. 831dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca */ 841dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé FonsecaLLVMValueRef 85a70ec096aaece3aaadc1a8307e32554f7ad4d082José Fonsecalp_build_swizzle_aos(struct lp_build_context *bld, 86a70ec096aaece3aaadc1a8307e32554f7ad4d082José Fonseca LLVMValueRef a, 87a70ec096aaece3aaadc1a8307e32554f7ad4d082José Fonseca const unsigned char swizzles[4]); 881dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca 891dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca 902c2debaea71eb99322c2371f1c581e9748cda91fJosé FonsecaLLVMValueRef 912c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonsecalp_build_swizzle_soa_channel(struct lp_build_context *bld, 922c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca const LLVMValueRef *unswizzled, 932c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca unsigned swizzle); 942c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca 952c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca 962c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonsecavoid 972c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonsecalp_build_swizzle_soa(struct lp_build_context *bld, 982c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca const LLVMValueRef *unswizzled, 992c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca const unsigned char swizzles[4], 1002c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca LLVMValueRef *swizzled); 1012c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca 1022c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca 1032c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonsecavoid 1042c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonsecalp_build_swizzle_soa_inplace(struct lp_build_context *bld, 1052c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca LLVMValueRef *values, 1062c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca const unsigned char swizzles[4]); 1072c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca 1082c2debaea71eb99322c2371f1c581e9748cda91fJosé Fonseca 1093469715a8a171512cf9b528702e70393f01c6041José Fonsecavoid 1103469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_transpose_aos(struct gallivm_state *gallivm, 1113469715a8a171512cf9b528702e70393f01c6041José Fonseca struct lp_type type, 1123469715a8a171512cf9b528702e70393f01c6041José Fonseca const LLVMValueRef src[4], 1133469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef dst[4]); 1143469715a8a171512cf9b528702e70393f01c6041José Fonseca 1153469715a8a171512cf9b528702e70393f01c6041José Fonseca 1163469715a8a171512cf9b528702e70393f01c6041José FonsecaLLVMValueRef 1173469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_pack_aos_scalars(struct gallivm_state *gallivm, 1183469715a8a171512cf9b528702e70393f01c6041José Fonseca struct lp_type src_type, 1193469715a8a171512cf9b528702e70393f01c6041José Fonseca struct lp_type dst_type, 1203469715a8a171512cf9b528702e70393f01c6041José Fonseca const LLVMValueRef src); 1213469715a8a171512cf9b528702e70393f01c6041José Fonseca 1223469715a8a171512cf9b528702e70393f01c6041José Fonseca 1233469715a8a171512cf9b528702e70393f01c6041José FonsecaLLVMValueRef 1243469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_unpack_broadcast_aos_scalars(struct gallivm_state *gallivm, 1253469715a8a171512cf9b528702e70393f01c6041José Fonseca struct lp_type src_type, 1263469715a8a171512cf9b528702e70393f01c6041José Fonseca struct lp_type dst_type, 1273469715a8a171512cf9b528702e70393f01c6041José Fonseca const LLVMValueRef src); 1283469715a8a171512cf9b528702e70393f01c6041José Fonseca 1293469715a8a171512cf9b528702e70393f01c6041José Fonseca 1301dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca#endif /* !LP_BLD_SWIZZLE_H */ 131