1044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams/* 2044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Copyright (C) 2011 The Android Open Source Project 39df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 4044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * you may not use this file except in compliance with the License. 6044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * You may obtain a copy of the License at 709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 8044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 99df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 10044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Unless required by applicable law or agreed to in writing, software 11044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * See the License for the specific language governing permissions and 14044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * limitations under the License. 159df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 169df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams 17044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams/** @file rs_math.rsh 18044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * \brief todo-jsams 1974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * 20044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * todo-jsams 2174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * 2274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk */ 2374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 24044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#ifndef __RS_MATH_RSH__ 25044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams#define __RS_MATH_RSH__ 269df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams 2722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 289df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 299df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Return a random value between 0 (or min_value) and max_malue. 309df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 317349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern int __attribute__((overloadable)) 327349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsRand(int max_value); 339df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 349df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 359df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 367349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern int __attribute__((overloadable)) 377349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsRand(int min_value, int max_value); 389df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 399df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 409df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 417349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern float __attribute__((overloadable)) 427349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsRand(float max_value); 439df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 449df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 459df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 467349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern float __attribute__((overloadable)) 477349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsRand(float min_value, float max_value); 487349547db61d2d458b31c074b902d56d082e5d84Jason Sams 499df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 509df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Returns the fractional part of a float 519df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 5252132475c338620cab62cff885792ebf0db5419fStephen Hinesextern float __attribute__((const, overloadable)) 537349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsFrac(float); 5422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 5522fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 56044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams///////////////////////////////////////////////////// 57044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams// int ops 58044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams///////////////////////////////////////////////////// 59dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams 609df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 61044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Clamp the value amount between low and high. 629df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 63044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param amount The value to clamp 64044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param low 65044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param high 669df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 6752132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME uint __attribute__((const, overloadable, always_inline)) rsClamp(uint amount, uint low, uint high); 689df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams 699df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 70044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * \overload 719df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 7252132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME int __attribute__((const, overloadable, always_inline)) rsClamp(int amount, int low, int high); 739df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 749df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 759df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 7652132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME ushort __attribute__((const, overloadable, always_inline)) rsClamp(ushort amount, ushort low, ushort high); 779df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 78044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * \overload 799df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 8052132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME short __attribute__((const, overloadable, always_inline)) rsClamp(short amount, short low, short high); 819df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 829df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 839df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 8452132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME uchar __attribute__((const, overloadable, always_inline)) rsClamp(uchar amount, uchar low, uchar high); 859df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 869df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 879df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 8852132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME char __attribute__((const, overloadable, always_inline)) rsClamp(char amount, char low, char high); 89c61346b91434307c5003029017b54ce9c49112beJason Sams 90e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 91e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 92044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Computes 6 frustum planes from the view projection matrix 93044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param viewProj matrix to extract planes from 94044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param left plane 95044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param right plane 96044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param top plane 97044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param bottom plane 98044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param near plane 99044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param far plane 100e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 101044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams__inline__ static void __attribute__((overloadable, always_inline)) 102044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason SamsrsExtractFrustumPlanes(const rs_matrix4x4 *viewProj, 103044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams float4 *left, float4 *right, 104044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams float4 *top, float4 *bottom, 105044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams float4 *near, float4 *far) { 106044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams // x y z w = a b c d in the plane equation 107044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams left->x = viewProj->m[3] + viewProj->m[0]; 108044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams left->y = viewProj->m[7] + viewProj->m[4]; 109044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams left->z = viewProj->m[11] + viewProj->m[8]; 110044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams left->w = viewProj->m[15] + viewProj->m[12]; 111e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 112044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams right->x = viewProj->m[3] - viewProj->m[0]; 113044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams right->y = viewProj->m[7] - viewProj->m[4]; 114044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams right->z = viewProj->m[11] - viewProj->m[8]; 115044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams right->w = viewProj->m[15] - viewProj->m[12]; 116e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 117044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams top->x = viewProj->m[3] - viewProj->m[1]; 118044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams top->y = viewProj->m[7] - viewProj->m[5]; 119044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams top->z = viewProj->m[11] - viewProj->m[9]; 120044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams top->w = viewProj->m[15] - viewProj->m[13]; 121e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 122044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams bottom->x = viewProj->m[3] + viewProj->m[1]; 123044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams bottom->y = viewProj->m[7] + viewProj->m[5]; 124044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams bottom->z = viewProj->m[11] + viewProj->m[9]; 125044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams bottom->w = viewProj->m[15] + viewProj->m[13]; 126e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 127044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams near->x = viewProj->m[3] + viewProj->m[2]; 128044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams near->y = viewProj->m[7] + viewProj->m[6]; 129044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams near->z = viewProj->m[11] + viewProj->m[10]; 130044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams near->w = viewProj->m[15] + viewProj->m[14]; 131e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 132044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams far->x = viewProj->m[3] - viewProj->m[2]; 133044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams far->y = viewProj->m[7] - viewProj->m[6]; 134044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams far->z = viewProj->m[11] - viewProj->m[10]; 135044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams far->w = viewProj->m[15] - viewProj->m[14]; 136e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 137044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams float len = length(left->xyz); 138044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams *left /= len; 139044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams len = length(right->xyz); 140044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams *right /= len; 141044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams len = length(top->xyz); 142044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams *top /= len; 143044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams len = length(bottom->xyz); 144044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams *bottom /= len; 145044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams len = length(near->xyz); 146044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams *near /= len; 147044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams len = length(far->xyz); 148044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams *far /= len; 149044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams} 150e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 151e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 152044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Checks if a sphere is withing the 6 frustum planes 153044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param sphere float4 representing the sphere 154044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param left plane 155044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param right plane 156044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param top plane 157044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param bottom plane 158044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param near plane 159044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param far plane 160e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 161044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams__inline__ static bool __attribute__((overloadable, always_inline)) 162044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason SamsrsIsSphereInFrustum(float4 *sphere, 163044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams float4 *left, float4 *right, 164044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams float4 *top, float4 *bottom, 165044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams float4 *near, float4 *far) { 166044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 167044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams float distToCenter = dot(left->xyz, sphere->xyz) + left->w; 168044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams if (distToCenter < -sphere->w) { 169044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams return false; 170044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams } 171044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams distToCenter = dot(right->xyz, sphere->xyz) + right->w; 172044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams if (distToCenter < -sphere->w) { 173044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams return false; 174044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams } 175044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams distToCenter = dot(top->xyz, sphere->xyz) + top->w; 176044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams if (distToCenter < -sphere->w) { 177044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams return false; 178044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams } 179044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams distToCenter = dot(bottom->xyz, sphere->xyz) + bottom->w; 180044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams if (distToCenter < -sphere->w) { 181044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams return false; 182044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams } 183044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams distToCenter = dot(near->xyz, sphere->xyz) + near->w; 184044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams if (distToCenter < -sphere->w) { 185044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams return false; 186044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams } 187044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams distToCenter = dot(far->xyz, sphere->xyz) + far->w; 188044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams if (distToCenter < -sphere->w) { 189044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams return false; 190044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams } 191044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams return true; 192044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams} 193044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 194044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 195e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 196044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Pack floating point (0-1) RGB values into a uchar4. The alpha component is 197044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * set to 255 (1.0). 198e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 199044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param r 200044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param g 201044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param b 202e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 203044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @return uchar4 204e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 20552132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME uchar4 __attribute__((const, overloadable)) rsPackColorTo8888(float r, float g, float b); 206e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 207e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 208044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Pack floating point (0-1) RGBA values into a uchar4. 209e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 210044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param r 211044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param g 212044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param b 213044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param a 214e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 215044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @return uchar4 216e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 21752132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME uchar4 __attribute__((const, overloadable)) rsPackColorTo8888(float r, float g, float b, float a); 218044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams 219e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 220044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Pack floating point (0-1) RGB values into a uchar4. The alpha component is 221044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * set to 255 (1.0). 222e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 223044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param color 224e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 225044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @return uchar4 226e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 22752132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME uchar4 __attribute__((const, overloadable)) rsPackColorTo8888(float3 color); 228e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 229e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 230044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Pack floating point (0-1) RGBA values into a uchar4. 231e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 232044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param color 233e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 234044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @return uchar4 235e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 23652132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME uchar4 __attribute__((const, overloadable)) rsPackColorTo8888(float4 color); 237e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 238e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 239044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * Unpack a uchar4 color to float4. The resulting float range will be (0-1). 240e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 241044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @param c 242e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 243044e2ee36ffe6520570a7f0207d75a8fce8b8e91Jason Sams * @return float4 244e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 24552132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME float4 __attribute__((const)) rsUnpackColor8888(uchar4 c); 246e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 24752132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME uchar4 __attribute__((const, overloadable)) rsYuvToRGBA_uchar4(uchar y, uchar u, uchar v); 24852132475c338620cab62cff885792ebf0db5419fStephen Hines_RS_RUNTIME float4 __attribute__((const, overloadable)) rsYuvToRGBA_float4(uchar y, uchar u, uchar v); 2494b768a65bda13116ba2646abaf986094f8fe95b8Jason Sams 250e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 251c4cdf4586a0210a0e4b7b9bf38e8973b31d17ea1Jason Sams#endif 252