15a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/* 25a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * Copyright (C) 2012 The Android Open Source Project 35a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * 45a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 55a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * you may not use this file except in compliance with the License. 65a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * You may obtain a copy of the License at 75a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * 85a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 95a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * 105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * Unless required by applicable law or agreed to in writing, software 115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * See the License for the specific language governing permissions and 145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * limitations under the License. 155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 18be2163801c33d6849ae580d42b919b8803d55095Jean-Luc Brouillet#include "rs_core.rsh" 195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern short __attribute__((overloadable, always_inline)) rsClamp(short amount, short low, short high); 215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar4 __attribute__((overloadable)) convert_uchar4(short4); 225a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar4 __attribute__((overloadable)) convert_uchar4(float4); 235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) convert_float4(uchar4); 245a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float __attribute__((overloadable)) sqrt(float); 255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/* 275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * CLAMP 285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines#define _CLAMP(T) \ 305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern T __attribute__((overloadable)) clamp(T amount, T low, T high) { \ 315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return amount < low ? low : (amount > high ? high : amount); \ 325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} \ 335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines \ 345a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern T##2 __attribute__((overloadable)) clamp(T##2 amount, T##2 low, T##2 high) { \ 355a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines T##2 r; \ 365a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = amount.x < low.x ? low.x : (amount.x > high.x ? high.x : amount.x); \ 375a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = amount.y < low.y ? low.y : (amount.y > high.y ? high.y : amount.y); \ 385a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; \ 395a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} \ 405a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines \ 415a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern T##3 __attribute__((overloadable)) clamp(T##3 amount, T##3 low, T##3 high) { \ 425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines T##3 r; \ 435a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = amount.x < low.x ? low.x : (amount.x > high.x ? high.x : amount.x); \ 445a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = amount.y < low.y ? low.y : (amount.y > high.y ? high.y : amount.y); \ 455a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = amount.z < low.z ? low.z : (amount.z > high.z ? high.z : amount.z); \ 465a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; \ 475a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} \ 485a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines \ 495a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern T##4 __attribute__((overloadable)) clamp(T##4 amount, T##4 low, T##4 high) { \ 505a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines T##4 r; \ 515a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = amount.x < low.x ? low.x : (amount.x > high.x ? high.x : amount.x); \ 525a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = amount.y < low.y ? low.y : (amount.y > high.y ? high.y : amount.y); \ 535a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = amount.z < low.z ? low.z : (amount.z > high.z ? high.z : amount.z); \ 545a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = amount.w < low.w ? low.w : (amount.w > high.w ? high.w : amount.w); \ 555a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; \ 565a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} \ 575a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines \ 585a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern T##2 __attribute__((overloadable)) clamp(T##2 amount, T low, T high) { \ 595a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines T##2 r; \ 605a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); \ 615a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); \ 625a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; \ 635a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} \ 645a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines \ 655a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern T##3 __attribute__((overloadable)) clamp(T##3 amount, T low, T high) { \ 665a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines T##3 r; \ 675a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); \ 685a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); \ 695a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = amount.z < low ? low : (amount.z > high ? high : amount.z); \ 705a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; \ 715a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} \ 725a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines \ 735a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern T##4 __attribute__((overloadable)) clamp(T##4 amount, T low, T high) { \ 745a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines T##4 r; \ 755a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = amount.x < low ? low : (amount.x > high ? high : amount.x); \ 765a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = amount.y < low ? low : (amount.y > high ? high : amount.y); \ 775a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = amount.z < low ? low : (amount.z > high ? high : amount.z); \ 785a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = amount.w < low ? low : (amount.w > high ? high : amount.w); \ 795a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; \ 805a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 815a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 82f7f9316f4cf373733285f947bea876ead7216715Verena Beckham#if !defined(ARCH_X86_HAVE_SSSE3) || defined(RS_DEBUG_RUNTIME) || defined(RS_G_RUNTIME) 83a673fb0db28eac2300fcfa04549138c1c9202014Stephen Hines// These functions must be defined here if we are not using the SSE 84a673fb0db28eac2300fcfa04549138c1c9202014Stephen Hines// implementation, which includes when we are built as part of the 85f7f9316f4cf373733285f947bea876ead7216715Verena Beckham// debug runtime (libclcore_debug.bc) or compiling with debug info. 86146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hines 875a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines_CLAMP(float); 88146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hines 89146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hines#else 90146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hines 91146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hinesextern float __attribute__((overloadable)) clamp(float amount, float low, float high); 92146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hinesextern float2 __attribute__((overloadable)) clamp(float2 amount, float2 low, float2 high); 93146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hinesextern float3 __attribute__((overloadable)) clamp(float3 amount, float3 low, float3 high); 94146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hinesextern float4 __attribute__((overloadable)) clamp(float4 amount, float4 low, float4 high); 95146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hinesextern float2 __attribute__((overloadable)) clamp(float2 amount, float low, float high); 96146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hinesextern float3 __attribute__((overloadable)) clamp(float3 amount, float low, float high); 97146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hinesextern float4 __attribute__((overloadable)) clamp(float4 amount, float low, float high); 98146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hines 99f7f9316f4cf373733285f947bea876ead7216715Verena Beckham#endif // !defined(ARCH_X86_HAVE_SSSE3) || defined(RS_DEBUG_RUNTIME) || defined(RS_G_RUNTIME) 100146e138f5c6eb4980ee6d85d33b951b87b6e8efeStephen Hines 1012173a9968276b2b91b7ed3d0a76d9e642710843bPirama Arumuga Nainar_CLAMP(half); 1025a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines_CLAMP(double); 1035a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines_CLAMP(char); 1045a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines_CLAMP(uchar); 1055a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines_CLAMP(short); 1065a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines_CLAMP(ushort); 1075a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines_CLAMP(int); 1085a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines_CLAMP(uint); 1095a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines_CLAMP(long); 1105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines_CLAMP(ulong); 1115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines#undef _CLAMP 1135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/* 1155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * FMAX 1165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 1175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float __attribute__((overloadable)) fmax(float v1, float v2) { 1195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 > v2 ? v1 : v2; 1205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1225a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float2 __attribute__((overloadable)) fmax(float2 v1, float2 v2) { 1235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float2 r; 1245a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 1255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 1265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 1275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) fmax(float3 v1, float3 v2) { 1305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float3 r; 1315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 1325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 1335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 1345a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 1355a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1365a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1375a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) fmax(float4 v1, float4 v2) { 1385a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float4 r; 1395a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 1405a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 1415a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 1425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w > v2.w ? v1.w : v2.w; 1435a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 1445a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1455a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1465a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float2 __attribute__((overloadable)) fmax(float2 v1, float v2) { 1475a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float2 r; 1485a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2 ? v1.x : v2; 1495a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2 ? v1.y : v2; 1505a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 1515a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1525a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1535a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) fmax(float3 v1, float v2) { 1545a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float3 r; 1555a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2 ? v1.x : v2; 1565a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2 ? v1.y : v2; 1575a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2 ? v1.z : v2; 1585a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 1595a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1605a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1615a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) fmax(float4 v1, float v2) { 1625a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float4 r; 1635a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2 ? v1.x : v2; 1645a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2 ? v1.y : v2; 1655a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2 ? v1.z : v2; 1665a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w > v2 ? v1.w : v2; 1675a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 1685a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1695a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1705a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float __attribute__((overloadable)) fmin(float v1, float v2) { 1715a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 < v2 ? v1 : v2; 1725a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1735a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1745a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1755a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/* 1765a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * FMIN 1775a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 1785a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float2 __attribute__((overloadable)) fmin(float2 v1, float2 v2) { 1795a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float2 r; 1805a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 1815a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 1825a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 1835a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1845a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1855a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) fmin(float3 v1, float3 v2) { 1865a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float3 r; 1875a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 1885a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 1895a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 1905a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 1915a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1925a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1935a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) fmin(float4 v1, float4 v2) { 1945a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float4 r; 1955a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 1965a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 1975a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 1985a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w < v2.w ? v1.w : v2.w; 1995a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2005a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2015a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2025a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float2 __attribute__((overloadable)) fmin(float2 v1, float v2) { 2035a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float2 r; 2045a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2 ? v1.x : v2; 2055a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2 ? v1.y : v2; 2065a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2075a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2085a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2095a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) fmin(float3 v1, float v2) { 2105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float3 r; 2115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2 ? v1.x : v2; 2125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2 ? v1.y : v2; 2135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2 ? v1.z : v2; 2145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) fmin(float4 v1, float v2) { 2185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float4 r; 2195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2 ? v1.x : v2; 2205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2 ? v1.y : v2; 2215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2 ? v1.z : v2; 2225a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w < v2 ? v1.w : v2; 2235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2245a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/* 2285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * MAX 2295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 2305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern char __attribute__((overloadable)) max(char v1, char v2) { 2325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 > v2 ? v1 : v2; 2335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2345a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2355a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern char2 __attribute__((overloadable)) max(char2 v1, char2 v2) { 2365a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines char2 r; 2375a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 2385a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 2395a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2405a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2415a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern char3 __attribute__((overloadable)) max(char3 v1, char3 v2) { 2435a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines char3 r; 2445a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 2455a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 2465a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 2475a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2485a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2495a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2505a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern char4 __attribute__((overloadable)) max(char4 v1, char4 v2) { 2515a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines char4 r; 2525a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 2535a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 2545a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 2555a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w > v2.w ? v1.w : v2.w; 2565a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2575a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2585a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2595a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern short __attribute__((overloadable)) max(short v1, short v2) { 2605a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 > v2 ? v1 : v2; 2615a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2625a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2635a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern short2 __attribute__((overloadable)) max(short2 v1, short2 v2) { 2645a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines short2 r; 2655a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 2665a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 2675a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2685a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2695a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2705a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern short3 __attribute__((overloadable)) max(short3 v1, short3 v2) { 2715a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines short3 r; 2725a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 2735a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 2745a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 2755a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2765a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2775a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2785a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern short4 __attribute__((overloadable)) max(short4 v1, short4 v2) { 2795a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines short4 r; 2805a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 2815a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 2825a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 2835a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w > v2.w ? v1.w : v2.w; 2845a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2855a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2865a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2875a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern int __attribute__((overloadable)) max(int v1, int v2) { 2885a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 > v2 ? v1 : v2; 2895a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2905a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2915a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern int2 __attribute__((overloadable)) max(int2 v1, int2 v2) { 2925a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines int2 r; 2935a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 2945a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 2955a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 2965a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2975a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2985a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern int3 __attribute__((overloadable)) max(int3 v1, int3 v2) { 2995a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines int3 r; 3005a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3015a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3025a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 3035a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3045a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3055a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3065a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern int4 __attribute__((overloadable)) max(int4 v1, int4 v2) { 3075a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines int4 r; 3085a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3095a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 3115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w > v2.w ? v1.w : v2.w; 3125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar __attribute__((overloadable)) max(uchar v1, uchar v2) { 3165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 > v2 ? v1 : v2; 3175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar2 __attribute__((overloadable)) max(uchar2 v1, uchar2 v2) { 3205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uchar2 r; 3215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3225a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3245a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar3 __attribute__((overloadable)) max(uchar3 v1, uchar3 v2) { 3275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uchar3 r; 3285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 3315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3345a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar4 __attribute__((overloadable)) max(uchar4 v1, uchar4 v2) { 3355a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uchar4 r; 3365a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3375a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3385a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 3395a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w > v2.w ? v1.w : v2.w; 3405a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3415a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3435a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern ushort __attribute__((overloadable)) max(ushort v1, ushort v2) { 3445a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 > v2 ? v1 : v2; 3455a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3465a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3475a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern ushort2 __attribute__((overloadable)) max(ushort2 v1, ushort2 v2) { 3485a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ushort2 r; 3495a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3505a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3515a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3525a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3535a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3545a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern ushort3 __attribute__((overloadable)) max(ushort3 v1, ushort3 v2) { 3555a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ushort3 r; 3565a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3575a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3585a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 3595a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3605a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3615a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3625a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern ushort4 __attribute__((overloadable)) max(ushort4 v1, ushort4 v2) { 3635a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ushort4 r; 3645a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3655a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3665a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 3675a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w > v2.w ? v1.w : v2.w; 3685a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3695a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3705a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3715a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint __attribute__((overloadable)) max(uint v1, uint v2) { 3725a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 > v2 ? v1 : v2; 3735a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3745a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3755a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint2 __attribute__((overloadable)) max(uint2 v1, uint2 v2) { 3765a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uint2 r; 3775a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3785a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3795a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3805a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3815a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3825a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint3 __attribute__((overloadable)) max(uint3 v1, uint3 v2) { 3835a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uint3 r; 3845a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3855a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3865a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 3875a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3885a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3895a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3905a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint4 __attribute__((overloadable)) max(uint4 v1, uint4 v2) { 3915a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uint4 r; 3925a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x > v2.x ? v1.x : v2.x; 3935a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y > v2.y ? v1.y : v2.y; 3945a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z > v2.z ? v1.z : v2.z; 3955a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w > v2.w ? v1.w : v2.w; 3965a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 3975a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3985a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3995a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float __attribute__((overloadable)) max(float v1, float v2) { 4005a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmax(v1, v2); 4015a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4025a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4035a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float2 __attribute__((overloadable)) max(float2 v1, float2 v2) { 4045a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmax(v1, v2); 4055a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4065a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4075a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float2 __attribute__((overloadable)) max(float2 v1, float v2) { 4085a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmax(v1, v2); 4095a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) max(float3 v1, float3 v2) { 4125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmax(v1, v2); 4135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) max(float3 v1, float v2) { 4165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmax(v1, v2); 4175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) max(float4 v1, float4 v2) { 4205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmax(v1, v2); 4215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4225a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) max(float4 v1, float v2) { 4245a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmax(v1, v2); 4255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/* 4295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * MIN 4305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 4315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern int8_t __attribute__((overloadable)) min(int8_t v1, int8_t v2) { 4335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 < v2 ? v1 : v2; 4345a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4355a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4365a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern char2 __attribute__((overloadable)) min(char2 v1, char2 v2) { 4375a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines char2 r; 4385a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 4395a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 4405a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 4415a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4435a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern char3 __attribute__((overloadable)) min(char3 v1, char3 v2) { 4445a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines char3 r; 4455a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 4465a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 4475a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 4485a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 4495a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4505a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4515a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern char4 __attribute__((overloadable)) min(char4 v1, char4 v2) { 4525a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines char4 r; 4535a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 4545a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 4555a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 4565a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w < v2.w ? v1.w : v2.w; 4575a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 4585a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4595a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4605a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern int16_t __attribute__((overloadable)) min(int16_t v1, int16_t v2) { 4615a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 < v2 ? v1 : v2; 4625a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4635a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4645a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern short2 __attribute__((overloadable)) min(short2 v1, short2 v2) { 4655a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines short2 r; 4665a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 4675a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 4685a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 4695a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4705a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4715a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern short3 __attribute__((overloadable)) min(short3 v1, short3 v2) { 4725a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines short3 r; 4735a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 4745a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 4755a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 4765a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 4775a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4785a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4795a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern short4 __attribute__((overloadable)) min(short4 v1, short4 v2) { 4805a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines short4 r; 4815a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 4825a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 4835a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 4845a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w < v2.w ? v1.w : v2.w; 4855a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 4865a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4875a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4885a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern int32_t __attribute__((overloadable)) min(int32_t v1, int32_t v2) { 4895a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 < v2 ? v1 : v2; 4905a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4915a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4925a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern int2 __attribute__((overloadable)) min(int2 v1, int2 v2) { 4935a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines int2 r; 4945a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 4955a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 4965a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 4975a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 4985a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 4995a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern int3 __attribute__((overloadable)) min(int3 v1, int3 v2) { 5005a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines int3 r; 5015a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5025a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5035a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 5045a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5055a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5065a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5075a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern int4 __attribute__((overloadable)) min(int4 v1, int4 v2) { 5085a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines int4 r; 5095a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 5125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w < v2.w ? v1.w : v2.w; 5135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar __attribute__((overloadable)) min(uchar v1, uchar v2) { 5175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 < v2 ? v1 : v2; 5185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar2 __attribute__((overloadable)) min(uchar2 v1, uchar2 v2) { 5215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uchar2 r; 5225a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5245a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar3 __attribute__((overloadable)) min(uchar3 v1, uchar3 v2) { 5285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uchar3 r; 5295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 5325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5345a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5355a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar4 __attribute__((overloadable)) min(uchar4 v1, uchar4 v2) { 5365a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uchar4 r; 5375a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5385a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5395a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 5405a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w < v2.w ? v1.w : v2.w; 5415a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5435a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5445a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern ushort __attribute__((overloadable)) min(ushort v1, ushort v2) { 5455a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 < v2 ? v1 : v2; 5465a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5475a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5485a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern ushort2 __attribute__((overloadable)) min(ushort2 v1, ushort2 v2) { 5495a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ushort2 r; 5505a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5515a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5525a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5535a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5545a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5555a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern ushort3 __attribute__((overloadable)) min(ushort3 v1, ushort3 v2) { 5565a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ushort3 r; 5575a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5585a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5595a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 5605a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5615a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5625a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5635a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern ushort4 __attribute__((overloadable)) min(ushort4 v1, ushort4 v2) { 5645a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ushort4 r; 5655a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5665a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5675a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 5685a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w < v2.w ? v1.w : v2.w; 5695a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5705a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5715a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5725a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint __attribute__((overloadable)) min(uint v1, uint v2) { 5735a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return v1 < v2 ? v1 : v2; 5745a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5755a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5765a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint2 __attribute__((overloadable)) min(uint2 v1, uint2 v2) { 5775a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uint2 r; 5785a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5795a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5805a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5815a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5825a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5835a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint3 __attribute__((overloadable)) min(uint3 v1, uint3 v2) { 5845a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uint3 r; 5855a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5865a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5875a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 5885a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5895a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5905a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 5915a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint4 __attribute__((overloadable)) min(uint4 v1, uint4 v2) { 5925a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uint4 r; 5935a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = v1.x < v2.x ? v1.x : v2.x; 5945a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = v1.y < v2.y ? v1.y : v2.y; 5955a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = v1.z < v2.z ? v1.z : v2.z; 5965a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = v1.w < v2.w ? v1.w : v2.w; 5975a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 5985a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 5995a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6005a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float __attribute__((overloadable)) min(float v1, float v2) { 6015a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmin(v1, v2); 6025a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6035a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6045a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float2 __attribute__((overloadable)) min(float2 v1, float2 v2) { 6055a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmin(v1, v2); 6065a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6075a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6085a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float2 __attribute__((overloadable)) min(float2 v1, float v2) { 6095a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmin(v1, v2); 6105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) min(float3 v1, float3 v2) { 6135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmin(v1, v2); 6145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) min(float3 v1, float v2) { 6175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmin(v1, v2); 6185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) min(float4 v1, float4 v2) { 6215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmin(v1, v2); 6225a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6245a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) min(float4 v1, float v2) { 6255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return fmin(v1, v2); 6265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/* 6295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * YUV 6305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 6315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar4 __attribute__((overloadable)) rsYuvToRGBA_uchar4(uchar y, uchar u, uchar v) { 6335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines short Y = ((short)y) - 16; 6345a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines short U = ((short)u) - 128; 6355a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines short V = ((short)v) - 128; 6365a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6375a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines short4 p; 6385a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines p.r = (Y * 298 + V * 409 + 128) >> 8; 6395a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines p.g = (Y * 298 - U * 100 - V * 208 + 128) >> 8; 6405a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines p.b = (Y * 298 + U * 516 + 128) >> 8; 6415a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines p.a = 255; 6425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines p.r = rsClamp(p.r, (short)0, (short)255); 6435a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines p.g = rsClamp(p.g, (short)0, (short)255); 6445a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines p.b = rsClamp(p.b, (short)0, (short)255); 6455a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6465a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return convert_uchar4(p); 6475a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6485a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6495a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/* 6505a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * half_RECIP 6515a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 6525a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6535a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float2 __attribute__((overloadable)) half_recip(float2 v) { 654ba92a7085bbb8916334a6571ff33355873883173Jason Sams return ((float2) 1.f) / v; 6555a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6565a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6575a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) half_recip(float3 v) { 658ba92a7085bbb8916334a6571ff33355873883173Jason Sams return ((float3) 1.f) / v; 6595a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6605a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6615a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) half_recip(float4 v) { 662ba92a7085bbb8916334a6571ff33355873883173Jason Sams return ((float4) 1.f) / v; 6635a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6645a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6655a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6665a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6675a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/* 6685a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * half_rsqrt 6695a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 6705a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6715a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float __attribute__((overloadable)) half_rsqrt(float v) { 6725a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return 1.f / sqrt(v); 6735a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6745a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6755a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float2 __attribute__((overloadable)) half_rsqrt(float2 v) { 6765a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float2 r; 6775a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = half_rsqrt(v.x); 6785a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = half_rsqrt(v.y); 6795a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 6805a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6815a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6825a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) half_rsqrt(float3 v) { 6835a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float3 r; 6845a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = half_rsqrt(v.x); 6855a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = half_rsqrt(v.y); 6865a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = half_rsqrt(v.z); 6875a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 6885a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6895a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6905a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) half_rsqrt(float4 v) { 6915a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float4 r; 6925a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.x = half_rsqrt(v.x); 6935a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.y = half_rsqrt(v.y); 6945a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.z = half_rsqrt(v.z); 6955a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines r.w = half_rsqrt(v.w); 6965a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return r; 6975a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 6985a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 6995a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/** 7005a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * matrix ops 7015a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 7025a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 7035a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) 7045a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesrsMatrixMultiply(const rs_matrix4x4 *m, float4 in) { 7055a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float4 ret; 7065a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.x = (m->m[0] * in.x) + (m->m[4] * in.y) + (m->m[8] * in.z) + (m->m[12] * in.w); 7075a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.y = (m->m[1] * in.x) + (m->m[5] * in.y) + (m->m[9] * in.z) + (m->m[13] * in.w); 7085a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.z = (m->m[2] * in.x) + (m->m[6] * in.y) + (m->m[10] * in.z) + (m->m[14] * in.w); 7095a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.w = (m->m[3] * in.x) + (m->m[7] * in.y) + (m->m[11] * in.z) + (m->m[15] * in.w); 7105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return ret; 7115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 7125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 7135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) 7145a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesrsMatrixMultiply(const rs_matrix4x4 *m, float3 in) { 7155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float4 ret; 7165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.x = (m->m[0] * in.x) + (m->m[4] * in.y) + (m->m[8] * in.z) + m->m[12]; 7175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.y = (m->m[1] * in.x) + (m->m[5] * in.y) + (m->m[9] * in.z) + m->m[13]; 7185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.z = (m->m[2] * in.x) + (m->m[6] * in.y) + (m->m[10] * in.z) + m->m[14]; 7195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.w = (m->m[3] * in.x) + (m->m[7] * in.y) + (m->m[11] * in.z) + m->m[15]; 7205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return ret; 7215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 7225a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 7235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float4 __attribute__((overloadable)) 7245a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesrsMatrixMultiply(const rs_matrix4x4 *m, float2 in) { 7255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float4 ret; 7265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.x = (m->m[0] * in.x) + (m->m[4] * in.y) + m->m[12]; 7275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.y = (m->m[1] * in.x) + (m->m[5] * in.y) + m->m[13]; 7285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.z = (m->m[2] * in.x) + (m->m[6] * in.y) + m->m[14]; 7295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.w = (m->m[3] * in.x) + (m->m[7] * in.y) + m->m[15]; 7305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return ret; 7315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 7325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 7335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) 7345a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesrsMatrixMultiply(const rs_matrix3x3 *m, float3 in) { 7355a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float3 ret; 7365a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.x = (m->m[0] * in.x) + (m->m[3] * in.y) + (m->m[6] * in.z); 7375a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.y = (m->m[1] * in.x) + (m->m[4] * in.y) + (m->m[7] * in.z); 7385a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.z = (m->m[2] * in.x) + (m->m[5] * in.y) + (m->m[8] * in.z); 7395a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return ret; 7405a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 7415a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 7425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern float3 __attribute__((overloadable)) 7435a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesrsMatrixMultiply(const rs_matrix3x3 *m, float2 in) { 7445a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines float3 ret; 7455a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.x = (m->m[0] * in.x) + (m->m[3] * in.y); 7465a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.y = (m->m[1] * in.x) + (m->m[4] * in.y); 7475a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines ret.z = (m->m[2] * in.x) + (m->m[5] * in.y); 7485a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return ret; 7495a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 7505a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 7515a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines/** 7525a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines * Pixel Ops 7535a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines */ 7545a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b) 7555a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines{ 7565a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uchar4 c; 7575a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines c.x = (uchar)clamp((r * 255.f + 0.5f), 0.f, 255.f); 7585a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines c.y = (uchar)clamp((g * 255.f + 0.5f), 0.f, 255.f); 7595a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines c.z = (uchar)clamp((b * 255.f + 0.5f), 0.f, 255.f); 7605a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines c.w = 255; 7615a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return c; 7625a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 7635a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 7645a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b, float a) 7655a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines{ 7665a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uchar4 c; 7675a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines c.x = (uchar)clamp((r * 255.f + 0.5f), 0.f, 255.f); 7685a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines c.y = (uchar)clamp((g * 255.f + 0.5f), 0.f, 255.f); 7695a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines c.z = (uchar)clamp((b * 255.f + 0.5f), 0.f, 255.f); 7705a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines c.w = (uchar)clamp((a * 255.f + 0.5f), 0.f, 255.f); 7715a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return c; 7725a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 7735a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 7745a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar4 __attribute__((overloadable)) rsPackColorTo8888(float3 color) 7755a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines{ 7765a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines color *= 255.f; 7775a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines color += 0.5f; 7785a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines color = clamp(color, 0.f, 255.f); 7795a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uchar4 c = {color.x, color.y, color.z, 255}; 7805a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return c; 7815a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 7825a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 7835a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uchar4 __attribute__((overloadable)) rsPackColorTo8888(float4 color) 7845a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines{ 7855a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines color *= 255.f; 7865a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines color += 0.5f; 7875a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines color = clamp(color, 0.f, 255.f); 7885a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines uchar4 c = {color.x, color.y, color.z, color.w}; 7895a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return c; 7905a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 791