rs_math.rsh revision 9df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0
19df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** @file rs_math.rsh 29df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \brief todo-jsams 39df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 49df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * todo-jsams 59df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 69df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 7c4cdf4586a0210a0e4b7b9bf38e8973b31d17ea1Jason Sams#ifndef __RS_MATH_RSH__ 8c4cdf4586a0210a0e4b7b9bf38e8973b31d17ea1Jason Sams#define __RS_MATH_RSH__ 9c4cdf4586a0210a0e4b7b9bf38e8973b31d17ea1Jason Sams 109df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams 119df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams 1209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 139df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 15c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 16c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_element *dst, rs_element src); 179df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 189df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 199df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 20c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 21c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_type *dst, rs_type src); 229df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 239df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 249df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 25c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 26c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_allocation *dst, rs_allocation src); 279df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 289df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 299df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 30c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 31c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_sampler *dst, rs_sampler src); 329df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 339df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 349df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 35c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 36c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_script *dst, rs_script src); 379df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 389df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 399df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 40c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 41c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_mesh *dst, rs_mesh src); 429df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 439df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Copy reference to the specified object. 449df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 459df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param dst 469df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param src 479df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 48c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 49c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_program_fragment *dst, rs_program_fragment src); 509df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 519df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 529df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 53c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 54c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_program_vertex *dst, rs_program_vertex src); 559df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 569df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 579df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 58c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 59c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_program_raster *dst, rs_program_raster src); 609df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 619df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 629df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 63c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 64c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_program_store *dst, rs_program_store src); 659df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 669df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 679df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 68c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 69c093685672e54657d87b953d44e514803889486cJason Sams rsSetObject(rs_font *dst, rs_font src); 70c093685672e54657d87b953d44e514803889486cJason Sams 7109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 7209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Sets the object to NULL. 7309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 7409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return bool 7509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 76c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 77c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_element *dst); 789df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 799df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 809df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 81c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 82c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_type *dst); 839df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 849df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 859df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 86c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 87c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_allocation *dst); 889df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 899df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 909df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 91c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 92c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_sampler *dst); 939df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 949df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 959df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 96c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 97c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_script *dst); 989df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 999df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1009df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 101c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 102c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_mesh *dst); 1039df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1049df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1059df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 106c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 107c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_program_fragment *dst); 1089df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1099df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1109df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 111c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 112c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_program_vertex *dst); 1139df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1149df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1159df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 116c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 117c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_program_raster *dst); 1189df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1199df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1209df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 121c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 122c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_program_store *dst); 1239df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1249df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1259df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 126c093685672e54657d87b953d44e514803889486cJason Samsextern void __attribute__((overloadable)) 127c093685672e54657d87b953d44e514803889486cJason Sams rsClearObject(rs_font *dst); 128c093685672e54657d87b953d44e514803889486cJason Sams 12909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 1309df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 13109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 132c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 133c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_element); 1349df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1359df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1369df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 137c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 138c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_type); 1399df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1409df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1419df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 142c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 143c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_allocation); 1449df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1459df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Tests if the object is valid. Returns true if the object is valid, false if 1469df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * it is NULL. 1479df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 1489df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @return bool 1499df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 1509df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams 151c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 152c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_sampler); 1539df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1549df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1559df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 156c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 157c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_script); 1589df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1599df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1609df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 161c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 162c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_mesh); 1639df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1649df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1659df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 166c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 167c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_program_fragment); 1689df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1699df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1709df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 171c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 172c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_program_vertex); 1739df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1749df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1759df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 176c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 177c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_program_raster); 1789df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1799df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1809df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 181c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 182c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_program_store); 1839df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 1849df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 1859df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 186c093685672e54657d87b953d44e514803889486cJason Samsextern bool __attribute__((overloadable)) 187c093685672e54657d87b953d44e514803889486cJason Sams rsIsObject(rs_font); 188c093685672e54657d87b953d44e514803889486cJason Sams 189c093685672e54657d87b953d44e514803889486cJason Sams 19009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 19109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Returns the Allocation for a given pointer. The pointer should point within 19209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * a valid allocation. The results are undefined if the pointer is not from a 19309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * valid allocation. 19409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 195ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsextern rs_allocation __attribute__((overloadable)) 196ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams rsGetAllocation(const void *); 1977349547db61d2d458b31c074b902d56d082e5d84Jason Sams 19809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 19909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Query the dimension of an allocation. 20009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 20109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint32_t The X dimension of the allocation. 20209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 203ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsextern uint32_t __attribute__((overloadable)) 204ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams rsAllocationGetDimX(rs_allocation); 20509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 20609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 20709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Query the dimension of an allocation. 20809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 20909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint32_t The Y dimension of the allocation. 21009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 211ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsextern uint32_t __attribute__((overloadable)) 212ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams rsAllocationGetDimY(rs_allocation); 21309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 21409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 21509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Query the dimension of an allocation. 21609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 21709aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint32_t The Z dimension of the allocation. 21809aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 219ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsextern uint32_t __attribute__((overloadable)) 220ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams rsAllocationGetDimZ(rs_allocation); 22109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 22209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 22309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Query an allocation for the presence of more than one LOD. 22409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 22509aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint32_t Returns 1 if more than one LOD is present, 0 otherwise. 22609aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 227ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsextern uint32_t __attribute__((overloadable)) 228ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams rsAllocationGetDimLOD(rs_allocation); 22909aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams 23009aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams/** 23109aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * Query an allocation for the presence of more than one face. 23209aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * 23309aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams * @return uint32_t Returns 1 if more than one face is present, 0 otherwise. 23409aeb8ac1b0b976c2de40dd00da0c6841e4e882aJason Sams */ 235ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Samsextern uint32_t __attribute__((overloadable)) 236ef5867a6785807f90cfe8af26da4b964ee8ebee4Jason Sams rsAllocationGetDimFaces(rs_allocation); 23722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 23874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk/** 23974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * Copy part of an allocation from another allocation. 24074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * 24174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param dstAlloc Allocation to copy data into. 24274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param dstOff The offset of the first element to be copied in 24374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * the destination allocation. 24474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param dstMip Mip level in the destination allocation. 24574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param count The number of elements to be copied. 24674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param srcAlloc The source data allocation. 24774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param srcOff The offset of the first element in data to be 24874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * copied in the source allocation. 24974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param srcMip Mip level in the source allocation. 25074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk */ 25174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukextern void __attribute__((overloadable)) 25274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rsAllocationCopy1DRange(rs_allocation dstAlloc, 25374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstOff, uint32_t dstMip, 25474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t count, 25574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rs_allocation srcAlloc, 25674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcOff, uint32_t srcMip); 25774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 25874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk/** 25974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * Copy a rectangular region into the allocation from another 26074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * allocation. 26174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * 26274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param dstAlloc allocation to copy data into. 26374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param dstXoff X offset of the region to update in the 26474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * destination allocation. 26574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param dstYoff Y offset of the region to update in the 26674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * destination allocation. 26774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param dstMip Mip level in the destination allocation. 26874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param dstFace Cubemap face of the destination allocation, 26974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * ignored for allocations that aren't cubemaps. 27074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param width Width of the incoming region to update. 27174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param height Height of the incoming region to update. 27274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param srcAlloc The source data allocation. 27374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param srcXoff X offset in data of the source allocation. 27474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param srcYoff Y offset in data of the source allocation. 27574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param srcMip Mip level in the source allocation. 27674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * @param srcFace Cubemap face of the source allocation, 27774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk * ignored for allocations that aren't cubemaps. 27874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk */ 27974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukextern void __attribute__((overloadable)) 28074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rsAllocationCopy2DRange(rs_allocation dstAlloc, 28174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstXoff, uint32_t dstYoff, 28274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t dstMip, 28374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rs_allocation_cubemap_face dstFace, 28474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t width, uint32_t height, 28574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rs_allocation srcAlloc, 28674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcXoff, uint32_t srcYoff, 28774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk uint32_t srcMip, 28874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk rs_allocation_cubemap_face srcFace); 28974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk 2909df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams 2919df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 2929df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Extract a single element from an allocation. 2939df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 2947bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Samsextern const void * __attribute__((overloadable)) 2957bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams rsGetElementAt(rs_allocation, uint32_t x); 2969df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 2979df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 2989df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 2997bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Samsextern const void * __attribute__((overloadable)) 3007bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams rsGetElementAt(rs_allocation, uint32_t x, uint32_t y); 3019df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3029df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 3039df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 3047bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Samsextern const void * __attribute__((overloadable)) 3057bf29ddc35450d8064541c42c99a1f48be6cf0ddJason Sams rsGetElementAt(rs_allocation, uint32_t x, uint32_t y, uint32_t z); 30622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 3079df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3089df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Return a random value between 0 (or min_value) and max_malue. 3099df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 3107349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern int __attribute__((overloadable)) 3117349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsRand(int max_value); 3129df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3139df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 3149df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 3157349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern int __attribute__((overloadable)) 3167349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsRand(int min_value, int max_value); 3179df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3189df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 3199df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 3207349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern float __attribute__((overloadable)) 3217349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsRand(float max_value); 3229df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3239df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 3249df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 3257349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern float __attribute__((overloadable)) 3267349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsRand(float min_value, float max_value); 3277349547db61d2d458b31c074b902d56d082e5d84Jason Sams 3289df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3299df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Returns the fractional part of a float 3309df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 3317349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern float __attribute__((overloadable)) 3327349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsFrac(float); 33322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 3349df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3359df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Send a message back to the client. Will not block and returns true 3369df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * if the message was sendable and false if the fifo was full. 3379df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * A message ID is required. Data payload is optional. 3389df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 3397349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern bool __attribute__((overloadable)) 3407349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsSendToClient(int cmdID); 3419df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3429df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 3439df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 3447349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern bool __attribute__((overloadable)) 3457349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsSendToClient(int cmdID, const void *data, uint len); 3469df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3479df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Send a message back to the client, blocking until the message is queued. 3489df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * A message ID is required. Data payload is optional. 3499df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 3507349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3517349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsSendToClientBlocking(int cmdID); 3529df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3539df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 3549df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 3557349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 3567349547db61d2d458b31c074b902d56d082e5d84Jason Sams rsSendToClientBlocking(int cmdID, const void *data, uint len); 35722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 358dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams 3599df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3609df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Launch order hint for rsForEach calls. This provides a hint to the system to 3619df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * determine in which order the root function of the target is called with each 3629df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * cell of the allocation. 3639df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 3649df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * This is a hint and implementations may not obey the order. 3659df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 366dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Samsenum rs_for_each_strategy { 367dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams RS_FOR_EACH_STRATEGY_SERIAL, 368dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams RS_FOR_EACH_STRATEGY_DONT_CARE, 369dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams RS_FOR_EACH_STRATEGY_DST_LINEAR, 370dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams RS_FOR_EACH_STRATEGY_TILE_SMALL, 371dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams RS_FOR_EACH_STRATEGY_TILE_MEDIUM, 372dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams RS_FOR_EACH_STRATEGY_TILE_LARGE 373dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams}; 374dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams 3759df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams 3769df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3779df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Structure to provide extra information to a rsForEach call. Primarly used to 3789df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * restrict the call to a subset of cells in the allocation. 3799df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 380ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Samstypedef struct rs_script_call { 381dd663fa8367bfacb6c77b368f91adf614cd0bebaJason Sams enum rs_for_each_strategy strategy; 382479e2924807e1fff79de2e0bee2a67939d8659eeJason Sams uint32_t xStart; 383479e2924807e1fff79de2e0bee2a67939d8659eeJason Sams uint32_t xEnd; 384479e2924807e1fff79de2e0bee2a67939d8659eeJason Sams uint32_t yStart; 385479e2924807e1fff79de2e0bee2a67939d8659eeJason Sams uint32_t yEnd; 386479e2924807e1fff79de2e0bee2a67939d8659eeJason Sams uint32_t zStart; 387479e2924807e1fff79de2e0bee2a67939d8659eeJason Sams uint32_t zEnd; 388479e2924807e1fff79de2e0bee2a67939d8659eeJason Sams uint32_t arrayStart; 389479e2924807e1fff79de2e0bee2a67939d8659eeJason Sams uint32_t arrayEnd; 390ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams} rs_script_call_t; 391ace3e01f07252ee0fa47fcf1ac48864d8220b90eJason Sams 3929df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 3939df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Make a script to script call to launch work. One of the input or output is 3949df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * required to be a valid object. The input and output must be of the same 3959df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * dimensions. 3969df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * API 10-13 3979df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 3989df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param script The target script to call 3999df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param input The allocation to source data from 4009df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param output the allocation to write date into 4019df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param usrData The user definied params to pass to the root script. May be 4029df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * NULL. 4039df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param sc Extra control infomation used to select a sub-region of the 4049df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * allocation to be processed or suggest a walking strategy. May be 4059df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * NULL. 4069df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 4079df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * */ 408eb0dfedaf861049858a365d56d67cc85bfcad3c3Jason Sams#if !defined(RS_VERSION) || (RS_VERSION < 14) 409eb0dfedaf861049858a365d56d67cc85bfcad3c3Jason Samsextern void __attribute__((overloadable)) 4109df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams rsForEach(rs_script script script, rs_allocation input, 411eb0dfedaf861049858a365d56d67cc85bfcad3c3Jason Sams rs_allocation output, const void * usrData, 4129df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams const rs_script_call_t *sc); 4139df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 4149df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 4159df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 416eb0dfedaf861049858a365d56d67cc85bfcad3c3Jason Samsextern void __attribute__((overloadable)) 417eb0dfedaf861049858a365d56d67cc85bfcad3c3Jason Sams rsForEach(rs_script script, rs_allocation input, 418eb0dfedaf861049858a365d56d67cc85bfcad3c3Jason Sams rs_allocation output, const void * usrData); 419eb0dfedaf861049858a365d56d67cc85bfcad3c3Jason Sams#else 420c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams 4219df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 4229df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * Make a script to script call to launch work. One of the input or output is 4239df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * required to be a valid object. The input and output must be of the same 4249df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * dimensions. 4259df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * API 14+ 4269df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 4279df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param script The target script to call 4289df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param input The allocation to source data from 4299df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param output the allocation to write date into 4309df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param usrData The user definied params to pass to the root script. May be 4319df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * NULL. 4329df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param usrDataLen The size of the userData structure. This will be used to 4339df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * perform a shallow copy of the data if necessary. 4349df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * @param sc Extra control infomation used to select a sub-region of the 4359df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * allocation to be processed or suggest a walking strategy. May be 4369df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * NULL. 4379df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * 4389df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 439c500e74d0848b721bf01cf0ab344a6adb035c312Jason Samsextern void __attribute__((overloadable)) 440c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams rsForEach(rs_script script, rs_allocation input, rs_allocation output, 4419df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams const void * usrData, size_t usrDataLen, const rs_script_call_t *); 4429df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 4439df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 4449df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 4457349547db61d2d458b31c074b902d56d082e5d84Jason Samsextern void __attribute__((overloadable)) 446c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams rsForEach(rs_script script, rs_allocation input, rs_allocation output, 4479df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams const void * usrData, size_t usrDataLen); 4489df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams/** 4499df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams * \overload 4509df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams */ 4519df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Samsextern void __attribute__((overloadable)) 4529df3b2b03e6bbe26d5fa7daae49b26fd9f15eaa0Jason Sams rsForEach(rs_script script, rs_allocation input, rs_allocation output); 453c500e74d0848b721bf01cf0ab344a6adb035c312Jason Sams#endif 454c61346b91434307c5003029017b54ce9c49112beJason Sams 455e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 456e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 457e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic add one to the value at addr. 458e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Equal to rsAtomicAdd(addr, 1) 459e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 460e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to increment 461e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 462e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 463e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 464e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern int32_t __attribute__((overloadable)) 465e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicInc(volatile int32_t* addr); 466e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 467e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic add one to the value at addr. 468e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Equal to rsAtomicAdd(addr, 1) 469e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 470e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to increment 471e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 472e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 473e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 474e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern uint32_t __attribute__((overloadable)) 475e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicInc(volatile uint32_t* addr); 476e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 477e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 478e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic subtract one from the value at addr. Equal to rsAtomicSub(addr, 1) 479e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 480e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to decrement 481e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 482e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 483e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 484e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern int32_t __attribute__((overloadable)) 485e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicDec(volatile int32_t* addr); 486e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 487e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic subtract one from the value at addr. Equal to rsAtomicSub(addr, 1) 488e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 489e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to decrement 490e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 491e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 492e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 493e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern uint32_t __attribute__((overloadable)) 494e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicDec(volatile uint32_t* addr); 495e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 496e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 497e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic add a value to the value at addr. addr[0] += value 498e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 499e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 500e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value Amount to add to the value at addr 501e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 502e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 503e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 504e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern int32_t __attribute__((overloadable)) 505e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicAdd(volatile int32_t* addr, int32_t value); 506e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 507e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic add a value to the value at addr. addr[0] += value 508e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 509e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 510e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value Amount to add to the value at addr 511e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 512e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 513e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 514e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern uint32_t __attribute__((overloadable)) 515e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicAdd(volatile uint32_t* addr, uint32_t value); 516e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 517e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 518e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Subtract a value from the value at addr. addr[0] -= value 519e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 520e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 521e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value Amount to subtract from the value at addr 522e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 523e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 524e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 525e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern int32_t __attribute__((overloadable)) 526e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicSub(volatile int32_t* addr, int32_t value); 527e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 528e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Subtract a value from the value at addr. addr[0] -= value 529e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 530e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 531e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value Amount to subtract from the value at addr 532e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 533e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 534e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 535e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern uint32_t __attribute__((overloadable)) 536e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicSub(volatile uint32_t* addr, uint32_t value); 537e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 538e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 539e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Bitwise and a value from the value at addr. addr[0] &= value 540e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 541e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 542e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value Amount to and with the value at addr 543e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 544e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 545e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 546e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern int32_t __attribute__((overloadable)) 547e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicAnd(volatile int32_t* addr, int32_t value); 548e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 549e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Bitwise and a value from the value at addr. addr[0] &= value 550e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 551e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 552e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value Amount to and with the value at addr 553e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 554e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 555e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 556e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern uint32_t __attribute__((overloadable)) 557e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicAnd(volatile uint32_t* addr, uint32_t value); 558e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 559e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 560e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Bitwise or a value from the value at addr. addr[0] |= value 561e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 562e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 563e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value Amount to or with the value at addr 564e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 565e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 566e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 567e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern int32_t __attribute__((overloadable)) 568e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicOr(volatile int32_t* addr, int32_t value); 569e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 570e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Bitwise or a value from the value at addr. addr[0] |= value 571e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 572e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 573e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value Amount to or with the value at addr 574e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 575e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 576e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 577e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern uint32_t __attribute__((overloadable)) 578e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicOr(volatile uint32_t* addr, uint32_t value); 579e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 580e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 581e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Bitwise xor a value from the value at addr. addr[0] ^= value 582e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 583e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 584e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value Amount to xor with the value at addr 585e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 586e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 587e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 588e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern uint32_t __attribute__((overloadable)) 589e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicXor(volatile uint32_t* addr, uint32_t value); 590e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 591e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Bitwise xor a value from the value at addr. addr[0] ^= value 592e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 593e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 594e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value Amount to xor with the value at addr 595e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 596e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 597e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 598e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern int32_t __attribute__((overloadable)) 599e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicXor(volatile int32_t* addr, int32_t value); 600e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 601e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 602e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Set the value at addr to the min of addr and value 603e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * addr[0] = rsMin(addr[0], value) 604e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 605e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 606e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value comparison value 607e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 608e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 609e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 610e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern uint32_t __attribute__((overloadable)) 611e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicMin(volatile uint32_t* addr, uint32_t value); 612e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 613e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Set the value at addr to the min of addr and value 614e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * addr[0] = rsMin(addr[0], value) 615e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 616e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 617e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value comparison value 618e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 619e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 620e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 621e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern int32_t __attribute__((overloadable)) 622e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicMin(volatile int32_t* addr, int32_t value); 623e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 624e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 625e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Set the value at addr to the max of addr and value 626e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * addr[0] = rsMax(addr[0], value) 627e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 628e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 629e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value comparison value 630e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 631e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 632e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 633e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern uint32_t __attribute__((overloadable)) 634e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicMax(volatile uint32_t* addr, uint32_t value); 635e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 636e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Atomic Set the value at addr to the max of addr and value 637e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * addr[0] = rsMin(addr[0], value) 638e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 639e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr Address of value to modify 640e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param value comparison value 641e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 642e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 643e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 644e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern int32_t __attribute__((overloadable)) 645e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicMax(volatile int32_t* addr, int32_t value); 646e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 647e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 648e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Compare-and-set operation with a full memory barrier. 649e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 650e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * If the value at addr matches compareValue then newValue is written. 651e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 652e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr The address to compare and replace if the compare passes. 653e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param compareValue The value to test addr[0] against. 654e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param newValue The value to write if the test passes. 655e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 656e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 657e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 658e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern int32_t __attribute__((overloadable)) 659e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicCas(volatile int32_t* addr, int32_t compareValue, int32_t newValue); 660e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 661e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams/** 662e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * Compare-and-set operation with a full memory barrier. 663e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 664e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * If the value at addr matches compareValue then newValue is written. 665e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 666e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param addr The address to compare and replace if the compare passes. 667e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param compareValue The value to test addr[0] against. 668e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @param newValue The value to write if the test passes. 669e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * 670e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams * @return old value 671e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams */ 672e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Samsextern uint32_t __attribute__((overloadable)) 673e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams rsAtomicCas(volatile uint32_t* addr, int32_t compareValue, int32_t newValue); 674e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 675e1eb6156604d0a4cc4b7e7353aa2fc8dc4d8eadeJason Sams 676c4cdf4586a0210a0e4b7b9bf38e8973b31d17ea1Jason Sams#endif 677