1 /************************************************************************** 2 * 3 * Copyright 2009 VMware, Inc. 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21 * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27 28 #ifndef LP_BLD_FORMAT_H 29 #define LP_BLD_FORMAT_H 30 31 32 /** 33 * @file 34 * Pixel format helpers. 35 */ 36 37 #include "gallivm/lp_bld.h" 38 #include "gallivm/lp_bld_init.h" 39 40 #include "pipe/p_format.h" 41 42 struct util_format_description; 43 struct lp_type; 44 struct lp_build_context; 45 46 47 /* 48 * AoS 49 */ 50 51 LLVMValueRef 52 lp_build_format_swizzle_aos(const struct util_format_description *desc, 53 struct lp_build_context *bld, 54 LLVMValueRef unswizzled); 55 56 LLVMValueRef 57 lp_build_pack_rgba_aos(struct gallivm_state *gallivm, 58 const struct util_format_description *desc, 59 LLVMValueRef rgba); 60 61 LLVMValueRef 62 lp_build_fetch_rgba_aos(struct gallivm_state *gallivm, 63 const struct util_format_description *format_desc, 64 struct lp_type type, 65 LLVMValueRef base_ptr, 66 LLVMValueRef offset, 67 LLVMValueRef i, 68 LLVMValueRef j); 69 70 LLVMValueRef 71 lp_build_fetch_rgba_aos_array(struct gallivm_state *gallivm, 72 const struct util_format_description *format_desc, 73 struct lp_type type, 74 LLVMValueRef base_ptr, 75 LLVMValueRef offset); 76 77 78 /* 79 * SoA 80 */ 81 82 void 83 lp_build_format_swizzle_soa(const struct util_format_description *format_desc, 84 struct lp_build_context *bld, 85 const LLVMValueRef unswizzled[4], 86 LLVMValueRef swizzled_out[4]); 87 88 void 89 lp_build_unpack_rgba_soa(struct gallivm_state *gallivm, 90 const struct util_format_description *format_desc, 91 struct lp_type type, 92 LLVMValueRef packed, 93 LLVMValueRef rgba_out[4]); 94 95 void 96 lp_build_rgba8_to_f32_soa(struct gallivm_state *gallivm, 97 struct lp_type dst_type, 98 LLVMValueRef packed, 99 LLVMValueRef *rgba); 100 101 void 102 lp_build_fetch_rgba_soa(struct gallivm_state *gallivm, 103 const struct util_format_description *format_desc, 104 struct lp_type type, 105 LLVMValueRef base_ptr, 106 LLVMValueRef offsets, 107 LLVMValueRef i, 108 LLVMValueRef j, 109 LLVMValueRef rgba_out[4]); 110 111 /* 112 * YUV 113 */ 114 115 116 LLVMValueRef 117 lp_build_fetch_subsampled_rgba_aos(struct gallivm_state *gallivm, 118 const struct util_format_description *format_desc, 119 unsigned n, 120 LLVMValueRef base_ptr, 121 LLVMValueRef offset, 122 LLVMValueRef i, 123 LLVMValueRef j); 124 125 #endif /* !LP_BLD_FORMAT_H */ 126