15a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines#include "rs_core.rsh" 25a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines#include "rs_structs.h" 35a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 45a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines// Opaque Allocation type operations 55a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint32_t __attribute__((overloadable)) 65a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsAllocationGetDimX(rs_allocation a) { 75a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 85a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return alloc->mHal.drvState.lod[0].dimX; 95a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint32_t __attribute__((overloadable)) 125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsAllocationGetDimY(rs_allocation a) { 135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return alloc->mHal.drvState.lod[0].dimY; 155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint32_t __attribute__((overloadable)) 185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsAllocationGetDimZ(rs_allocation a) { 195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return alloc->mHal.drvState.lod[0].dimZ; 215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 225a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint32_t __attribute__((overloadable)) 245a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsAllocationGetDimLOD(rs_allocation a) { 255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return alloc->mHal.state.hasMipmaps; 275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern uint32_t __attribute__((overloadable)) 305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsAllocationGetDimFaces(rs_allocation a) { 315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return alloc->mHal.state.hasFaces; 335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 345a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 355a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 365a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern rs_element __attribute__((overloadable)) 375a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsAllocationGetElement(rs_allocation a) { 385a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 395a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines if (alloc == NULL) { 40863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet rs_element nullElem = RS_NULL_OBJ; 415a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return nullElem; 425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } 435a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Type_t *type = (Type_t *)alloc->mHal.state.type; 44863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet rs_element returnElem = { 45863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet type->mHal.state.element 46863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet#ifdef __LP64__ 47863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet , 0, 0, 0 48863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet#endif 49863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet }; 50863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet rs_element rs_retval = RS_NULL_OBJ; 510b8411471e7d2d332610ec16f555ab8cc434d167Yang Ni rsSetObject(&rs_retval, returnElem); 520b8411471e7d2d332610ec16f555ab8cc434d167Yang Ni return rs_retval; 535a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 545a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 555a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines// TODO: this needs to be optimized, obviously 566fb5a4f5411c16d36f123c7c2c9add4d937479efVerena Beckhamstatic void local_memcpy(void* dst, const void* src, size_t size) { 574c01362afa871fcde6c269bc0ba3defa9e76de49Dean De Leo char* dst_c = (char*) dst; 584c01362afa871fcde6c269bc0ba3defa9e76de49Dean De Leo const char* src_c = (const char*) src; 595a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines for (; size > 0; size--) { 605a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines *dst_c++ = *src_c++; 615a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } 625a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 635a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 64f4882cb90cacad9db128e6d7f06b553258f843ffDavid Grossuint8_t* 65f4882cb90cacad9db128e6d7f06b553258f843ffDavid GrossrsOffset(rs_allocation a, uint32_t sizeOf, uint32_t x, uint32_t y, 66f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross uint32_t z) { 67f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross Allocation_t *alloc = (Allocation_t *)a.p; 68f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross uint8_t *p = (uint8_t *)alloc->mHal.drvState.lod[0].mallocPtr; 69f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross const uint32_t stride = (uint32_t)alloc->mHal.drvState.lod[0].stride; 70f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross const uint32_t dimY = alloc->mHal.drvState.lod[0].dimY; 71f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross uint8_t *dp = &p[(sizeOf * x) + (y * stride) + 72f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross (z * stride * dimY)]; 73f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross return dp; 74f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross} 75f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross 76f4882cb90cacad9db128e6d7f06b553258f843ffDavid Grossuint8_t* 77f4882cb90cacad9db128e6d7f06b553258f843ffDavid GrossrsOffsetNs(rs_allocation a, uint32_t x, uint32_t y, uint32_t z) { 78f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross Allocation_t *alloc = (Allocation_t *)a.p; 79f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross uint8_t *p = (uint8_t *)alloc->mHal.drvState.lod[0].mallocPtr; 80f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross const uint32_t stride = alloc->mHal.drvState.lod[0].stride; 81f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross const uint32_t dimY = alloc->mHal.drvState.lod[0].dimY; 82f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross const uint32_t sizeOf = alloc->mHal.state.elementSizeBytes;; 83f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross uint8_t *dp = &p[(sizeOf * x) + (y * stride) + 84f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross (z * stride * dimY)]; 85f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross return dp; 86f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross} 87f4882cb90cacad9db128e6d7f06b553258f843ffDavid Gross 885a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines#ifdef RS_DEBUG_RUNTIME 895a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines#define ELEMENT_AT(T) \ 905a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 915a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt_##T(rs_allocation a, const T *val, uint32_t x); \ 925a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 935a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt_##T(rs_allocation a, const T *val, uint32_t x, uint32_t y); \ 945a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 955a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt_##T(rs_allocation a, const T *val, uint32_t x, uint32_t y, uint32_t z); \ 965a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 975a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt_##T(rs_allocation a, T *val, uint32_t x); \ 985a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 995a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt_##T(rs_allocation a, T *val, uint32_t x, uint32_t y); \ 1005a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 1015a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt_##T(rs_allocation a, T *val, uint32_t x, uint32_t y, uint32_t z); \ 1025a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines \ 1035a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 1045a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt_##T(rs_allocation a, T val, uint32_t x) { \ 1055a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt_##T(a, &val, x); \ 1065a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } \ 1075a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 1085a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt_##T(rs_allocation a, T val, uint32_t x, uint32_t y) { \ 1095a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt_##T(a, &val, x, y); \ 1105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } \ 1115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 1125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt_##T(rs_allocation a, T val, uint32_t x, uint32_t y, uint32_t z) { \ 1135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt_##T(a, &val, x, y, z); \ 1145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } \ 1155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern T __attribute__((overloadable)) \ 1165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt_##T(rs_allocation a, uint32_t x) { \ 1175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines T tmp; \ 1185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt_##T(a, &tmp, x); \ 1195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return tmp; \ 1205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } \ 1215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern T __attribute__((overloadable)) \ 1225a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt_##T(rs_allocation a, uint32_t x, uint32_t y) { \ 1235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines T tmp; \ 1245a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt_##T(a, &tmp, x, y); \ 1255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return tmp; \ 1265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } \ 1275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern T __attribute__((overloadable)) \ 1285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt_##T(rs_allocation a, uint32_t x, uint32_t y, uint32_t z) { \ 1295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines T tmp; \ 1305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt_##T(a, &tmp, x, y, z); \ 1315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return tmp; \ 1325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } 133863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouillet#else // NOT RS_DEBUG_RUNTIME 13498f1f05105146e1caeb124cae6e286c151f63151Tobias Grosser 135fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#define SET_ELEMENT_AT_TYPE_IMPL(T, typename) \ 1361ed5ef9b253850a199eecff6b7941e57c408e509Tobias Grosser void \ 137cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray rsSetElementAtImpl_##typename(rs_allocation a, typename val, uint32_t x, \ 138fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham uint32_t y, uint32_t z); 139fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham 140fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#define GET_ELEMENT_AT_TYPE_IMPL(T, typename) \ 141fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham typename \ 142fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham rsGetElementAtImpl_##typename(rs_allocation a, uint32_t x, uint32_t y, \ 143fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham uint32_t z); 144fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham 145fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#define SET_ELEMENT_AT_TYPE_DEF(T, typename) \ 1465a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 147cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray rsSetElementAt_##typename(rs_allocation a, T val, uint32_t x) { \ 148cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray rsSetElementAtImpl_##typename(a, (typename)val, x, 0, 0); \ 1495a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } \ 15098f1f05105146e1caeb124cae6e286c151f63151Tobias Grosser \ 1515a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 152cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray rsSetElementAt_##typename(rs_allocation a, T val, uint32_t x, \ 153cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray uint32_t y) { \ 154cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray rsSetElementAtImpl_##typename(a, (typename)val, x, y, 0); \ 1555a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } \ 15698f1f05105146e1caeb124cae6e286c151f63151Tobias Grosser \ 1575a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines extern void __attribute__((overloadable)) \ 158cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray rsSetElementAt_##typename(rs_allocation a, T val, uint32_t x, uint32_t y, \ 159cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray uint32_t z) { \ 160cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray rsSetElementAtImpl_##typename(a, (typename)val, x, y, z); \ 161fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham } 162cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray 163fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#define GET_ELEMENT_AT_TYPE_DEF(T, typename) \ 164cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray extern typename __attribute__((overloadable)) \ 165cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray rsGetElementAt_##typename(rs_allocation a, uint32_t x) { \ 166cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray return (typename)rsGetElementAtImpl_##typename(a, x, 0, 0); \ 1675a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } \ 16898f1f05105146e1caeb124cae6e286c151f63151Tobias Grosser \ 169cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray extern typename __attribute__((overloadable)) \ 170cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray rsGetElementAt_##typename(rs_allocation a, uint32_t x, uint32_t y) { \ 171cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray return (typename)rsGetElementAtImpl_##typename(a, x, y, 0); \ 1725a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } \ 17398f1f05105146e1caeb124cae6e286c151f63151Tobias Grosser \ 174cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray extern typename __attribute__((overloadable)) \ 175cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray rsGetElementAt_##typename(rs_allocation a, uint32_t x, uint32_t y, \ 176cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray uint32_t z) { \ 177cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray return (typename)rsGetElementAtImpl_##typename(a, x, y, z); \ 1785a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines } 1795a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 180fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#define SET_ELEMENT_AT(T) SET_ELEMENT_AT_TYPE_IMPL(T, T) \ 181fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham SET_ELEMENT_AT_TYPE_DEF(T, T) 182fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#define GET_ELEMENT_AT(T) GET_ELEMENT_AT_TYPE_IMPL(T, T) \ 183fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham GET_ELEMENT_AT_TYPE_DEF(T, T) 184cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray 185cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray#define ELEMENT_AT(T) \ 186cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray SET_ELEMENT_AT(T) \ 187cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray GET_ELEMENT_AT(T) 1885a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1899d6d872676e11549281f525e29fa72864248f402I-Jui (Ray) Sung#endif // RS_DEBUG_RUNTIME 1905a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1915a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern const void * __attribute__((overloadable)) 1925a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt(rs_allocation a, uint32_t x) { 1935a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 1945a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint8_t *p = (const uint8_t *)alloc->mHal.drvState.lod[0].mallocPtr; 1955a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t eSize = alloc->mHal.state.elementSizeBytes; 1965a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return &p[eSize * x]; 1975a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 1985a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 1995a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern const void * __attribute__((overloadable)) 2005a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt(rs_allocation a, uint32_t x, uint32_t y) { 2015a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 2025a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint8_t *p = (const uint8_t *)alloc->mHal.drvState.lod[0].mallocPtr; 2035a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t eSize = alloc->mHal.state.elementSizeBytes; 2045a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t stride = alloc->mHal.drvState.lod[0].stride; 2055a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return &p[(eSize * x) + (y * stride)]; 2065a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2075a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2085a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern const void * __attribute__((overloadable)) 2095a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAt(rs_allocation a, uint32_t x, uint32_t y, uint32_t z) { 2105a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 2115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint8_t *p = (const uint8_t *)alloc->mHal.drvState.lod[0].mallocPtr; 2125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t eSize = alloc->mHal.state.elementSizeBytes; 2135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t stride = alloc->mHal.drvState.lod[0].stride; 2145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t dimY = alloc->mHal.drvState.lod[0].dimY; 2155a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return &p[(eSize * x) + (y * stride) + (z * stride * dimY)]; 2165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern void __attribute__((overloadable)) 2185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt(rs_allocation a, void* ptr, uint32_t x) { 2195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 2205a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint8_t *p = (const uint8_t *)alloc->mHal.drvState.lod[0].mallocPtr; 2215a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t eSize = alloc->mHal.state.elementSizeBytes; 2226fb5a4f5411c16d36f123c7c2c9add4d937479efVerena Beckham local_memcpy((void*)&p[eSize * x], ptr, eSize); 2235a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2245a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2255a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern void __attribute__((overloadable)) 2265a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt(rs_allocation a, void* ptr, uint32_t x, uint32_t y) { 2275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 2285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint8_t *p = (const uint8_t *)alloc->mHal.drvState.lod[0].mallocPtr; 2295a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t eSize = alloc->mHal.state.elementSizeBytes; 2305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t stride = alloc->mHal.drvState.lod[0].stride; 2316fb5a4f5411c16d36f123c7c2c9add4d937479efVerena Beckham local_memcpy((void*)&p[(eSize * x) + (y * stride)], ptr, eSize); 2325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2345a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hinesextern void __attribute__((overloadable)) 2355a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsSetElementAt(rs_allocation a, void* ptr, uint32_t x, uint32_t y, uint32_t z) { 2365a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 2375a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint8_t *p = (const uint8_t *)alloc->mHal.drvState.lod[0].mallocPtr; 2385a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t eSize = alloc->mHal.state.elementSizeBytes; 2395a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t stride = alloc->mHal.drvState.lod[0].stride; 2405a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines const uint32_t dimY = alloc->mHal.drvState.lod[0].dimY; 2416fb5a4f5411c16d36f123c7c2c9add4d937479efVerena Beckham local_memcpy((void*)&p[(eSize * x) + (y * stride) + (z * stride * dimY)], ptr, eSize); 2425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 2435a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 2445a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(char) 2455a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(char2) 2465a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(char3) 2475a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(char4) 2485a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(uchar) 2495a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(uchar2) 2505a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(uchar3) 2515a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(uchar4) 2525a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(short) 2535a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(short2) 2545a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(short3) 2555a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(short4) 2565a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(ushort) 2575a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(ushort2) 2585a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(ushort3) 2595a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(ushort4) 2605a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(int) 2615a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(int2) 2625a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(int3) 2635a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(int4) 2645a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(uint) 2655a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(uint2) 2665a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(uint3) 2675a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(uint4) 2685a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(long) 2695a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(long2) 2705a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(long3) 2715a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(long4) 2725a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(ulong) 2735a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(ulong2) 2745a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(ulong3) 2755a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(ulong4) 2762dcbc3d33443c1224085cab081b634f99327c159Pirama Arumuga NainarELEMENT_AT(half) 2772dcbc3d33443c1224085cab081b634f99327c159Pirama Arumuga NainarELEMENT_AT(half2) 2782dcbc3d33443c1224085cab081b634f99327c159Pirama Arumuga NainarELEMENT_AT(half3) 2792dcbc3d33443c1224085cab081b634f99327c159Pirama Arumuga NainarELEMENT_AT(half4) 2805a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(float) 2815a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(float2) 2825a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(float3) 2835a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(float4) 2845a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(double) 2855a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(double2) 2865a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(double3) 2875a47020542c52af3e879c1cd67674ca979ff0a18Stephen HinesELEMENT_AT(double4) 2885a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 289cbdb6480528fc374144df1ae9c604c9100d33268Tim Murraytypedef unsigned long long ull; 290cbdb6480528fc374144df1ae9c604c9100d33268Tim Murraytypedef unsigned long long ull2 __attribute__((ext_vector_type(2))); 291cbdb6480528fc374144df1ae9c604c9100d33268Tim Murraytypedef unsigned long long ull3 __attribute__((ext_vector_type(3))); 292cbdb6480528fc374144df1ae9c604c9100d33268Tim Murraytypedef unsigned long long ull4 __attribute__((ext_vector_type(4))); 293cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray 294cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray#ifndef RS_DEBUG_RUNTIME 295fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena BeckhamSET_ELEMENT_AT_TYPE_IMPL(ull, ulong) 296fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena BeckhamSET_ELEMENT_AT_TYPE_IMPL(ull2, ulong2) 297fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena BeckhamSET_ELEMENT_AT_TYPE_IMPL(ull3, ulong3) 298fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena BeckhamSET_ELEMENT_AT_TYPE_IMPL(ull4, ulong4) 299fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham 300fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#undef SET_ELEMENT_AT_TYPE_DEF 301fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#undef GET_ELEMENT_AT_TYPE_DEF 302fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#undef SET_ELEMENT_AT_TYPE_IMPL 303fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#undef GET_ELEMENT_AT_TYPE_IMPL 304cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray#undef ELEMENT_AT_TYPE 305cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray#endif 306cbdb6480528fc374144df1ae9c604c9100d33268Tim Murray 3075a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines#undef ELEMENT_AT 3085a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3095a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 310fb2a33d2532d2500bfc4da879f83761f9a01edebJean-Luc Brouilletextern uchar __attribute__((overloadable)) 3115a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAtYuv_uchar_Y(rs_allocation a, uint32_t x, uint32_t y) { 3125a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines return rsGetElementAt_uchar(a, x, y); 3135a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3145a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 315fb2a33d2532d2500bfc4da879f83761f9a01edebJean-Luc Brouilletextern uchar __attribute__((overloadable)) 3165a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAtYuv_uchar_U(rs_allocation a, uint32_t x, uint32_t y) { 3175a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3185a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 3195a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 32061656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams const size_t cstep = alloc->mHal.drvState.yuv.step; 32161656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams const size_t shift = alloc->mHal.drvState.yuv.shift; 3220052f8dcb5ebb5c9205a1d25445629fb5a772380Jason Sams const size_t stride = alloc->mHal.drvState.lod[1].stride; 32361656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams 3240052f8dcb5ebb5c9205a1d25445629fb5a772380Jason Sams const uchar *pin = (const uchar *)alloc->mHal.drvState.lod[1].mallocPtr; 32561656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams 32661656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams return pin[((x >> shift) * cstep) + ((y >> shift) * stride)]; 3275a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3285a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 329fb2a33d2532d2500bfc4da879f83761f9a01edebJean-Luc Brouilletextern uchar __attribute__((overloadable)) 3305a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines rsGetElementAtYuv_uchar_V(rs_allocation a, uint32_t x, uint32_t y) { 3315a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 3325a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines Allocation_t *alloc = (Allocation_t *)a.p; 3335a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 33461656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams const size_t cstep = alloc->mHal.drvState.yuv.step; 33561656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams const size_t shift = alloc->mHal.drvState.yuv.shift; 3360052f8dcb5ebb5c9205a1d25445629fb5a772380Jason Sams const size_t stride = alloc->mHal.drvState.lod[2].stride; 33761656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams 3380052f8dcb5ebb5c9205a1d25445629fb5a772380Jason Sams const uchar *pin = (const uchar *)alloc->mHal.drvState.lod[2].mallocPtr; 33961656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams 34061656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams return pin[((x >> shift) * cstep) + ((y >> shift) * stride)]; 3415a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines} 3425a47020542c52af3e879c1cd67674ca979ff0a18Stephen Hines 343fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#define VOP_IMPL(T) \ 34441660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams extern void __rsAllocationVStoreXImpl_##T(rs_allocation a, const T val, uint32_t x, uint32_t y, uint32_t z); \ 345fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham extern T __rsAllocationVLoadXImpl_##T(rs_allocation a, uint32_t x, uint32_t y, uint32_t z); 346fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham 347fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#define VOP_DEF(T) \ 34841660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams extern void __attribute__((overloadable)) \ 34941660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams rsAllocationVStoreX_##T(rs_allocation a, T val, uint32_t x) { \ 35041660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams __rsAllocationVStoreXImpl_##T(a, val, x, 0, 0); \ 35141660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams } \ 35241660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams extern void __attribute__((overloadable)) \ 35341660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams rsAllocationVStoreX_##T(rs_allocation a, T val, uint32_t x, uint32_t y) { \ 35441660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams __rsAllocationVStoreXImpl_##T(a, val, x, y, 0); \ 35541660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams } \ 35641660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams extern void __attribute__((overloadable)) \ 35741660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams rsAllocationVStoreX_##T(rs_allocation a, T val, uint32_t x, uint32_t y, uint32_t z) { \ 35841660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams __rsAllocationVStoreXImpl_##T(a, val, x, y, z); \ 35941660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams } \ 36041660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams extern T __attribute__((overloadable)) \ 36141660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams rsAllocationVLoadX_##T(rs_allocation a, uint32_t x) { \ 36241660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams return __rsAllocationVLoadXImpl_##T(a, x, 0, 0); \ 36341660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams } \ 36441660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams extern T __attribute__((overloadable)) \ 36541660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams rsAllocationVLoadX_##T(rs_allocation a, uint32_t x, uint32_t y) { \ 36641660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams return __rsAllocationVLoadXImpl_##T(a, x, y, 0); \ 36741660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams } \ 36841660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams extern T __attribute__((overloadable)) \ 36941660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams rsAllocationVLoadX_##T(rs_allocation a, uint32_t x, uint32_t y, uint32_t z) { \ 37041660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams return __rsAllocationVLoadXImpl_##T(a, x, y, z); \ 37141660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams } 37241660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams 373fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#define VOP(T) VOP_IMPL(T) \ 374fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham VOP_DEF(T) 375fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham 37641660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(char2) 37741660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(char3) 37841660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(char4) 37941660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(uchar2) 38041660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(uchar3) 38141660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(uchar4) 38241660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(short2) 38341660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(short3) 38441660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(short4) 38541660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(ushort2) 38641660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(ushort3) 38741660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(ushort4) 38841660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(int2) 38941660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(int3) 39041660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(int4) 39141660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(uint2) 39241660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(uint3) 39341660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(uint4) 39441660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(long2) 39541660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(long3) 39641660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(long4) 39741660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(ulong2) 39841660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(ulong3) 39941660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(ulong4) 40041660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(float2) 40141660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(float3) 40241660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(float4) 40341660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(double2) 40441660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(double3) 40541660c4c73fc425a2e3511e2070b2748cdd1107cJason SamsVOP(double4) 40641660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams 407fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#undef VOP_IMPL 408fb99e0f905b0f73a505c7900b434531ce7c3e2e5Verena Beckham#undef VOP_DEF 40941660c4c73fc425a2e3511e2070b2748cdd1107cJason Sams#undef VOP 4107cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 411863237215cab4812df373b63ba3bbf2bc1d8647dJean-Luc Brouilletstatic const rs_element kInvalidElement = RS_NULL_OBJ; 4127cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 4137cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarextern rs_element __attribute__((overloadable)) rsCreateElement( 4147cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar int32_t dt, int32_t dk, bool isNormalized, uint32_t vecSize); 4157cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 4167cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarextern rs_type __attribute__((overloadable)) rsCreateType( 4177cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rs_element element, uint32_t dimX, uint32_t dimY, uint32_t dimZ, 4187cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar bool mipmaps, bool faces, rs_yuv_format yuv_format); 4197cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 4207cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarextern rs_allocation __attribute__((overloadable)) rsCreateAllocation( 4217cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rs_type type, rs_allocation_mipmap_control mipmaps, uint32_t usages, 4227cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar void *ptr); 4237cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 4247cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarrs_element __attribute__((overloadable)) rsCreateElement( 4257cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rs_data_type data_type) { 4267cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 4277cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar switch (data_type) { 4287cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_BOOLEAN: 4297e1013b9461a07d42df05b2c6f7e73ec6518b82aPirama Arumuga Nainar case RS_TYPE_FLOAT_16: 4307cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_FLOAT_32: 4317cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_FLOAT_64: 4327cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_SIGNED_8: 4337cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_SIGNED_16: 4347cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_SIGNED_32: 4357cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_SIGNED_64: 4367cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_UNSIGNED_8: 4377cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_UNSIGNED_16: 4387cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_UNSIGNED_32: 4397cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_UNSIGNED_64: 4407cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_MATRIX_4X4: 4417cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_MATRIX_3X3: 4427cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_MATRIX_2X2: 4437cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_ELEMENT: 4447cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_TYPE: 4457cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_ALLOCATION: 4467cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_SCRIPT: 4477cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return rsCreateElement(data_type, RS_KIND_USER, false, 1); 4487cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar default: 4497cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rsDebug("Invalid data_type", data_type); 4507cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return kInvalidElement; 4517cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar } 4527cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar} 4537cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 4547cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarrs_element __attribute__((overloadable)) rsCreateVectorElement( 4557cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rs_data_type data_type, uint32_t vector_width) { 4567cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar if (vector_width < 2 || vector_width > 4) { 4577cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rsDebug("Invalid vector_width", vector_width); 4587cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return kInvalidElement; 4597cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar } 4607cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar switch (data_type) { 4617cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_BOOLEAN: 4627e1013b9461a07d42df05b2c6f7e73ec6518b82aPirama Arumuga Nainar case RS_TYPE_FLOAT_16: 4637cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_FLOAT_32: 4647cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_FLOAT_64: 4657cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_SIGNED_8: 4667cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_SIGNED_16: 4677cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_SIGNED_32: 4687cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_SIGNED_64: 4697cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_UNSIGNED_8: 4707cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_UNSIGNED_16: 4717cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_UNSIGNED_32: 4727cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_TYPE_UNSIGNED_64: 4737cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return rsCreateElement(data_type, RS_KIND_USER, false, 4747cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar vector_width); 4757cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar default: 4767cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rsDebug("Invalid data_type for vector element", data_type); 4777cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return kInvalidElement; 4787cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar } 4797cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar} 4807cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 4817cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarrs_element __attribute__((overloadable)) rsCreatePixelElement( 4827cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rs_data_type data_type, rs_data_kind data_kind) { 4837cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar if (data_type != RS_TYPE_UNSIGNED_8 && 4847cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_type != RS_TYPE_UNSIGNED_16 && 4857cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_type != RS_TYPE_UNSIGNED_5_6_5 && 4867cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_type != RS_TYPE_UNSIGNED_4_4_4_4 && 4877cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_type != RS_TYPE_UNSIGNED_5_5_5_1) { 4887cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 4897cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rsDebug("Invalid data_type for pixel element", data_type); 4907cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return kInvalidElement; 4917cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar } 4927cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar if (data_kind != RS_KIND_PIXEL_L && 4937cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_kind != RS_KIND_PIXEL_A && 4947cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_kind != RS_KIND_PIXEL_LA && 4957cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_kind != RS_KIND_PIXEL_RGB && 4967cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_kind != RS_KIND_PIXEL_RGBA && 4977cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_kind != RS_KIND_PIXEL_DEPTH && 4987cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_kind != RS_KIND_PIXEL_YUV) { 4997cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 5007cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rsDebug("Invalid data_kind for pixel element", data_type); 5017cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return kInvalidElement; 5027cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar } 5037cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar if (data_type == RS_TYPE_UNSIGNED_5_6_5 && data_kind != RS_KIND_PIXEL_RGB) { 5047cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rsDebug("Bad data_type and data_kind combo", data_type, data_kind); 5057cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return kInvalidElement; 5067cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar } 5077cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar if (data_type == RS_TYPE_UNSIGNED_5_5_5_1 && 5087cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_kind != RS_KIND_PIXEL_RGBA) { 5097cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 5107cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rsDebug("Bad data_type and data_kind combo", data_type, data_kind); 5117cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return kInvalidElement; 5127cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar } 5137cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar if (data_type == RS_TYPE_UNSIGNED_4_4_4_4 && 5147cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar data_kind != RS_KIND_PIXEL_RGBA) { 5157cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 5167cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rsDebug("Bad data_type and data_kind combo", data_type, data_kind); 5177cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return kInvalidElement; 5187cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar } 5197cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar if (data_type == RS_TYPE_UNSIGNED_16 && data_kind != RS_KIND_PIXEL_DEPTH) { 5207cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar rsDebug("Bad data_type and data_kind combo", data_type, data_kind); 5217cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return kInvalidElement; 5227cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar } 5237cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 5247cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar int vector_width = 1; 5257cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar switch (data_kind) { 5267cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_KIND_PIXEL_LA: 5277cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar vector_width = 2; 5287cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar break; 5297cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_KIND_PIXEL_RGB: 5307cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar vector_width = 3; 5317cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar break; 5327cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_KIND_PIXEL_RGBA: 5337cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar vector_width = 4; 5347cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar break; 5357cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar case RS_KIND_PIXEL_DEPTH: 5367cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar vector_width = 2; 5377cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar break; 538f72e74660567181b79673f2a476a6957db2507e5Stephen Hines default: 539f72e74660567181b79673f2a476a6957db2507e5Stephen Hines break; 5407cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar } 5417cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 5427cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return rsCreateElement(data_type, data_kind, true, vector_width); 5437cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar} 5447cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 5457cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarrs_type __attribute__((overloadable)) rsCreateType(rs_element element, 5467cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar uint32_t dimX, uint32_t dimY, 5477cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar uint32_t dimZ) { 5487cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return rsCreateType(element, dimX, dimY, dimZ, false, false, RS_YUV_NONE); 5497cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar} 5507cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 5517cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarrs_type __attribute__((overloadable)) rsCreateType(rs_element element, 5527cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar uint32_t dimX, 5537cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar uint32_t dimY) { 5547cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return rsCreateType(element, dimX, dimY, 0, false, false, RS_YUV_NONE); 5557cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar} 5567cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 5577cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarrs_type __attribute__((overloadable)) rsCreateType(rs_element element, 5587cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar uint32_t dimX) { 5597cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return rsCreateType(element, dimX, 0, 0, false, false, RS_YUV_NONE); 5607cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar} 5617cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 5627cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarrs_allocation __attribute__((overloadable)) rsCreateAllocation(rs_type type, 5637cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar uint32_t usage) { 5647cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return rsCreateAllocation(type, RS_ALLOCATION_MIPMAP_NONE, usage, NULL); 5657cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar} 5667cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar 5677cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainarrs_allocation __attribute__((overloadable)) rsCreateAllocation(rs_type type) { 5687cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar return rsCreateAllocation(type, RS_ALLOCATION_MIPMAP_NONE, 5697cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar RS_ALLOCATION_USAGE_SCRIPT, NULL); 5707cb2273d4487b482d99d29f596506743c6a14534Pirama Arumuga Nainar} 571