1ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/* 2ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Copyright (C) 2012 The Android Open Source Project 3ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 4ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * you may not use this file except in compliance with the License. 6ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * You may obtain a copy of the License at 7ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 8ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 10ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Unless required by applicable law or agreed to in writing, software 11ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * See the License for the specific language governing permissions and 14ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * limitations under the License. 15ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 16ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 17ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 18ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 19ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef uint8_t uchar; 20ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef uint16_t ushort; 21ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef uint32_t uint; 22ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 23ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef float float2 __attribute__((ext_vector_type(2))); 24ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef float float3 __attribute__((ext_vector_type(3))); 25ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef float float4 __attribute__((ext_vector_type(4))); 26ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef uchar uchar2 __attribute__((ext_vector_type(2))); 27ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef uchar uchar3 __attribute__((ext_vector_type(3))); 28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef uchar uchar4 __attribute__((ext_vector_type(4))); 29ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef ushort ushort2 __attribute__((ext_vector_type(2))); 30ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef ushort ushort3 __attribute__((ext_vector_type(3))); 31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef ushort ushort4 __attribute__((ext_vector_type(4))); 32ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef uint uint2 __attribute__((ext_vector_type(2))); 33ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef uint uint3 __attribute__((ext_vector_type(3))); 34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef uint uint4 __attribute__((ext_vector_type(4))); 35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef char char2 __attribute__((ext_vector_type(2))); 36ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef char char3 __attribute__((ext_vector_type(3))); 37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef char char4 __attribute__((ext_vector_type(4))); 38ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef short short2 __attribute__((ext_vector_type(2))); 39ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef short short3 __attribute__((ext_vector_type(3))); 40ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef short short4 __attribute__((ext_vector_type(4))); 41ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef int int2 __attribute__((ext_vector_type(2))); 42ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef int int3 __attribute__((ext_vector_type(3))); 43ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef int int4 __attribute__((ext_vector_type(4))); 44ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef long long2 __attribute__((ext_vector_type(2))); 45ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef long long3 __attribute__((ext_vector_type(3))); 46ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samstypedef long long4 __attribute__((ext_vector_type(4))); 47ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 48ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsenum IntrinsicEnums { 49ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams INTRINSIC_UNDEFINED, 50ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams INTRINSIC_CONVOLVE_3x3, 51ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams INTRINXIC_COLORMATRIX 52ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 53ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams}; 54ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 55ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic inline int4 convert_int4(uchar4 i) { 56ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int4 f4 = {i.x, i.y, i.z, i.w}; 57ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return f4; 58ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 59ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 60ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic inline short4 convert_short4(uchar4 i) { 61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams short4 f4 = {i.x, i.y, i.z, i.w}; 62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return f4; 63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 64ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 65ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic inline float4 convert_float4(uchar4 i) { 66ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams float4 f4 = {i.x, i.y, i.z, i.w}; 67ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return f4; 68ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 69ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 70ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic inline uchar4 convert_uchar4(short4 i) { 71ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uchar4 f4 = {(uchar)i.x, (uchar)i.y, (uchar)i.z, (uchar)i.w}; 72ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return f4; 73ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 74ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 75ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic inline uchar4 convert_uchar4(int4 i) { 76ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uchar4 f4 = {(uchar)i.x, (uchar)i.y, (uchar)i.z, (uchar)i.w}; 77ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return f4; 78ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 79ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 80ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic inline uchar4 convert_uchar4(float4 i) { 81ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams uchar4 f4 = {(uchar)i.x, (uchar)i.y, (uchar)i.z, (uchar)i.w}; 82ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return f4; 83ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 84ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 85ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 86ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic inline int4 clamp(int4 amount, int low, int high) { 87ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int4 r; 88ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); 89ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); 90ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams r.z = amount.z < low ? low : (amount.z > high ? high : amount.z); 91ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams r.w = amount.w < low ? low : (amount.w > high ? high : amount.w); 92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return r; 93ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 94ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 95ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsstatic inline float4 clamp(float4 amount, float low, float high) { 96ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams float4 r; 97ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); 98ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); 99ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams r.z = amount.z < low ? low : (amount.z > high ? high : amount.z); 100ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams r.w = amount.w < low ? low : (amount.w > high ? high : amount.w); 101ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return r; 102ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 103ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 104ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 105