lp_bld_swizzle.h revision 1dd7bb17c7331f9ecd0bc830b61ada235a56fe6d
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
301dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Helper functions for constant building.
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
401dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca#include <llvm-c/Core.h>
411dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
421dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
431dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonsecaunion lp_type type;
441dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonsecastruct lp_build_context;
451dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
461dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
471dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca/**
481dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Broadcast one channel of a vector composed of arrays of XYZW structures into
491dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * all four channel.
501dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca */
511dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé FonsecaLLVMValueRef
521dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonsecalp_build_broadcast_aos(struct lp_build_context *bld,
531dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                       LLVMValueRef a,
541dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                       unsigned channel);
551dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
561dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
571dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé FonsecaLLVMValueRef
581dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonsecalp_build_select_aos(struct lp_build_context *bld,
591dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                    LLVMValueRef a,
601dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                    LLVMValueRef b,
611dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                    boolean cond[4]);
621dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
631dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
641dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca/**
651dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Swizzle a vector consisting of an array of XYZW structs.
661dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca *
671dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * @param swizzle is the in [0,4[ range.
681dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca */
691dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé FonsecaLLVMValueRef
701dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonsecalp_build_swizzle1_aos(struct lp_build_context *bld,
711dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                      LLVMValueRef a,
721dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                      unsigned char swizzle[4]);
731dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
741dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
751dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca/**
761dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * Swizzle two vector consisting of an array of XYZW structs.
771dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca *
781dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca * @param swizzle is the in [0,8[ range. Values in [4,8[ range refer to b.
791dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca */
801dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé FonsecaLLVMValueRef
811dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonsecalp_build_swizzle2_aos(struct lp_build_context *bld,
821dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                      LLVMValueRef a,
831dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                      LLVMValueRef b,
841dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca                      unsigned char swizzle[4]);
851dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
861dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca
871dd7bb17c7331f9ecd0bc830b61ada235a56fe6dJosé Fonseca#endif /* !LP_BLD_SWIZZLE_H */
88