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