rs_core.rsh revision 7a43031a3f3e06f0257b507d5f197afaa21e2a3a
1275b1e98bb949643d35546f10f8b1af009349526Jason Sams#ifndef __RS_CORE_RSH__ 2275b1e98bb949643d35546f10f8b1af009349526Jason Sams#define __RS_CORE_RSH__ 3275b1e98bb949643d35546f10f8b1af009349526Jason Sams 47a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao#define _RS_RUNTIME extern 5f6a28c6a71d8929fb90ca83634a617d69531d87dStephen Hines 69bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao// Debugging, print to the LOG a description string and a value. 79bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 89bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, float); 99bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 109bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, float, float); 119bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 129bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, float, float, float); 139bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 149bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, float, float, float, float); 159bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 16df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines rsDebug(const char *, double); 17df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesextern void __attribute__((overloadable)) 189bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, const rs_matrix4x4 *); 199bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 209bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, const rs_matrix3x3 *); 219bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 229bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, const rs_matrix2x2 *); 239bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 249bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, int); 259bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 269bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, uint); 279bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liaoextern void __attribute__((overloadable)) 28df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines rsDebug(const char *, long); 29df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesextern void __attribute__((overloadable)) 30df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines rsDebug(const char *, unsigned long); 31df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesextern void __attribute__((overloadable)) 32df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines rsDebug(const char *, long long); 33df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesextern void __attribute__((overloadable)) 34df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hines rsDebug(const char *, unsigned long long); 35df09719cbeb426a4c8279f2ce226b5874ad7c2c9Stephen Hinesextern void __attribute__((overloadable)) 369bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao rsDebug(const char *, const void *); 379bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao#define RS_DEBUG(a) rsDebug(#a, a) 389bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao#define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__) 399bb32e1fd75e864071f18ef10976e8ba9fc0e252Shih-wei Liao 407a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float2 v); 417a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float3 v); 427a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) rsDebug(const char *s, float4 v); 437a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 447a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b); 457a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 467a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b, float a); 477a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 487a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float3 color); 497a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 507a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uchar4 __attribute__((overloadable)) rsPackColorTo8888(float4 color); 517a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 527a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float4 rsUnpackColor8888(uchar4 c); 53275b1e98bb949643d35546f10f8b1af009349526Jason Sams 542a63bf6c293d89c8e3725cfb7ee2add3dd3f0246Jason Sams//extern uchar4 __attribute__((overloadable)) rsPackColorTo565(float r, float g, float b); 552a63bf6c293d89c8e3725cfb7ee2add3dd3f0246Jason Sams//extern uchar4 __attribute__((overloadable)) rsPackColorTo565(float3); 562a63bf6c293d89c8e3725cfb7ee2add3dd3f0246Jason Sams//extern float4 rsUnpackColor565(uchar4); 572a63bf6c293d89c8e3725cfb7ee2add3dd3f0246Jason Sams 582a63bf6c293d89c8e3725cfb7ee2add3dd3f0246Jason Sams 597fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams///////////////////////////////////////////////////// 607fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams// Matrix ops 617fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams///////////////////////////////////////////////////// 627fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 637a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) 647a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixSet(rs_matrix4x4 *m, uint32_t row, uint32_t col, float v); 657fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 667a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) 677a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixGet(const rs_matrix4x4 *m, uint32_t row, uint32_t col); 687fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 697a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) 707a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixSet(rs_matrix3x3 *m, uint32_t row, uint32_t col, float v); 717fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 727a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) 737a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixGet(const rs_matrix3x3 *m, uint32_t row, uint32_t col); 747fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 757a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME void __attribute__((overloadable)) 767a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixSet(rs_matrix2x2 *m, uint32_t row, uint32_t col, float v); 777fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 787a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float __attribute__((overloadable)) 797a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixGet(const rs_matrix2x2 *m, uint32_t row, uint32_t col); 807fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 81693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix4x4 *m); 82693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix3x3 *m); 83693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoadIdentity(rs_matrix2x2 *m); 84693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const float *v); 85693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const float *v); 86693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const float *v); 87693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix4x4 *v); 88693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix3x3 *v); 89693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix4x4 *m, const rs_matrix2x2 *v); 90693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix3x3 *m, const rs_matrix3x3 *v); 91693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixLoad(rs_matrix2x2 *m, const rs_matrix2x2 *v); 927fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 93693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 94693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); 957fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 96693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 97693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadScale(rs_matrix4x4 *m, float x, float y, float z); 987fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 99693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 100693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadTranslate(rs_matrix4x4 *m, float x, float y, float z); 1017fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 102693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 103693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *lhs, const rs_matrix4x4 *rhs); 1047fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 105693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 106693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixMultiply(rs_matrix4x4 *m, const rs_matrix4x4 *rhs); 1077fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 108693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 109693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *lhs, const rs_matrix3x3 *rhs); 1107fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 111693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 112693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixMultiply(rs_matrix3x3 *m, const rs_matrix3x3 *rhs); 1137fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 114693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 115693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *lhs, const rs_matrix2x2 *rhs); 1167fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 117693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 118693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixMultiply(rs_matrix2x2 *m, const rs_matrix2x2 *rhs); 1197fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 120693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 121693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z); 1227fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 123693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 124693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixScale(rs_matrix4x4 *m, float x, float y, float z); 1257fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 126693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 127693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixTranslate(rs_matrix4x4 *m, float x, float y, float z); 1287fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 129693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 130693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadOrtho(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far); 1317fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 132693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 133693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadFrustum(rs_matrix4x4 *m, float left, float right, float bottom, float top, float near, float far); 1347fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 135693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) 136693080efdafbf49d675fe5f959f0286f83b30c81Jason SamsrsMatrixLoadPerspective(rs_matrix4x4* m, float fovy, float aspect, float near, float far); 137c8dc45cc95cd144038c153f3a4657527d5a7c0b6Alex Sakhartchouk 1387a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) 1397a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix4x4 *m, float4 in); 1407a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 1417a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) 1427a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix4x4 *m, float3 in); 1437a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 1447a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float4 __attribute__((overloadable)) 1457a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix4x4 *m, float2 in); 1467a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 1477a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) 1487a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix3x3 *m, float3 in); 1497a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 1507a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float3 __attribute__((overloadable)) 1517a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix3x3 *m, float2 in); 1527a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao 1537a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME float2 __attribute__((overloadable)) 1547a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei LiaorsMatrixMultiply(rs_matrix2x2 *m, float2 in); 1557fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 15620c6c1febce7cdf398c58287bf506b3a4a210285Alex Sakhartchouk// Returns true if the matrix was successfully inversed 157693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern bool __attribute__((overloadable)) rsMatrixInverse(rs_matrix4x4 *m); 158693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern bool __attribute__((overloadable)) rsMatrixInverseTranspose(rs_matrix4x4 *m); 159693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix4x4 *m); 160693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix3x3 *m); 161693080efdafbf49d675fe5f959f0286f83b30c81Jason Samsextern void __attribute__((overloadable)) rsMatrixTranspose(rs_matrix2x2 *m); 16220c6c1febce7cdf398c58287bf506b3a4a210285Alex Sakhartchouk 16329858059ffff967607f7583ae9146dc4c720f92eAlex Sakhartchouk///////////////////////////////////////////////////// 1647fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams// int ops 1657fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams///////////////////////////////////////////////////// 1667fe6bce13c30b8d14dc833e06468666d28e56ee1Jason Sams 1677a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uint __attribute__((overloadable, always_inline)) rsClamp(uint amount, uint low, uint high); 1687a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME int __attribute__((overloadable, always_inline)) rsClamp(int amount, int low, int high); 1697a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME ushort __attribute__((overloadable, always_inline)) rsClamp(ushort amount, ushort low, ushort high); 1707a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME short __attribute__((overloadable, always_inline)) rsClamp(short amount, short low, short high); 1717a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME uchar __attribute__((overloadable, always_inline)) rsClamp(uchar amount, uchar low, uchar high); 1727a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao_RS_RUNTIME char __attribute__((overloadable, always_inline)) rsClamp(char amount, char low, char high); 173275b1e98bb949643d35546f10f8b1af009349526Jason Sams 1747a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao#undef _RS_RUNTIME 175275b1e98bb949643d35546f10f8b1af009349526Jason Sams 1767a43031a3f3e06f0257b507d5f197afaa21e2a3aShih-wei Liao#endif 177