187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams/* 2709a0978ae141198018ca9769f8d96292a8928e6Jason Sams * Copyright (C) 2011-2012 The Android Open Source Project 387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * 487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * you may not use this file except in compliance with the License. 687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * You may obtain a copy of the License at 787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * 887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * 1087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * Unless required by applicable law or agreed to in writing, software 1187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * See the License for the specific language governing permissions and 1487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams * limitations under the License. 1587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams */ 1687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 1743cfc0cbe6e6e8f585a0ae5f1d9cc2859ab1dda7Stephen Hines#if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB) 1872f4f4cec34098e179ad5d257b07df3a514fcae2Glenn Kasten#include <cutils/compiler.h> 190b575de8ed0b628d84d256f5846500b0385979bdTim Murray#endif 2072f4f4cec34098e179ad5d257b07df3a514fcae2Glenn Kasten 2187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsContext.h" 2287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsScriptC.h" 2387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix4x4.h" 2487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix3x3.h" 2587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams#include "rsMatrix2x2.h" 2687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 27709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "rsCpuCore.h" 28709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "rsCpuScript.h" 2987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 3087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android; 3187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsusing namespace android::renderscript; 3287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 33d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray#define EXPORT_F32_FN_F32(func) \ 34d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray float __attribute__((overloadable)) SC_##func(float v) { \ 35d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray return func(v); \ 36d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray } 37d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray 38d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray#define EXPORT_F32_FN_F32_F32(func) \ 39d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray float __attribute__((overloadable)) SC_##func(float t, float v) { \ 40d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray return func(t, v); \ 41d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray } 4287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 4387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 4487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams// Float util 4587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams////////////////////////////////////////////////////////////////////////////// 4687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 47d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray// Handle missing Gingerbread functions like tgammaf. 48d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murrayfloat SC_tgammaf(float x) { 4911418c87254f0cbffa910fe8f105b7da92452487Stephen Hines#ifdef RS_COMPATIBILITY_LIB 50d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray return tgamma(x); 5111418c87254f0cbffa910fe8f105b7da92452487Stephen Hines#else 5211418c87254f0cbffa910fe8f105b7da92452487Stephen Hines return tgammaf(x); 5311418c87254f0cbffa910fe8f105b7da92452487Stephen Hines#endif 54d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray} 55d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murray 56d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murrayuint32_t SC_abs_i32(int32_t v) {return abs(v);} 5787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 5887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixLoadRotate(Matrix4x4 *m, float rot, float x, float y, float z) { 5987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->loadRotate(rot, x, y, z); 6087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 6187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixLoadScale(Matrix4x4 *m, float x, float y, float z) { 6287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->loadScale(x, y, z); 6387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 6487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixLoadTranslate(Matrix4x4 *m, float x, float y, float z) { 6587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->loadTranslate(x, y, z); 6687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 6787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixRotate(Matrix4x4 *m, float rot, float x, float y, float z) { 6887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->rotate(rot, x, y, z); 6987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 7087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixScale(Matrix4x4 *m, float x, float y, float z) { 7187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->scale(x, y, z); 7287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 7387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixTranslate(Matrix4x4 *m, float x, float y, float z) { 7487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->translate(x, y, z); 7587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 7687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 7787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixLoadOrtho(Matrix4x4 *m, float l, float r, float b, float t, float n, float f) { 7887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->loadOrtho(l, r, b, t, n, f); 7987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 8087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixLoadFrustum(Matrix4x4 *m, float l, float r, float b, float t, float n, float f) { 8187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->loadFrustum(l, r, b, t, n, f); 8287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 8387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixLoadPerspective(Matrix4x4 *m, float fovy, float aspect, float near, float far) { 8487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->loadPerspective(fovy, aspect, near, far); 8587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 8687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 8787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic bool SC_MatrixInverse_4x4(Matrix4x4 *m) { 8887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams return m->inverse(); 8987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 9087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic bool SC_MatrixInverseTranspose_4x4(Matrix4x4 *m) { 9187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams return m->inverseTranspose(); 9287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 9387fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixTranspose_4x4(Matrix4x4 *m) { 9487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->transpose(); 9587fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 9687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixTranspose_3x3(Matrix3x3 *m) { 9787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->transpose(); 9887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 9987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Samsstatic void SC_MatrixTranspose_2x2(Matrix2x2 *m) { 10087fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams m->transpose(); 10187fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 10287fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 103b93cb42b4b8511d244ec8df4559fdc5c0b2de1bfStephen Hinesfloat SC_randf2(float min, float max) { 10487fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams float r = (float)rand(); 105b8fa756a727b7816ed4a6c9f9dbadb548f7fa80fJason Sams r /= RAND_MAX; 10687fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams r = r * (max - min) + min; 107b8fa756a727b7816ed4a6c9f9dbadb548f7fa80fJason Sams return r; 10887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams} 10987fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 110d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(acosf) 111d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(acoshf) 112d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(asinf) 113d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(asinhf) 114d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(atanf) 115d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32_F32(atan2f) 116d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(atanhf) 117d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(cbrtf) 118d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(ceilf) 119d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32_F32(copysignf) 120d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(cosf) 121d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(coshf) 122d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(erfcf) 123d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(erff) 124d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(expf) 125d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(exp2f) 126d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(expm1f) 127d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32_F32(fdimf) 128d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(floorf) 129d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murrayfloat SC_fmaf(float u, float t, float v) {return fmaf(u, t, v);} 130d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32_F32(fmaxf) 131d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32_F32(fminf) 132d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32_F32(fmodf) 133d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murrayfloat SC_frexpf(float v, int* ptr) {return frexpf(v, ptr);} 134d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32_F32(hypotf) 1356fdd0601e45aaf7fd6eaa3ec7db0e981d4f8c5ddPirama Arumuga Nainarint SC_ilogbf(float v) {return ilogbf(v); } 136d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murrayfloat SC_ldexpf(float v, int i) {return ldexpf(v, i);} 137d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(lgammaf) 138d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murrayfloat SC_lgammaf_r(float v, int* ptr) {return lgammaf_r(v, ptr);} 139d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(logf) 140d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(log10f) 141d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(log1pf) 142d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(logbf) 143d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murrayfloat SC_modff(float v, float* ptr) {return modff(v, ptr);} 144d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32_F32(nextafterf) 145d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32_F32(powf) 146d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32_F32(remainderf) 147d6f1f46b2929ed56c73ba32357cde31b82972fbeTim Murrayfloat SC_remquof(float t, float v, int* ptr) {return remquof(t, v, ptr);} 148d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(rintf) 149d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(roundf) 150d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(sinf) 151d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(sinhf) 152d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(sqrtf) 153d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(tanf) 154d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(tanhf) 155d6f1f46b2929ed56c73ba32357cde31b82972fbeTim MurrayEXPORT_F32_FN_F32(truncf) 156cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixLoadRotate(rs_matrix4x4 *m, 157cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines float rot, float x, float y, float z) { 158cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixLoadRotate((Matrix4x4 *) m, rot, x, y, z); 159cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 160cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixLoadScale(rs_matrix4x4 *m, 161cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines float x, float y, float z) { 162cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixLoadScale((Matrix4x4 *) m, x, y, z); 163cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 164cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixLoadTranslate(rs_matrix4x4 *m, 165cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines float x, float y, float z) { 166cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixLoadTranslate((Matrix4x4 *) m, x, y, z); 167cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 168cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixRotate(rs_matrix4x4 *m, float rot, 169cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines float x, float y, float z) { 170cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixRotate((Matrix4x4 *) m, rot, x, y, z); 171cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 172cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixScale(rs_matrix4x4 *m, float x, 173cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines float y, float z) { 174cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixScale((Matrix4x4 *) m, x, y, z); 175cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 176cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixTranslate(rs_matrix4x4 *m, float x, 177cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines float y, float z) { 178cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixTranslate((Matrix4x4 *) m, x, y, z); 179cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 180cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixLoadOrtho(rs_matrix4x4 *m, float l, 181cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines float r, float b, float t, float n, float f) { 182cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixLoadOrtho((Matrix4x4 *) m, l, r, b, t, n, f); 183cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 184cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixLoadFrustum(rs_matrix4x4 *m, 185cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines float l, float r, float b, float t, float n, float f) { 186cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixLoadFrustum((Matrix4x4 *) m, l, r, b, t, n, f); 187cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 188cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixLoadPerspective(rs_matrix4x4 *m, 189cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines float fovy, float aspect, float near, float far) { 190cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixLoadPerspective((Matrix4x4 *) m, fovy, aspect, near, far); 191cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 192cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesbool __attribute__((overloadable)) rsMatrixInverse(rs_matrix4x4 *m) { 193cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines return SC_MatrixInverse_4x4((Matrix4x4 *) m); 194cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 195cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesbool __attribute__((overloadable)) rsMatrixInverseTranspose(rs_matrix4x4 *m) { 196cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines return SC_MatrixInverseTranspose_4x4((Matrix4x4 *) m); 197cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 198cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixTranspose(rs_matrix4x4 *m) { 199cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixTranspose_4x4((Matrix4x4 *) m); 200cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 201cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixTranspose(rs_matrix3x3 *m) { 202cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixTranspose_3x3((Matrix3x3 *) m); 203cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 204cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hinesvoid __attribute__((overloadable)) rsMatrixTranspose(rs_matrix2x2 *m) { 205cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines SC_MatrixTranspose_2x2((Matrix2x2 *) m); 206cadee38f6940e5584d3ec3398a21bd2a494361e2Stephen Hines} 20787fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 20887fe59a2f4d4c74539bfa0bff5f9a7e320e99415Jason Sams 209