1*e1eccf28SAndroid Build Coastguard Worker /* 2*e1eccf28SAndroid Build Coastguard Worker * Copyright (C) 2013 The Android Open Source Project 3*e1eccf28SAndroid Build Coastguard Worker * 4*e1eccf28SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*e1eccf28SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*e1eccf28SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*e1eccf28SAndroid Build Coastguard Worker * 8*e1eccf28SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*e1eccf28SAndroid Build Coastguard Worker * 10*e1eccf28SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*e1eccf28SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*e1eccf28SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*e1eccf28SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*e1eccf28SAndroid Build Coastguard Worker * limitations under the License. 15*e1eccf28SAndroid Build Coastguard Worker */ 16*e1eccf28SAndroid Build Coastguard Worker 17*e1eccf28SAndroid Build Coastguard Worker #ifndef ANDROID_RSCPPSTRUCTS_H 18*e1eccf28SAndroid Build Coastguard Worker #define ANDROID_RSCPPSTRUCTS_H 19*e1eccf28SAndroid Build Coastguard Worker 20*e1eccf28SAndroid Build Coastguard Worker #include "rsDefines.h" 21*e1eccf28SAndroid Build Coastguard Worker #include "util/RefBase.h" 22*e1eccf28SAndroid Build Coastguard Worker 23*e1eccf28SAndroid Build Coastguard Worker #include <pthread.h> 24*e1eccf28SAndroid Build Coastguard Worker 25*e1eccf28SAndroid Build Coastguard Worker 26*e1eccf28SAndroid Build Coastguard Worker /** 27*e1eccf28SAndroid Build Coastguard Worker * Every row in an RS allocation is guaranteed to be aligned by this amount, and 28*e1eccf28SAndroid Build Coastguard Worker * every row in a user-backed allocation must be aligned by this amount. 29*e1eccf28SAndroid Build Coastguard Worker */ 30*e1eccf28SAndroid Build Coastguard Worker #define RS_CPU_ALLOCATION_ALIGNMENT 16 31*e1eccf28SAndroid Build Coastguard Worker 32*e1eccf28SAndroid Build Coastguard Worker struct dispatchTable; 33*e1eccf28SAndroid Build Coastguard Worker 34*e1eccf28SAndroid Build Coastguard Worker namespace android { 35*e1eccf28SAndroid Build Coastguard Worker 36*e1eccf28SAndroid Build Coastguard Worker namespace RSC { 37*e1eccf28SAndroid Build Coastguard Worker 38*e1eccf28SAndroid Build Coastguard Worker 39*e1eccf28SAndroid Build Coastguard Worker typedef void (*ErrorHandlerFunc_t)(uint32_t errorNum, const char *errorText); 40*e1eccf28SAndroid Build Coastguard Worker typedef void (*MessageHandlerFunc_t)(uint32_t msgNum, const void *msgData, size_t msgLen); 41*e1eccf28SAndroid Build Coastguard Worker 42*e1eccf28SAndroid Build Coastguard Worker class RS; 43*e1eccf28SAndroid Build Coastguard Worker class BaseObj; 44*e1eccf28SAndroid Build Coastguard Worker class Element; 45*e1eccf28SAndroid Build Coastguard Worker class Type; 46*e1eccf28SAndroid Build Coastguard Worker class Allocation; 47*e1eccf28SAndroid Build Coastguard Worker class Script; 48*e1eccf28SAndroid Build Coastguard Worker class ScriptC; 49*e1eccf28SAndroid Build Coastguard Worker class Sampler; 50*e1eccf28SAndroid Build Coastguard Worker 51*e1eccf28SAndroid Build Coastguard Worker /** 52*e1eccf28SAndroid Build Coastguard Worker * Possible error codes used by RenderScript. Once a status other than RS_SUCCESS 53*e1eccf28SAndroid Build Coastguard Worker * is returned, the RenderScript context is considered dead and cannot perform any 54*e1eccf28SAndroid Build Coastguard Worker * additional work. 55*e1eccf28SAndroid Build Coastguard Worker */ 56*e1eccf28SAndroid Build Coastguard Worker enum RSError { 57*e1eccf28SAndroid Build Coastguard Worker RS_SUCCESS = 0, ///< No error 58*e1eccf28SAndroid Build Coastguard Worker RS_ERROR_INVALID_PARAMETER = 1, ///< An invalid parameter was passed to a function 59*e1eccf28SAndroid Build Coastguard Worker RS_ERROR_RUNTIME_ERROR = 2, ///< The RenderScript driver returned an error; this is 60*e1eccf28SAndroid Build Coastguard Worker ///< often indicative of a kernel that crashed 61*e1eccf28SAndroid Build Coastguard Worker RS_ERROR_INVALID_ELEMENT = 3, ///< An invalid Element was passed to a function 62*e1eccf28SAndroid Build Coastguard Worker RS_ERROR_MAX = 9999 63*e1eccf28SAndroid Build Coastguard Worker 64*e1eccf28SAndroid Build Coastguard Worker }; 65*e1eccf28SAndroid Build Coastguard Worker 66*e1eccf28SAndroid Build Coastguard Worker /** 67*e1eccf28SAndroid Build Coastguard Worker * Flags that can control RenderScript behavior on a per-context level. 68*e1eccf28SAndroid Build Coastguard Worker */ 69*e1eccf28SAndroid Build Coastguard Worker enum RSInitFlags { 70*e1eccf28SAndroid Build Coastguard Worker RS_INIT_SYNCHRONOUS = 1, ///< All RenderScript calls will be synchronous. May reduce latency. 71*e1eccf28SAndroid Build Coastguard Worker RS_INIT_LOW_LATENCY = 2, ///< Prefer low latency devices over potentially higher throughput devices. 72*e1eccf28SAndroid Build Coastguard Worker // Bitflag 4 is reserved for the context flag low power 73*e1eccf28SAndroid Build Coastguard Worker RS_INIT_WAIT_FOR_ATTACH = 8, ///< Kernel execution will hold to give time for a debugger to be attached 74*e1eccf28SAndroid Build Coastguard Worker RS_INIT_MAX = 16 75*e1eccf28SAndroid Build Coastguard Worker }; 76*e1eccf28SAndroid Build Coastguard Worker 77*e1eccf28SAndroid Build Coastguard Worker 78*e1eccf28SAndroid Build Coastguard Worker class Byte2 { 79*e1eccf28SAndroid Build Coastguard Worker public: 80*e1eccf28SAndroid Build Coastguard Worker int8_t x, y; 81*e1eccf28SAndroid Build Coastguard Worker Byte2(int8_t initX,int8_t initY)82*e1eccf28SAndroid Build Coastguard Worker Byte2(int8_t initX, int8_t initY) 83*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY) {} Byte2()84*e1eccf28SAndroid Build Coastguard Worker Byte2() : x(0), y(0) {} 85*e1eccf28SAndroid Build Coastguard Worker }; 86*e1eccf28SAndroid Build Coastguard Worker 87*e1eccf28SAndroid Build Coastguard Worker class Byte3 { 88*e1eccf28SAndroid Build Coastguard Worker public: 89*e1eccf28SAndroid Build Coastguard Worker int8_t x, y, z; 90*e1eccf28SAndroid Build Coastguard Worker Byte3(int8_t initX,int8_t initY,int8_t initZ)91*e1eccf28SAndroid Build Coastguard Worker Byte3(int8_t initX, int8_t initY, int8_t initZ) 92*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ) {} Byte3()93*e1eccf28SAndroid Build Coastguard Worker Byte3() : x(0), y(0), z(0) {} 94*e1eccf28SAndroid Build Coastguard Worker }; 95*e1eccf28SAndroid Build Coastguard Worker 96*e1eccf28SAndroid Build Coastguard Worker class Byte4 { 97*e1eccf28SAndroid Build Coastguard Worker public: 98*e1eccf28SAndroid Build Coastguard Worker int8_t x, y, z, w; 99*e1eccf28SAndroid Build Coastguard Worker Byte4(int8_t initX,int8_t initY,int8_t initZ,int8_t initW)100*e1eccf28SAndroid Build Coastguard Worker Byte4(int8_t initX, int8_t initY, int8_t initZ, int8_t initW) 101*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ), w(initW) {} Byte4()102*e1eccf28SAndroid Build Coastguard Worker Byte4() : x(0), y(0), z(0), w(0) {} 103*e1eccf28SAndroid Build Coastguard Worker }; 104*e1eccf28SAndroid Build Coastguard Worker 105*e1eccf28SAndroid Build Coastguard Worker class UByte2 { 106*e1eccf28SAndroid Build Coastguard Worker public: 107*e1eccf28SAndroid Build Coastguard Worker uint8_t x, y; 108*e1eccf28SAndroid Build Coastguard Worker UByte2(uint8_t initX,uint8_t initY)109*e1eccf28SAndroid Build Coastguard Worker UByte2(uint8_t initX, uint8_t initY) 110*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY) {} UByte2()111*e1eccf28SAndroid Build Coastguard Worker UByte2() : x(0), y(0) {} 112*e1eccf28SAndroid Build Coastguard Worker }; 113*e1eccf28SAndroid Build Coastguard Worker 114*e1eccf28SAndroid Build Coastguard Worker class UByte3 { 115*e1eccf28SAndroid Build Coastguard Worker public: 116*e1eccf28SAndroid Build Coastguard Worker uint8_t x, y, z; 117*e1eccf28SAndroid Build Coastguard Worker UByte3(uint8_t initX,uint8_t initY,uint8_t initZ)118*e1eccf28SAndroid Build Coastguard Worker UByte3(uint8_t initX, uint8_t initY, uint8_t initZ) 119*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ) {} UByte3()120*e1eccf28SAndroid Build Coastguard Worker UByte3() : x(0), y(0), z(0) {} 121*e1eccf28SAndroid Build Coastguard Worker }; 122*e1eccf28SAndroid Build Coastguard Worker 123*e1eccf28SAndroid Build Coastguard Worker class UByte4 { 124*e1eccf28SAndroid Build Coastguard Worker public: 125*e1eccf28SAndroid Build Coastguard Worker uint8_t x, y, z, w; 126*e1eccf28SAndroid Build Coastguard Worker UByte4(uint8_t initX,uint8_t initY,uint8_t initZ,uint8_t initW)127*e1eccf28SAndroid Build Coastguard Worker UByte4(uint8_t initX, uint8_t initY, uint8_t initZ, uint8_t initW) 128*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ), w(initW) {} UByte4()129*e1eccf28SAndroid Build Coastguard Worker UByte4() : x(0), y(0), z(0), w(0) {} 130*e1eccf28SAndroid Build Coastguard Worker }; 131*e1eccf28SAndroid Build Coastguard Worker 132*e1eccf28SAndroid Build Coastguard Worker class Short2 { 133*e1eccf28SAndroid Build Coastguard Worker public: 134*e1eccf28SAndroid Build Coastguard Worker int16_t x, y; 135*e1eccf28SAndroid Build Coastguard Worker Short2(int16_t initX,int16_t initY)136*e1eccf28SAndroid Build Coastguard Worker Short2(int16_t initX, int16_t initY) 137*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY) {} Short2()138*e1eccf28SAndroid Build Coastguard Worker Short2() : x(0), y(0) {} 139*e1eccf28SAndroid Build Coastguard Worker }; 140*e1eccf28SAndroid Build Coastguard Worker 141*e1eccf28SAndroid Build Coastguard Worker class Short3 { 142*e1eccf28SAndroid Build Coastguard Worker public: 143*e1eccf28SAndroid Build Coastguard Worker int16_t x, y, z; 144*e1eccf28SAndroid Build Coastguard Worker Short3(int16_t initX,int16_t initY,int16_t initZ)145*e1eccf28SAndroid Build Coastguard Worker Short3(int16_t initX, int16_t initY, int16_t initZ) 146*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ) {} Short3()147*e1eccf28SAndroid Build Coastguard Worker Short3() : x(0), y(0), z(0) {} 148*e1eccf28SAndroid Build Coastguard Worker }; 149*e1eccf28SAndroid Build Coastguard Worker 150*e1eccf28SAndroid Build Coastguard Worker class Short4 { 151*e1eccf28SAndroid Build Coastguard Worker public: 152*e1eccf28SAndroid Build Coastguard Worker int16_t x, y, z, w; 153*e1eccf28SAndroid Build Coastguard Worker Short4(int16_t initX,int16_t initY,int16_t initZ,int16_t initW)154*e1eccf28SAndroid Build Coastguard Worker Short4(int16_t initX, int16_t initY, int16_t initZ, int16_t initW) 155*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ), w(initW) {} Short4()156*e1eccf28SAndroid Build Coastguard Worker Short4() : x(0), y(0), z(0), w(0) {} 157*e1eccf28SAndroid Build Coastguard Worker }; 158*e1eccf28SAndroid Build Coastguard Worker 159*e1eccf28SAndroid Build Coastguard Worker class UShort2 { 160*e1eccf28SAndroid Build Coastguard Worker public: 161*e1eccf28SAndroid Build Coastguard Worker uint16_t x, y; 162*e1eccf28SAndroid Build Coastguard Worker UShort2(uint16_t initX,uint16_t initY)163*e1eccf28SAndroid Build Coastguard Worker UShort2(uint16_t initX, uint16_t initY) 164*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY) {} UShort2()165*e1eccf28SAndroid Build Coastguard Worker UShort2() : x(0), y(0) {} 166*e1eccf28SAndroid Build Coastguard Worker }; 167*e1eccf28SAndroid Build Coastguard Worker 168*e1eccf28SAndroid Build Coastguard Worker class UShort3 { 169*e1eccf28SAndroid Build Coastguard Worker public: 170*e1eccf28SAndroid Build Coastguard Worker uint16_t x, y, z; 171*e1eccf28SAndroid Build Coastguard Worker UShort3(uint16_t initX,uint16_t initY,uint16_t initZ)172*e1eccf28SAndroid Build Coastguard Worker UShort3(uint16_t initX, uint16_t initY, uint16_t initZ) 173*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ) {} UShort3()174*e1eccf28SAndroid Build Coastguard Worker UShort3() : x(0), y(0), z(0) {} 175*e1eccf28SAndroid Build Coastguard Worker }; 176*e1eccf28SAndroid Build Coastguard Worker 177*e1eccf28SAndroid Build Coastguard Worker class UShort4 { 178*e1eccf28SAndroid Build Coastguard Worker public: 179*e1eccf28SAndroid Build Coastguard Worker uint16_t x, y, z, w; 180*e1eccf28SAndroid Build Coastguard Worker UShort4(uint16_t initX,uint16_t initY,uint16_t initZ,uint16_t initW)181*e1eccf28SAndroid Build Coastguard Worker UShort4(uint16_t initX, uint16_t initY, uint16_t initZ, uint16_t initW) 182*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ), w(initW) {} UShort4()183*e1eccf28SAndroid Build Coastguard Worker UShort4() : x(0), y(0), z(0), w(0) {} 184*e1eccf28SAndroid Build Coastguard Worker }; 185*e1eccf28SAndroid Build Coastguard Worker 186*e1eccf28SAndroid Build Coastguard Worker class Int2 { 187*e1eccf28SAndroid Build Coastguard Worker public: 188*e1eccf28SAndroid Build Coastguard Worker int x, y; 189*e1eccf28SAndroid Build Coastguard Worker Int2(int initX,int initY)190*e1eccf28SAndroid Build Coastguard Worker Int2(int initX, int initY) 191*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY) {} Int2()192*e1eccf28SAndroid Build Coastguard Worker Int2() : x(0), y(0) {} 193*e1eccf28SAndroid Build Coastguard Worker }; 194*e1eccf28SAndroid Build Coastguard Worker 195*e1eccf28SAndroid Build Coastguard Worker class Int3 { 196*e1eccf28SAndroid Build Coastguard Worker public: 197*e1eccf28SAndroid Build Coastguard Worker int x, y, z; 198*e1eccf28SAndroid Build Coastguard Worker Int3(int initX,int initY,int initZ)199*e1eccf28SAndroid Build Coastguard Worker Int3(int initX, int initY, int initZ) 200*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ) {} Int3()201*e1eccf28SAndroid Build Coastguard Worker Int3() : x(0), y(0), z(0) {} 202*e1eccf28SAndroid Build Coastguard Worker }; 203*e1eccf28SAndroid Build Coastguard Worker 204*e1eccf28SAndroid Build Coastguard Worker class Int4 { 205*e1eccf28SAndroid Build Coastguard Worker public: 206*e1eccf28SAndroid Build Coastguard Worker int x, y, z, w; 207*e1eccf28SAndroid Build Coastguard Worker Int4(int initX,int initY,int initZ,int initW)208*e1eccf28SAndroid Build Coastguard Worker Int4(int initX, int initY, int initZ, int initW) 209*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ), w(initW) {} Int4()210*e1eccf28SAndroid Build Coastguard Worker Int4() : x(0), y(0), z(0), w(0) {} 211*e1eccf28SAndroid Build Coastguard Worker }; 212*e1eccf28SAndroid Build Coastguard Worker 213*e1eccf28SAndroid Build Coastguard Worker class UInt2 { 214*e1eccf28SAndroid Build Coastguard Worker public: 215*e1eccf28SAndroid Build Coastguard Worker uint32_t x, y; 216*e1eccf28SAndroid Build Coastguard Worker UInt2(uint32_t initX,uint32_t initY)217*e1eccf28SAndroid Build Coastguard Worker UInt2(uint32_t initX, uint32_t initY) 218*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY) {} UInt2()219*e1eccf28SAndroid Build Coastguard Worker UInt2() : x(0), y(0) {} 220*e1eccf28SAndroid Build Coastguard Worker }; 221*e1eccf28SAndroid Build Coastguard Worker 222*e1eccf28SAndroid Build Coastguard Worker class UInt3 { 223*e1eccf28SAndroid Build Coastguard Worker public: 224*e1eccf28SAndroid Build Coastguard Worker uint32_t x, y, z; 225*e1eccf28SAndroid Build Coastguard Worker UInt3(uint32_t initX,uint32_t initY,uint32_t initZ)226*e1eccf28SAndroid Build Coastguard Worker UInt3(uint32_t initX, uint32_t initY, uint32_t initZ) 227*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ) {} UInt3()228*e1eccf28SAndroid Build Coastguard Worker UInt3() : x(0), y(0), z(0) {} 229*e1eccf28SAndroid Build Coastguard Worker }; 230*e1eccf28SAndroid Build Coastguard Worker 231*e1eccf28SAndroid Build Coastguard Worker class UInt4 { 232*e1eccf28SAndroid Build Coastguard Worker public: 233*e1eccf28SAndroid Build Coastguard Worker uint32_t x, y, z, w; 234*e1eccf28SAndroid Build Coastguard Worker UInt4(uint32_t initX,uint32_t initY,uint32_t initZ,uint32_t initW)235*e1eccf28SAndroid Build Coastguard Worker UInt4(uint32_t initX, uint32_t initY, uint32_t initZ, uint32_t initW) 236*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ), w(initW) {} UInt4()237*e1eccf28SAndroid Build Coastguard Worker UInt4() : x(0), y(0), z(0), w(0) {} 238*e1eccf28SAndroid Build Coastguard Worker }; 239*e1eccf28SAndroid Build Coastguard Worker 240*e1eccf28SAndroid Build Coastguard Worker class Long2 { 241*e1eccf28SAndroid Build Coastguard Worker public: 242*e1eccf28SAndroid Build Coastguard Worker int64_t x, y; 243*e1eccf28SAndroid Build Coastguard Worker Long2(int64_t initX,int64_t initY)244*e1eccf28SAndroid Build Coastguard Worker Long2(int64_t initX, int64_t initY) 245*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY) {} Long2()246*e1eccf28SAndroid Build Coastguard Worker Long2() : x(0), y(0) {} 247*e1eccf28SAndroid Build Coastguard Worker }; 248*e1eccf28SAndroid Build Coastguard Worker 249*e1eccf28SAndroid Build Coastguard Worker class Long3 { 250*e1eccf28SAndroid Build Coastguard Worker public: 251*e1eccf28SAndroid Build Coastguard Worker int64_t x, y, z; 252*e1eccf28SAndroid Build Coastguard Worker Long3(int64_t initX,int64_t initY,int64_t initZ)253*e1eccf28SAndroid Build Coastguard Worker Long3(int64_t initX, int64_t initY, int64_t initZ) 254*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ) {} Long3()255*e1eccf28SAndroid Build Coastguard Worker Long3() : x(0), y(0), z(0) {} 256*e1eccf28SAndroid Build Coastguard Worker }; 257*e1eccf28SAndroid Build Coastguard Worker 258*e1eccf28SAndroid Build Coastguard Worker class Long4 { 259*e1eccf28SAndroid Build Coastguard Worker public: 260*e1eccf28SAndroid Build Coastguard Worker int64_t x, y, z, w; 261*e1eccf28SAndroid Build Coastguard Worker Long4(int64_t initX,int64_t initY,int64_t initZ,int64_t initW)262*e1eccf28SAndroid Build Coastguard Worker Long4(int64_t initX, int64_t initY, int64_t initZ, int64_t initW) 263*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ), w(initW) {} Long4()264*e1eccf28SAndroid Build Coastguard Worker Long4() : x(0), y(0), z(0), w(0) {} 265*e1eccf28SAndroid Build Coastguard Worker }; 266*e1eccf28SAndroid Build Coastguard Worker 267*e1eccf28SAndroid Build Coastguard Worker class ULong2 { 268*e1eccf28SAndroid Build Coastguard Worker public: 269*e1eccf28SAndroid Build Coastguard Worker uint64_t x, y; 270*e1eccf28SAndroid Build Coastguard Worker ULong2(uint64_t initX,uint64_t initY)271*e1eccf28SAndroid Build Coastguard Worker ULong2(uint64_t initX, uint64_t initY) 272*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY) {} ULong2()273*e1eccf28SAndroid Build Coastguard Worker ULong2() : x(0), y(0) {} 274*e1eccf28SAndroid Build Coastguard Worker }; 275*e1eccf28SAndroid Build Coastguard Worker 276*e1eccf28SAndroid Build Coastguard Worker class ULong3 { 277*e1eccf28SAndroid Build Coastguard Worker public: 278*e1eccf28SAndroid Build Coastguard Worker uint64_t x, y, z; 279*e1eccf28SAndroid Build Coastguard Worker ULong3(uint64_t initX,uint64_t initY,uint64_t initZ)280*e1eccf28SAndroid Build Coastguard Worker ULong3(uint64_t initX, uint64_t initY, uint64_t initZ) 281*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ) {} ULong3()282*e1eccf28SAndroid Build Coastguard Worker ULong3() : x(0), y(0), z(0) {} 283*e1eccf28SAndroid Build Coastguard Worker }; 284*e1eccf28SAndroid Build Coastguard Worker 285*e1eccf28SAndroid Build Coastguard Worker class ULong4 { 286*e1eccf28SAndroid Build Coastguard Worker public: 287*e1eccf28SAndroid Build Coastguard Worker uint64_t x, y, z, w; 288*e1eccf28SAndroid Build Coastguard Worker ULong4(uint64_t initX,uint64_t initY,uint64_t initZ,uint64_t initW)289*e1eccf28SAndroid Build Coastguard Worker ULong4(uint64_t initX, uint64_t initY, uint64_t initZ, uint64_t initW) 290*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ), w(initW) {} ULong4()291*e1eccf28SAndroid Build Coastguard Worker ULong4() : x(0), y(0), z(0), w(0) {} 292*e1eccf28SAndroid Build Coastguard Worker }; 293*e1eccf28SAndroid Build Coastguard Worker 294*e1eccf28SAndroid Build Coastguard Worker class Float2 { 295*e1eccf28SAndroid Build Coastguard Worker public: 296*e1eccf28SAndroid Build Coastguard Worker float x, y; 297*e1eccf28SAndroid Build Coastguard Worker Float2(float initX,float initY)298*e1eccf28SAndroid Build Coastguard Worker Float2(float initX, float initY) 299*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY) {} Float2()300*e1eccf28SAndroid Build Coastguard Worker Float2() : x(0), y(0) {} 301*e1eccf28SAndroid Build Coastguard Worker }; 302*e1eccf28SAndroid Build Coastguard Worker 303*e1eccf28SAndroid Build Coastguard Worker class Float3 { 304*e1eccf28SAndroid Build Coastguard Worker public: 305*e1eccf28SAndroid Build Coastguard Worker float x, y, z; 306*e1eccf28SAndroid Build Coastguard Worker Float3(float initX,float initY,float initZ)307*e1eccf28SAndroid Build Coastguard Worker Float3(float initX, float initY, float initZ) 308*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ) {} Float3()309*e1eccf28SAndroid Build Coastguard Worker Float3() : x(0.f), y(0.f), z(0.f) {} 310*e1eccf28SAndroid Build Coastguard Worker }; 311*e1eccf28SAndroid Build Coastguard Worker 312*e1eccf28SAndroid Build Coastguard Worker class Float4 { 313*e1eccf28SAndroid Build Coastguard Worker public: 314*e1eccf28SAndroid Build Coastguard Worker float x, y, z, w; 315*e1eccf28SAndroid Build Coastguard Worker Float4(float initX,float initY,float initZ,float initW)316*e1eccf28SAndroid Build Coastguard Worker Float4(float initX, float initY, float initZ, float initW) 317*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ), w(initW) {} Float4()318*e1eccf28SAndroid Build Coastguard Worker Float4() : x(0.f), y(0.f), z(0.f), w(0.f) {} 319*e1eccf28SAndroid Build Coastguard Worker }; 320*e1eccf28SAndroid Build Coastguard Worker 321*e1eccf28SAndroid Build Coastguard Worker class Double2 { 322*e1eccf28SAndroid Build Coastguard Worker public: 323*e1eccf28SAndroid Build Coastguard Worker double x, y; 324*e1eccf28SAndroid Build Coastguard Worker Double2(double initX,double initY)325*e1eccf28SAndroid Build Coastguard Worker Double2(double initX, double initY) 326*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY) {} Double2()327*e1eccf28SAndroid Build Coastguard Worker Double2() : x(0), y(0) {} 328*e1eccf28SAndroid Build Coastguard Worker }; 329*e1eccf28SAndroid Build Coastguard Worker 330*e1eccf28SAndroid Build Coastguard Worker class Double3 { 331*e1eccf28SAndroid Build Coastguard Worker public: 332*e1eccf28SAndroid Build Coastguard Worker double x, y, z; 333*e1eccf28SAndroid Build Coastguard Worker Double3(double initX,double initY,double initZ)334*e1eccf28SAndroid Build Coastguard Worker Double3(double initX, double initY, double initZ) 335*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ) {} Double3()336*e1eccf28SAndroid Build Coastguard Worker Double3() : x(0), y(0), z(0) {} 337*e1eccf28SAndroid Build Coastguard Worker }; 338*e1eccf28SAndroid Build Coastguard Worker 339*e1eccf28SAndroid Build Coastguard Worker class Double4 { 340*e1eccf28SAndroid Build Coastguard Worker public: 341*e1eccf28SAndroid Build Coastguard Worker double x, y, z, w; 342*e1eccf28SAndroid Build Coastguard Worker Double4(double initX,double initY,double initZ,double initW)343*e1eccf28SAndroid Build Coastguard Worker Double4(double initX, double initY, double initZ, double initW) 344*e1eccf28SAndroid Build Coastguard Worker : x(initX), y(initY), z(initZ), w(initW) {} Double4()345*e1eccf28SAndroid Build Coastguard Worker Double4() : x(0), y(0), z(0), w(0) {} 346*e1eccf28SAndroid Build Coastguard Worker }; 347*e1eccf28SAndroid Build Coastguard Worker 348*e1eccf28SAndroid Build Coastguard Worker /** 349*e1eccf28SAndroid Build Coastguard Worker * The RenderScript context. This class controls initialization, resource management, and teardown. 350*e1eccf28SAndroid Build Coastguard Worker */ 351*e1eccf28SAndroid Build Coastguard Worker class RS : public android::RSC::LightRefBase<RS> { 352*e1eccf28SAndroid Build Coastguard Worker 353*e1eccf28SAndroid Build Coastguard Worker public: 354*e1eccf28SAndroid Build Coastguard Worker RS(); 355*e1eccf28SAndroid Build Coastguard Worker virtual ~RS(); 356*e1eccf28SAndroid Build Coastguard Worker 357*e1eccf28SAndroid Build Coastguard Worker /** 358*e1eccf28SAndroid Build Coastguard Worker * Initializes a RenderScript context. A context must be initialized before it can be used. 359*e1eccf28SAndroid Build Coastguard Worker * @param[in] name Directory name to be used by this context. This should be equivalent to 360*e1eccf28SAndroid Build Coastguard Worker * Context.getCacheDir(). 361*e1eccf28SAndroid Build Coastguard Worker * @param[in] flags Optional flags for this context. 362*e1eccf28SAndroid Build Coastguard Worker * @return true on success 363*e1eccf28SAndroid Build Coastguard Worker */ 364*e1eccf28SAndroid Build Coastguard Worker bool init(const char * name, uint32_t flags = 0); 365*e1eccf28SAndroid Build Coastguard Worker 366*e1eccf28SAndroid Build Coastguard Worker /** 367*e1eccf28SAndroid Build Coastguard Worker * Initializes a RenderScript context. A context must be initialized before it can be used. 368*e1eccf28SAndroid Build Coastguard Worker * @param[in] name Directory name to be used by this context. This should be equivalent to 369*e1eccf28SAndroid Build Coastguard Worker * Context.getCacheDir(). 370*e1eccf28SAndroid Build Coastguard Worker * @param[in] flags Flags for this context. 371*e1eccf28SAndroid Build Coastguard Worker * @param[in] targetApi Target RS API level. 372*e1eccf28SAndroid Build Coastguard Worker * @return true on success 373*e1eccf28SAndroid Build Coastguard Worker */ 374*e1eccf28SAndroid Build Coastguard Worker bool init(const char * name, uint32_t flags, int targetApi); 375*e1eccf28SAndroid Build Coastguard Worker 376*e1eccf28SAndroid Build Coastguard Worker /** 377*e1eccf28SAndroid Build Coastguard Worker * Sets the error handler function for this context. This error handler is 378*e1eccf28SAndroid Build Coastguard Worker * called whenever an error is set. 379*e1eccf28SAndroid Build Coastguard Worker * 380*e1eccf28SAndroid Build Coastguard Worker * @param[in] func Error handler function 381*e1eccf28SAndroid Build Coastguard Worker */ 382*e1eccf28SAndroid Build Coastguard Worker void setErrorHandler(ErrorHandlerFunc_t func); 383*e1eccf28SAndroid Build Coastguard Worker 384*e1eccf28SAndroid Build Coastguard Worker /** 385*e1eccf28SAndroid Build Coastguard Worker * Returns the current error handler function for this context. 386*e1eccf28SAndroid Build Coastguard Worker * 387*e1eccf28SAndroid Build Coastguard Worker * @return pointer to current error handler function or NULL if not set 388*e1eccf28SAndroid Build Coastguard Worker */ getErrorHandler()389*e1eccf28SAndroid Build Coastguard Worker ErrorHandlerFunc_t getErrorHandler() { return mErrorFunc; } 390*e1eccf28SAndroid Build Coastguard Worker 391*e1eccf28SAndroid Build Coastguard Worker /** 392*e1eccf28SAndroid Build Coastguard Worker * Sets the message handler function for this context. This message handler 393*e1eccf28SAndroid Build Coastguard Worker * is called whenever a message is sent from a RenderScript kernel. 394*e1eccf28SAndroid Build Coastguard Worker * 395*e1eccf28SAndroid Build Coastguard Worker * @param[in] func Message handler function 396*e1eccf28SAndroid Build Coastguard Worker */ 397*e1eccf28SAndroid Build Coastguard Worker void setMessageHandler(MessageHandlerFunc_t func); 398*e1eccf28SAndroid Build Coastguard Worker 399*e1eccf28SAndroid Build Coastguard Worker /** 400*e1eccf28SAndroid Build Coastguard Worker * Returns the current message handler function for this context. 401*e1eccf28SAndroid Build Coastguard Worker * 402*e1eccf28SAndroid Build Coastguard Worker * @return pointer to current message handler function or NULL if not set 403*e1eccf28SAndroid Build Coastguard Worker */ getMessageHandler()404*e1eccf28SAndroid Build Coastguard Worker MessageHandlerFunc_t getMessageHandler() { return mMessageFunc; } 405*e1eccf28SAndroid Build Coastguard Worker 406*e1eccf28SAndroid Build Coastguard Worker /** 407*e1eccf28SAndroid Build Coastguard Worker * Returns current status for the context. 408*e1eccf28SAndroid Build Coastguard Worker * 409*e1eccf28SAndroid Build Coastguard Worker * @return current error 410*e1eccf28SAndroid Build Coastguard Worker */ 411*e1eccf28SAndroid Build Coastguard Worker RSError getError(); 412*e1eccf28SAndroid Build Coastguard Worker 413*e1eccf28SAndroid Build Coastguard Worker /** 414*e1eccf28SAndroid Build Coastguard Worker * Waits for any currently running asynchronous operations to finish. This 415*e1eccf28SAndroid Build Coastguard Worker * should only be used for performance testing and timing. 416*e1eccf28SAndroid Build Coastguard Worker */ 417*e1eccf28SAndroid Build Coastguard Worker void finish(); 418*e1eccf28SAndroid Build Coastguard Worker getContext()419*e1eccf28SAndroid Build Coastguard Worker RsContext getContext() { return mContext; } 420*e1eccf28SAndroid Build Coastguard Worker void throwError(RSError error, const char *errMsg); 421*e1eccf28SAndroid Build Coastguard Worker 422*e1eccf28SAndroid Build Coastguard Worker static dispatchTable* dispatch; 423*e1eccf28SAndroid Build Coastguard Worker 424*e1eccf28SAndroid Build Coastguard Worker private: 425*e1eccf28SAndroid Build Coastguard Worker static bool usingNative; 426*e1eccf28SAndroid Build Coastguard Worker static bool initDispatch(int targetApi); 427*e1eccf28SAndroid Build Coastguard Worker 428*e1eccf28SAndroid Build Coastguard Worker static void * threadProc(void *); 429*e1eccf28SAndroid Build Coastguard Worker 430*e1eccf28SAndroid Build Coastguard Worker static bool gInitialized; 431*e1eccf28SAndroid Build Coastguard Worker static pthread_mutex_t gInitMutex; 432*e1eccf28SAndroid Build Coastguard Worker 433*e1eccf28SAndroid Build Coastguard Worker pthread_t mMessageThreadId; 434*e1eccf28SAndroid Build Coastguard Worker pid_t mNativeMessageThreadId; 435*e1eccf28SAndroid Build Coastguard Worker bool mMessageRun; 436*e1eccf28SAndroid Build Coastguard Worker 437*e1eccf28SAndroid Build Coastguard Worker RsContext mContext; 438*e1eccf28SAndroid Build Coastguard Worker RSError mCurrentError; 439*e1eccf28SAndroid Build Coastguard Worker 440*e1eccf28SAndroid Build Coastguard Worker ErrorHandlerFunc_t mErrorFunc; 441*e1eccf28SAndroid Build Coastguard Worker MessageHandlerFunc_t mMessageFunc; 442*e1eccf28SAndroid Build Coastguard Worker bool mInit; 443*e1eccf28SAndroid Build Coastguard Worker 444*e1eccf28SAndroid Build Coastguard Worker char mCacheDir[PATH_MAX+1]; 445*e1eccf28SAndroid Build Coastguard Worker uint32_t mCacheDirLen; 446*e1eccf28SAndroid Build Coastguard Worker 447*e1eccf28SAndroid Build Coastguard Worker struct { 448*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U8; 449*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U8_2; 450*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U8_3; 451*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U8_4; 452*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I8; 453*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I8_2; 454*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I8_3; 455*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I8_4; 456*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U16; 457*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U16_2; 458*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U16_3; 459*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U16_4; 460*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I16; 461*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I16_2; 462*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I16_3; 463*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I16_4; 464*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U32; 465*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U32_2; 466*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U32_3; 467*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U32_4; 468*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I32; 469*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I32_2; 470*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I32_3; 471*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I32_4; 472*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U64; 473*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U64_2; 474*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U64_3; 475*e1eccf28SAndroid Build Coastguard Worker sp<const Element> U64_4; 476*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I64; 477*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I64_2; 478*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I64_3; 479*e1eccf28SAndroid Build Coastguard Worker sp<const Element> I64_4; 480*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F16; 481*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F16_2; 482*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F16_3; 483*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F16_4; 484*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F32; 485*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F32_2; 486*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F32_3; 487*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F32_4; 488*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F64; 489*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F64_2; 490*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F64_3; 491*e1eccf28SAndroid Build Coastguard Worker sp<const Element> F64_4; 492*e1eccf28SAndroid Build Coastguard Worker sp<const Element> BOOLEAN; 493*e1eccf28SAndroid Build Coastguard Worker 494*e1eccf28SAndroid Build Coastguard Worker sp<const Element> ELEMENT; 495*e1eccf28SAndroid Build Coastguard Worker sp<const Element> TYPE; 496*e1eccf28SAndroid Build Coastguard Worker sp<const Element> ALLOCATION; 497*e1eccf28SAndroid Build Coastguard Worker sp<const Element> SAMPLER; 498*e1eccf28SAndroid Build Coastguard Worker sp<const Element> SCRIPT; 499*e1eccf28SAndroid Build Coastguard Worker sp<const Element> MESH; 500*e1eccf28SAndroid Build Coastguard Worker sp<const Element> PROGRAM_FRAGMENT; 501*e1eccf28SAndroid Build Coastguard Worker sp<const Element> PROGRAM_VERTEX; 502*e1eccf28SAndroid Build Coastguard Worker sp<const Element> PROGRAM_RASTER; 503*e1eccf28SAndroid Build Coastguard Worker sp<const Element> PROGRAM_STORE; 504*e1eccf28SAndroid Build Coastguard Worker 505*e1eccf28SAndroid Build Coastguard Worker sp<const Element> A_8; 506*e1eccf28SAndroid Build Coastguard Worker sp<const Element> RGB_565; 507*e1eccf28SAndroid Build Coastguard Worker sp<const Element> RGB_888; 508*e1eccf28SAndroid Build Coastguard Worker sp<const Element> RGBA_5551; 509*e1eccf28SAndroid Build Coastguard Worker sp<const Element> RGBA_4444; 510*e1eccf28SAndroid Build Coastguard Worker sp<const Element> RGBA_8888; 511*e1eccf28SAndroid Build Coastguard Worker 512*e1eccf28SAndroid Build Coastguard Worker sp<const Element> YUV; 513*e1eccf28SAndroid Build Coastguard Worker 514*e1eccf28SAndroid Build Coastguard Worker sp<const Element> MATRIX_4X4; 515*e1eccf28SAndroid Build Coastguard Worker sp<const Element> MATRIX_3X3; 516*e1eccf28SAndroid Build Coastguard Worker sp<const Element> MATRIX_2X2; 517*e1eccf28SAndroid Build Coastguard Worker } mElements; 518*e1eccf28SAndroid Build Coastguard Worker 519*e1eccf28SAndroid Build Coastguard Worker struct { 520*e1eccf28SAndroid Build Coastguard Worker sp<const Sampler> CLAMP_NEAREST; 521*e1eccf28SAndroid Build Coastguard Worker sp<const Sampler> CLAMP_LINEAR; 522*e1eccf28SAndroid Build Coastguard Worker sp<const Sampler> CLAMP_LINEAR_MIP_LINEAR; 523*e1eccf28SAndroid Build Coastguard Worker sp<const Sampler> WRAP_NEAREST; 524*e1eccf28SAndroid Build Coastguard Worker sp<const Sampler> WRAP_LINEAR; 525*e1eccf28SAndroid Build Coastguard Worker sp<const Sampler> WRAP_LINEAR_MIP_LINEAR; 526*e1eccf28SAndroid Build Coastguard Worker sp<const Sampler> MIRRORED_REPEAT_NEAREST; 527*e1eccf28SAndroid Build Coastguard Worker sp<const Sampler> MIRRORED_REPEAT_LINEAR; 528*e1eccf28SAndroid Build Coastguard Worker sp<const Sampler> MIRRORED_REPEAT_LINEAR_MIP_LINEAR; 529*e1eccf28SAndroid Build Coastguard Worker } mSamplers; 530*e1eccf28SAndroid Build Coastguard Worker friend class Sampler; 531*e1eccf28SAndroid Build Coastguard Worker friend class Element; 532*e1eccf28SAndroid Build Coastguard Worker friend class ScriptC; 533*e1eccf28SAndroid Build Coastguard Worker }; 534*e1eccf28SAndroid Build Coastguard Worker 535*e1eccf28SAndroid Build Coastguard Worker /** 536*e1eccf28SAndroid Build Coastguard Worker * Base class for all RenderScript objects. Not for direct use by developers. 537*e1eccf28SAndroid Build Coastguard Worker */ 538*e1eccf28SAndroid Build Coastguard Worker class BaseObj : public android::RSC::LightRefBase<BaseObj> { 539*e1eccf28SAndroid Build Coastguard Worker public: 540*e1eccf28SAndroid Build Coastguard Worker void * getID() const; 541*e1eccf28SAndroid Build Coastguard Worker virtual ~BaseObj(); 542*e1eccf28SAndroid Build Coastguard Worker virtual void updateFromNative(); 543*e1eccf28SAndroid Build Coastguard Worker virtual bool equals(const sp<const BaseObj>& obj); 544*e1eccf28SAndroid Build Coastguard Worker 545*e1eccf28SAndroid Build Coastguard Worker protected: 546*e1eccf28SAndroid Build Coastguard Worker void *mID; 547*e1eccf28SAndroid Build Coastguard Worker RS* mRS; 548*e1eccf28SAndroid Build Coastguard Worker const char * mName; 549*e1eccf28SAndroid Build Coastguard Worker 550*e1eccf28SAndroid Build Coastguard Worker BaseObj(void *id, sp<RS> rs); 551*e1eccf28SAndroid Build Coastguard Worker void checkValid(); 552*e1eccf28SAndroid Build Coastguard Worker 553*e1eccf28SAndroid Build Coastguard Worker static void * getObjID(const sp<const BaseObj>& o); 554*e1eccf28SAndroid Build Coastguard Worker 555*e1eccf28SAndroid Build Coastguard Worker }; 556*e1eccf28SAndroid Build Coastguard Worker 557*e1eccf28SAndroid Build Coastguard Worker /** 558*e1eccf28SAndroid Build Coastguard Worker * This class provides the primary method through which data is passed to and 559*e1eccf28SAndroid Build Coastguard Worker * from RenderScript kernels. An Allocation provides the backing store for a 560*e1eccf28SAndroid Build Coastguard Worker * given Type. 561*e1eccf28SAndroid Build Coastguard Worker * 562*e1eccf28SAndroid Build Coastguard Worker * An Allocation also contains a set of usage flags that denote how the 563*e1eccf28SAndroid Build Coastguard Worker * Allocation could be used. For example, an Allocation may have usage flags 564*e1eccf28SAndroid Build Coastguard Worker * specifying that it can be used from a script as well as input to a 565*e1eccf28SAndroid Build Coastguard Worker * Sampler. A developer must synchronize across these different usages using 566*e1eccf28SAndroid Build Coastguard Worker * syncAll(int) in order to ensure that different users of the Allocation have 567*e1eccf28SAndroid Build Coastguard Worker * a consistent view of memory. For example, in the case where an Allocation is 568*e1eccf28SAndroid Build Coastguard Worker * used as the output of one kernel and as Sampler input in a later kernel, a 569*e1eccf28SAndroid Build Coastguard Worker * developer must call syncAll(RS_ALLOCATION_USAGE_SCRIPT) prior to launching the 570*e1eccf28SAndroid Build Coastguard Worker * second kernel to ensure correctness. 571*e1eccf28SAndroid Build Coastguard Worker */ 572*e1eccf28SAndroid Build Coastguard Worker class Allocation : public BaseObj { 573*e1eccf28SAndroid Build Coastguard Worker protected: 574*e1eccf28SAndroid Build Coastguard Worker sp<const Type> mType; 575*e1eccf28SAndroid Build Coastguard Worker uint32_t mUsage; 576*e1eccf28SAndroid Build Coastguard Worker sp<Allocation> mAdaptedAllocation; 577*e1eccf28SAndroid Build Coastguard Worker 578*e1eccf28SAndroid Build Coastguard Worker bool mConstrainedLOD; 579*e1eccf28SAndroid Build Coastguard Worker bool mConstrainedFace; 580*e1eccf28SAndroid Build Coastguard Worker bool mConstrainedY; 581*e1eccf28SAndroid Build Coastguard Worker bool mConstrainedZ; 582*e1eccf28SAndroid Build Coastguard Worker bool mReadAllowed; 583*e1eccf28SAndroid Build Coastguard Worker bool mWriteAllowed; 584*e1eccf28SAndroid Build Coastguard Worker bool mAutoPadding; 585*e1eccf28SAndroid Build Coastguard Worker uint32_t mSelectedY; 586*e1eccf28SAndroid Build Coastguard Worker uint32_t mSelectedZ; 587*e1eccf28SAndroid Build Coastguard Worker uint32_t mSelectedLOD; 588*e1eccf28SAndroid Build Coastguard Worker RsAllocationCubemapFace mSelectedFace; 589*e1eccf28SAndroid Build Coastguard Worker 590*e1eccf28SAndroid Build Coastguard Worker uint32_t mCurrentDimX; 591*e1eccf28SAndroid Build Coastguard Worker uint32_t mCurrentDimY; 592*e1eccf28SAndroid Build Coastguard Worker uint32_t mCurrentDimZ; 593*e1eccf28SAndroid Build Coastguard Worker uint32_t mCurrentCount; 594*e1eccf28SAndroid Build Coastguard Worker 595*e1eccf28SAndroid Build Coastguard Worker void * getIDSafe() const; 596*e1eccf28SAndroid Build Coastguard Worker void updateCacheInfo(const sp<const Type>& t); 597*e1eccf28SAndroid Build Coastguard Worker 598*e1eccf28SAndroid Build Coastguard Worker Allocation(void *id, sp<RS> rs, sp<const Type> t, uint32_t usage); 599*e1eccf28SAndroid Build Coastguard Worker 600*e1eccf28SAndroid Build Coastguard Worker void validateIsInt64(); 601*e1eccf28SAndroid Build Coastguard Worker void validateIsInt32(); 602*e1eccf28SAndroid Build Coastguard Worker void validateIsInt16(); 603*e1eccf28SAndroid Build Coastguard Worker void validateIsInt8(); 604*e1eccf28SAndroid Build Coastguard Worker void validateIsFloat32(); 605*e1eccf28SAndroid Build Coastguard Worker void validateIsFloat64(); 606*e1eccf28SAndroid Build Coastguard Worker void validateIsObject(); 607*e1eccf28SAndroid Build Coastguard Worker 608*e1eccf28SAndroid Build Coastguard Worker virtual void updateFromNative(); 609*e1eccf28SAndroid Build Coastguard Worker 610*e1eccf28SAndroid Build Coastguard Worker void validate2DRange(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h); 611*e1eccf28SAndroid Build Coastguard Worker void validate3DRange(uint32_t xoff, uint32_t yoff, uint32_t zoff, 612*e1eccf28SAndroid Build Coastguard Worker uint32_t w, uint32_t h, uint32_t d); 613*e1eccf28SAndroid Build Coastguard Worker 614*e1eccf28SAndroid Build Coastguard Worker public: 615*e1eccf28SAndroid Build Coastguard Worker 616*e1eccf28SAndroid Build Coastguard Worker /** 617*e1eccf28SAndroid Build Coastguard Worker * Return Type for the allocation. 618*e1eccf28SAndroid Build Coastguard Worker * @return pointer to underlying Type 619*e1eccf28SAndroid Build Coastguard Worker */ getType()620*e1eccf28SAndroid Build Coastguard Worker sp<const Type> getType() const { 621*e1eccf28SAndroid Build Coastguard Worker return mType; 622*e1eccf28SAndroid Build Coastguard Worker } 623*e1eccf28SAndroid Build Coastguard Worker 624*e1eccf28SAndroid Build Coastguard Worker /** 625*e1eccf28SAndroid Build Coastguard Worker * Enable/Disable AutoPadding for Vec3 elements. 626*e1eccf28SAndroid Build Coastguard Worker * 627*e1eccf28SAndroid Build Coastguard Worker * @param useAutoPadding True: enable AutoPadding; flase: disable AutoPadding 628*e1eccf28SAndroid Build Coastguard Worker * 629*e1eccf28SAndroid Build Coastguard Worker */ setAutoPadding(bool useAutoPadding)630*e1eccf28SAndroid Build Coastguard Worker void setAutoPadding(bool useAutoPadding) { 631*e1eccf28SAndroid Build Coastguard Worker mAutoPadding = useAutoPadding; 632*e1eccf28SAndroid Build Coastguard Worker } 633*e1eccf28SAndroid Build Coastguard Worker 634*e1eccf28SAndroid Build Coastguard Worker /** 635*e1eccf28SAndroid Build Coastguard Worker * Propagate changes from one usage of the Allocation to other usages of the Allocation. 636*e1eccf28SAndroid Build Coastguard Worker * @param[in] srcLocation source location with changes to propagate elsewhere 637*e1eccf28SAndroid Build Coastguard Worker */ 638*e1eccf28SAndroid Build Coastguard Worker void syncAll(RsAllocationUsageType srcLocation); 639*e1eccf28SAndroid Build Coastguard Worker 640*e1eccf28SAndroid Build Coastguard Worker /** 641*e1eccf28SAndroid Build Coastguard Worker * Send a buffer to the output stream. The contents of the Allocation will 642*e1eccf28SAndroid Build Coastguard Worker * be undefined after this operation. This operation is only valid if 643*e1eccf28SAndroid Build Coastguard Worker * USAGE_IO_OUTPUT is set on the Allocation. 644*e1eccf28SAndroid Build Coastguard Worker */ 645*e1eccf28SAndroid Build Coastguard Worker void ioSendOutput(); 646*e1eccf28SAndroid Build Coastguard Worker 647*e1eccf28SAndroid Build Coastguard Worker /** 648*e1eccf28SAndroid Build Coastguard Worker * Receive the latest input into the Allocation. This operation 649*e1eccf28SAndroid Build Coastguard Worker * is only valid if USAGE_IO_INPUT is set on the Allocation. 650*e1eccf28SAndroid Build Coastguard Worker */ 651*e1eccf28SAndroid Build Coastguard Worker void ioGetInput(); 652*e1eccf28SAndroid Build Coastguard Worker 653*e1eccf28SAndroid Build Coastguard Worker /** 654*e1eccf28SAndroid Build Coastguard Worker * Generate a mipmap chain. This is only valid if the Type of the Allocation 655*e1eccf28SAndroid Build Coastguard Worker * includes mipmaps. This function will generate a complete set of mipmaps 656*e1eccf28SAndroid Build Coastguard Worker * from the top level LOD and place them into the script memory space. If 657*e1eccf28SAndroid Build Coastguard Worker * the Allocation is also using other memory spaces, a call to 658*e1eccf28SAndroid Build Coastguard Worker * syncAll(Allocation.USAGE_SCRIPT) is required. 659*e1eccf28SAndroid Build Coastguard Worker */ 660*e1eccf28SAndroid Build Coastguard Worker void generateMipmaps(); 661*e1eccf28SAndroid Build Coastguard Worker 662*e1eccf28SAndroid Build Coastguard Worker /** 663*e1eccf28SAndroid Build Coastguard Worker * Copy an array into part of this Allocation. 664*e1eccf28SAndroid Build Coastguard Worker * @param[in] off offset of first Element to be overwritten 665*e1eccf28SAndroid Build Coastguard Worker * @param[in] count number of Elements to copy 666*e1eccf28SAndroid Build Coastguard Worker * @param[in] data array from which to copy 667*e1eccf28SAndroid Build Coastguard Worker */ 668*e1eccf28SAndroid Build Coastguard Worker void copy1DRangeFrom(uint32_t off, size_t count, const void *data); 669*e1eccf28SAndroid Build Coastguard Worker 670*e1eccf28SAndroid Build Coastguard Worker /** 671*e1eccf28SAndroid Build Coastguard Worker * Copy part of an Allocation into part of this Allocation. 672*e1eccf28SAndroid Build Coastguard Worker * @param[in] off offset of first Element to be overwritten 673*e1eccf28SAndroid Build Coastguard Worker * @param[in] count number of Elements to copy 674*e1eccf28SAndroid Build Coastguard Worker * @param[in] data Allocation from which to copy 675*e1eccf28SAndroid Build Coastguard Worker * @param[in] dataOff offset of first Element in data to copy 676*e1eccf28SAndroid Build Coastguard Worker */ 677*e1eccf28SAndroid Build Coastguard Worker void copy1DRangeFrom(uint32_t off, size_t count, const sp<const Allocation>& data, uint32_t dataOff); 678*e1eccf28SAndroid Build Coastguard Worker 679*e1eccf28SAndroid Build Coastguard Worker /** 680*e1eccf28SAndroid Build Coastguard Worker * Copy an array into part of this Allocation. 681*e1eccf28SAndroid Build Coastguard Worker * @param[in] off offset of first Element to be overwritten 682*e1eccf28SAndroid Build Coastguard Worker * @param[in] count number of Elements to copy 683*e1eccf28SAndroid Build Coastguard Worker * @param[in] data array from which to copy 684*e1eccf28SAndroid Build Coastguard Worker */ 685*e1eccf28SAndroid Build Coastguard Worker void copy1DRangeTo(uint32_t off, size_t count, void *data); 686*e1eccf28SAndroid Build Coastguard Worker 687*e1eccf28SAndroid Build Coastguard Worker /** 688*e1eccf28SAndroid Build Coastguard Worker * Copy entire array to an Allocation. 689*e1eccf28SAndroid Build Coastguard Worker * @param[in] data array from which to copy 690*e1eccf28SAndroid Build Coastguard Worker */ 691*e1eccf28SAndroid Build Coastguard Worker void copy1DFrom(const void* data); 692*e1eccf28SAndroid Build Coastguard Worker 693*e1eccf28SAndroid Build Coastguard Worker /** 694*e1eccf28SAndroid Build Coastguard Worker * Copy entire Allocation to an array. 695*e1eccf28SAndroid Build Coastguard Worker * @param[in] data destination array 696*e1eccf28SAndroid Build Coastguard Worker */ 697*e1eccf28SAndroid Build Coastguard Worker void copy1DTo(void* data); 698*e1eccf28SAndroid Build Coastguard Worker 699*e1eccf28SAndroid Build Coastguard Worker /** 700*e1eccf28SAndroid Build Coastguard Worker * Copy from an array into a rectangular region in this Allocation. The 701*e1eccf28SAndroid Build Coastguard Worker * array is assumed to be tightly packed. 702*e1eccf28SAndroid Build Coastguard Worker * @param[in] xoff X offset of region to update in this Allocation 703*e1eccf28SAndroid Build Coastguard Worker * @param[in] yoff Y offset of region to update in this Allocation 704*e1eccf28SAndroid Build Coastguard Worker * @param[in] w Width of region to update 705*e1eccf28SAndroid Build Coastguard Worker * @param[in] h Height of region to update 706*e1eccf28SAndroid Build Coastguard Worker * @param[in] data Array from which to copy 707*e1eccf28SAndroid Build Coastguard Worker */ 708*e1eccf28SAndroid Build Coastguard Worker void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 709*e1eccf28SAndroid Build Coastguard Worker const void *data); 710*e1eccf28SAndroid Build Coastguard Worker 711*e1eccf28SAndroid Build Coastguard Worker /** 712*e1eccf28SAndroid Build Coastguard Worker * Copy from this Allocation into a rectangular region in an array. The 713*e1eccf28SAndroid Build Coastguard Worker * array is assumed to be tightly packed. 714*e1eccf28SAndroid Build Coastguard Worker * @param[in] xoff X offset of region to copy from this Allocation 715*e1eccf28SAndroid Build Coastguard Worker * @param[in] yoff Y offset of region to copy from this Allocation 716*e1eccf28SAndroid Build Coastguard Worker * @param[in] w Width of region to update 717*e1eccf28SAndroid Build Coastguard Worker * @param[in] h Height of region to update 718*e1eccf28SAndroid Build Coastguard Worker * @param[in] data destination array 719*e1eccf28SAndroid Build Coastguard Worker */ 720*e1eccf28SAndroid Build Coastguard Worker void copy2DRangeTo(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 721*e1eccf28SAndroid Build Coastguard Worker void *data); 722*e1eccf28SAndroid Build Coastguard Worker 723*e1eccf28SAndroid Build Coastguard Worker /** 724*e1eccf28SAndroid Build Coastguard Worker * Copy from an Allocation into a rectangular region in this Allocation. 725*e1eccf28SAndroid Build Coastguard Worker * @param[in] xoff X offset of region to update in this Allocation 726*e1eccf28SAndroid Build Coastguard Worker * @param[in] yoff Y offset of region to update in this Allocation 727*e1eccf28SAndroid Build Coastguard Worker * @param[in] w Width of region to update 728*e1eccf28SAndroid Build Coastguard Worker * @param[in] h Height of region to update 729*e1eccf28SAndroid Build Coastguard Worker * @param[in] data Allocation from which to copy 730*e1eccf28SAndroid Build Coastguard Worker * @param[in] dataXoff X offset of region to copy from in data 731*e1eccf28SAndroid Build Coastguard Worker * @param[in] dataYoff Y offset of region to copy from in data 732*e1eccf28SAndroid Build Coastguard Worker */ 733*e1eccf28SAndroid Build Coastguard Worker void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 734*e1eccf28SAndroid Build Coastguard Worker const sp<const Allocation>& data, uint32_t dataXoff, uint32_t dataYoff); 735*e1eccf28SAndroid Build Coastguard Worker 736*e1eccf28SAndroid Build Coastguard Worker /** 737*e1eccf28SAndroid Build Coastguard Worker * Copy from a strided array into a rectangular region in this Allocation. 738*e1eccf28SAndroid Build Coastguard Worker * @param[in] xoff X offset of region to update in this Allocation 739*e1eccf28SAndroid Build Coastguard Worker * @param[in] yoff Y offset of region to update in this Allocation 740*e1eccf28SAndroid Build Coastguard Worker * @param[in] w Width of region to update 741*e1eccf28SAndroid Build Coastguard Worker * @param[in] h Height of region to update 742*e1eccf28SAndroid Build Coastguard Worker * @param[in] data array from which to copy 743*e1eccf28SAndroid Build Coastguard Worker * @param[in] stride stride of data in bytes 744*e1eccf28SAndroid Build Coastguard Worker */ 745*e1eccf28SAndroid Build Coastguard Worker void copy2DStridedFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 746*e1eccf28SAndroid Build Coastguard Worker const void *data, size_t stride); 747*e1eccf28SAndroid Build Coastguard Worker 748*e1eccf28SAndroid Build Coastguard Worker /** 749*e1eccf28SAndroid Build Coastguard Worker * Copy from a strided array into this Allocation. 750*e1eccf28SAndroid Build Coastguard Worker * @param[in] data array from which to copy 751*e1eccf28SAndroid Build Coastguard Worker * @param[in] stride stride of data in bytes 752*e1eccf28SAndroid Build Coastguard Worker */ 753*e1eccf28SAndroid Build Coastguard Worker void copy2DStridedFrom(const void *data, size_t stride); 754*e1eccf28SAndroid Build Coastguard Worker 755*e1eccf28SAndroid Build Coastguard Worker /** 756*e1eccf28SAndroid Build Coastguard Worker * Copy from a rectangular region in this Allocation into a strided array. 757*e1eccf28SAndroid Build Coastguard Worker * @param[in] xoff X offset of region to update in this Allocation 758*e1eccf28SAndroid Build Coastguard Worker * @param[in] yoff Y offset of region to update in this Allocation 759*e1eccf28SAndroid Build Coastguard Worker * @param[in] w Width of region to update 760*e1eccf28SAndroid Build Coastguard Worker * @param[in] h Height of region to update 761*e1eccf28SAndroid Build Coastguard Worker * @param[in] data destination array 762*e1eccf28SAndroid Build Coastguard Worker * @param[in] stride stride of data in bytes 763*e1eccf28SAndroid Build Coastguard Worker */ 764*e1eccf28SAndroid Build Coastguard Worker void copy2DStridedTo(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, 765*e1eccf28SAndroid Build Coastguard Worker void *data, size_t stride); 766*e1eccf28SAndroid Build Coastguard Worker 767*e1eccf28SAndroid Build Coastguard Worker /** 768*e1eccf28SAndroid Build Coastguard Worker * Copy this Allocation into a strided array. 769*e1eccf28SAndroid Build Coastguard Worker * @param[in] data destination array 770*e1eccf28SAndroid Build Coastguard Worker * @param[in] stride stride of data in bytes 771*e1eccf28SAndroid Build Coastguard Worker */ 772*e1eccf28SAndroid Build Coastguard Worker void copy2DStridedTo(void *data, size_t stride); 773*e1eccf28SAndroid Build Coastguard Worker 774*e1eccf28SAndroid Build Coastguard Worker 775*e1eccf28SAndroid Build Coastguard Worker /** 776*e1eccf28SAndroid Build Coastguard Worker * Copy from an array into a 3D region in this Allocation. The 777*e1eccf28SAndroid Build Coastguard Worker * array is assumed to be tightly packed. 778*e1eccf28SAndroid Build Coastguard Worker * @param[in] xoff X offset of region to update in this Allocation 779*e1eccf28SAndroid Build Coastguard Worker * @param[in] yoff Y offset of region to update in this Allocation 780*e1eccf28SAndroid Build Coastguard Worker * @param[in] zoff Z offset of region to update in this Allocation 781*e1eccf28SAndroid Build Coastguard Worker * @param[in] w Width of region to update 782*e1eccf28SAndroid Build Coastguard Worker * @param[in] h Height of region to update 783*e1eccf28SAndroid Build Coastguard Worker * @param[in] d Depth of region to update 784*e1eccf28SAndroid Build Coastguard Worker * @param[in] data Array from which to copy 785*e1eccf28SAndroid Build Coastguard Worker */ 786*e1eccf28SAndroid Build Coastguard Worker void copy3DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t w, 787*e1eccf28SAndroid Build Coastguard Worker uint32_t h, uint32_t d, const void* data); 788*e1eccf28SAndroid Build Coastguard Worker 789*e1eccf28SAndroid Build Coastguard Worker /** 790*e1eccf28SAndroid Build Coastguard Worker * Copy from an Allocation into a 3D region in this Allocation. 791*e1eccf28SAndroid Build Coastguard Worker * @param[in] xoff X offset of region to update in this Allocation 792*e1eccf28SAndroid Build Coastguard Worker * @param[in] yoff Y offset of region to update in this Allocation 793*e1eccf28SAndroid Build Coastguard Worker * @param[in] zoff Z offset of region to update in this Allocation 794*e1eccf28SAndroid Build Coastguard Worker * @param[in] w Width of region to update 795*e1eccf28SAndroid Build Coastguard Worker * @param[in] h Height of region to update 796*e1eccf28SAndroid Build Coastguard Worker * @param[in] d Depth of region to update 797*e1eccf28SAndroid Build Coastguard Worker * @param[in] data Allocation from which to copy 798*e1eccf28SAndroid Build Coastguard Worker * @param[in] dataXoff X offset of region in data to copy from 799*e1eccf28SAndroid Build Coastguard Worker * @param[in] dataYoff Y offset of region in data to copy from 800*e1eccf28SAndroid Build Coastguard Worker * @param[in] dataZoff Z offset of region in data to copy from 801*e1eccf28SAndroid Build Coastguard Worker */ 802*e1eccf28SAndroid Build Coastguard Worker void copy3DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t zoff, 803*e1eccf28SAndroid Build Coastguard Worker uint32_t w, uint32_t h, uint32_t d, 804*e1eccf28SAndroid Build Coastguard Worker const sp<const Allocation>& data, 805*e1eccf28SAndroid Build Coastguard Worker uint32_t dataXoff, uint32_t dataYoff, uint32_t dataZoff); 806*e1eccf28SAndroid Build Coastguard Worker 807*e1eccf28SAndroid Build Coastguard Worker /** 808*e1eccf28SAndroid Build Coastguard Worker * Copy a 3D region in this Allocation into an array. The 809*e1eccf28SAndroid Build Coastguard Worker * array is assumed to be tightly packed. 810*e1eccf28SAndroid Build Coastguard Worker * @param[in] xoff X offset of region to update in this Allocation 811*e1eccf28SAndroid Build Coastguard Worker * @param[in] yoff Y offset of region to update in this Allocation 812*e1eccf28SAndroid Build Coastguard Worker * @param[in] zoff Z offset of region to update in this Allocation 813*e1eccf28SAndroid Build Coastguard Worker * @param[in] w Width of region to update 814*e1eccf28SAndroid Build Coastguard Worker * @param[in] h Height of region to update 815*e1eccf28SAndroid Build Coastguard Worker * @param[in] d Depth of region to update 816*e1eccf28SAndroid Build Coastguard Worker * @param[in] data Array from which to copy 817*e1eccf28SAndroid Build Coastguard Worker */ 818*e1eccf28SAndroid Build Coastguard Worker void copy3DRangeTo(uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t w, 819*e1eccf28SAndroid Build Coastguard Worker uint32_t h, uint32_t d, void* data); 820*e1eccf28SAndroid Build Coastguard Worker 821*e1eccf28SAndroid Build Coastguard Worker /** 822*e1eccf28SAndroid Build Coastguard Worker * Creates an Allocation for use by scripts with a given Type. 823*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs Context to which the Allocation will belong 824*e1eccf28SAndroid Build Coastguard Worker * @param[in] type Type of the Allocation 825*e1eccf28SAndroid Build Coastguard Worker * @param[in] mipmaps desired mipmap behavior for the Allocation 826*e1eccf28SAndroid Build Coastguard Worker * @param[in] usage usage for the Allocation 827*e1eccf28SAndroid Build Coastguard Worker * @return new Allocation 828*e1eccf28SAndroid Build Coastguard Worker */ 829*e1eccf28SAndroid Build Coastguard Worker static sp<Allocation> createTyped(const sp<RS>& rs, const sp<const Type>& type, 830*e1eccf28SAndroid Build Coastguard Worker RsAllocationMipmapControl mipmaps, uint32_t usage); 831*e1eccf28SAndroid Build Coastguard Worker 832*e1eccf28SAndroid Build Coastguard Worker /** 833*e1eccf28SAndroid Build Coastguard Worker * Creates an Allocation for use by scripts with a given Type and a backing pointer. For use 834*e1eccf28SAndroid Build Coastguard Worker * with RS_ALLOCATION_USAGE_SHARED. 835*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs Context to which the Allocation will belong 836*e1eccf28SAndroid Build Coastguard Worker * @param[in] type Type of the Allocation 837*e1eccf28SAndroid Build Coastguard Worker * @param[in] mipmaps desired mipmap behavior for the Allocation 838*e1eccf28SAndroid Build Coastguard Worker * @param[in] usage usage for the Allocation 839*e1eccf28SAndroid Build Coastguard Worker * @param[in] pointer existing backing store to use for this Allocation if possible 840*e1eccf28SAndroid Build Coastguard Worker * @return new Allocation 841*e1eccf28SAndroid Build Coastguard Worker */ 842*e1eccf28SAndroid Build Coastguard Worker static sp<Allocation> createTyped(const sp<RS>& rs, const sp<const Type>& type, 843*e1eccf28SAndroid Build Coastguard Worker RsAllocationMipmapControl mipmaps, uint32_t usage, void * pointer); 844*e1eccf28SAndroid Build Coastguard Worker 845*e1eccf28SAndroid Build Coastguard Worker /** 846*e1eccf28SAndroid Build Coastguard Worker * Creates an Allocation for use by scripts with a given Type with no mipmaps. 847*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs Context to which the Allocation will belong 848*e1eccf28SAndroid Build Coastguard Worker * @param[in] type Type of the Allocation 849*e1eccf28SAndroid Build Coastguard Worker * @param[in] usage usage for the Allocation 850*e1eccf28SAndroid Build Coastguard Worker * @return new Allocation 851*e1eccf28SAndroid Build Coastguard Worker */ 852*e1eccf28SAndroid Build Coastguard Worker static sp<Allocation> createTyped(const sp<RS>& rs, const sp<const Type>& type, 853*e1eccf28SAndroid Build Coastguard Worker uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT); 854*e1eccf28SAndroid Build Coastguard Worker /** 855*e1eccf28SAndroid Build Coastguard Worker * Creates an Allocation with a specified number of given elements. 856*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs Context to which the Allocation will belong 857*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element used in the Allocation 858*e1eccf28SAndroid Build Coastguard Worker * @param[in] count Number of elements of the Allocation 859*e1eccf28SAndroid Build Coastguard Worker * @param[in] usage usage for the Allocation 860*e1eccf28SAndroid Build Coastguard Worker * @return new Allocation 861*e1eccf28SAndroid Build Coastguard Worker */ 862*e1eccf28SAndroid Build Coastguard Worker static sp<Allocation> createSized(const sp<RS>& rs, const sp<const Element>& e, size_t count, 863*e1eccf28SAndroid Build Coastguard Worker uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT); 864*e1eccf28SAndroid Build Coastguard Worker 865*e1eccf28SAndroid Build Coastguard Worker /** 866*e1eccf28SAndroid Build Coastguard Worker * Creates a 2D Allocation with a specified number of given elements. 867*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs Context to which the Allocation will belong 868*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element used in the Allocation 869*e1eccf28SAndroid Build Coastguard Worker * @param[in] x Width in Elements of the Allocation 870*e1eccf28SAndroid Build Coastguard Worker * @param[in] y Height of the Allocation 871*e1eccf28SAndroid Build Coastguard Worker * @param[in] usage usage for the Allocation 872*e1eccf28SAndroid Build Coastguard Worker * @return new Allocation 873*e1eccf28SAndroid Build Coastguard Worker */ 874*e1eccf28SAndroid Build Coastguard Worker static sp<Allocation> createSized2D(const sp<RS>& rs, const sp<const Element>& e, 875*e1eccf28SAndroid Build Coastguard Worker size_t x, size_t y, 876*e1eccf28SAndroid Build Coastguard Worker uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT); 877*e1eccf28SAndroid Build Coastguard Worker 878*e1eccf28SAndroid Build Coastguard Worker 879*e1eccf28SAndroid Build Coastguard Worker /** 880*e1eccf28SAndroid Build Coastguard Worker * Get the backing pointer for a USAGE_SHARED allocation. 881*e1eccf28SAndroid Build Coastguard Worker * @param[in] stride optional parameter. when non-NULL, will contain 882*e1eccf28SAndroid Build Coastguard Worker * stride in bytes of a 2D Allocation 883*e1eccf28SAndroid Build Coastguard Worker * @return pointer to data 884*e1eccf28SAndroid Build Coastguard Worker */ 885*e1eccf28SAndroid Build Coastguard Worker void * getPointer(size_t *stride = NULL); 886*e1eccf28SAndroid Build Coastguard Worker }; 887*e1eccf28SAndroid Build Coastguard Worker 888*e1eccf28SAndroid Build Coastguard Worker /** 889*e1eccf28SAndroid Build Coastguard Worker * An Element represents one item within an Allocation. An Element is roughly 890*e1eccf28SAndroid Build Coastguard Worker * equivalent to a C type in a RenderScript kernel. Elements may be basic 891*e1eccf28SAndroid Build Coastguard Worker * or complex. Some basic elements are: 892*e1eccf28SAndroid Build Coastguard Worker 893*e1eccf28SAndroid Build Coastguard Worker * - A single float value (equivalent to a float in a kernel) 894*e1eccf28SAndroid Build Coastguard Worker * - A four-element float vector (equivalent to a float4 in a kernel) 895*e1eccf28SAndroid Build Coastguard Worker * - An unsigned 32-bit integer (equivalent to an unsigned int in a kernel) 896*e1eccf28SAndroid Build Coastguard Worker * - A single signed 8-bit integer (equivalent to a char in a kernel) 897*e1eccf28SAndroid Build Coastguard Worker 898*e1eccf28SAndroid Build Coastguard Worker * Basic Elements are comprised of a Element.DataType and a 899*e1eccf28SAndroid Build Coastguard Worker * Element.DataKind. The DataType encodes C type information of an Element, 900*e1eccf28SAndroid Build Coastguard Worker * while the DataKind encodes how that Element should be interpreted by a 901*e1eccf28SAndroid Build Coastguard Worker * Sampler. Note that Allocation objects with DataKind USER cannot be used as 902*e1eccf28SAndroid Build Coastguard Worker * input for a Sampler. In general, Allocation objects that are intended for 903*e1eccf28SAndroid Build Coastguard Worker * use with a Sampler should use bitmap-derived Elements such as 904*e1eccf28SAndroid Build Coastguard Worker * Element::RGBA_8888. 905*e1eccf28SAndroid Build Coastguard Worker */ 906*e1eccf28SAndroid Build Coastguard Worker 907*e1eccf28SAndroid Build Coastguard Worker 908*e1eccf28SAndroid Build Coastguard Worker class Element : public BaseObj { 909*e1eccf28SAndroid Build Coastguard Worker public: 910*e1eccf28SAndroid Build Coastguard Worker bool isComplex(); 911*e1eccf28SAndroid Build Coastguard Worker 912*e1eccf28SAndroid Build Coastguard Worker /** 913*e1eccf28SAndroid Build Coastguard Worker * Elements could be simple, such as an int or a float, or a structure with 914*e1eccf28SAndroid Build Coastguard Worker * multiple sub-elements, such as a collection of floats, float2, 915*e1eccf28SAndroid Build Coastguard Worker * float4. This function returns zero for simple elements or the number of 916*e1eccf28SAndroid Build Coastguard Worker * sub-elements otherwise. 917*e1eccf28SAndroid Build Coastguard Worker * @return number of sub-elements 918*e1eccf28SAndroid Build Coastguard Worker */ getSubElementCount()919*e1eccf28SAndroid Build Coastguard Worker size_t getSubElementCount() { 920*e1eccf28SAndroid Build Coastguard Worker return mVisibleElementMapSize; 921*e1eccf28SAndroid Build Coastguard Worker } 922*e1eccf28SAndroid Build Coastguard Worker 923*e1eccf28SAndroid Build Coastguard Worker /** 924*e1eccf28SAndroid Build Coastguard Worker * For complex Elements, this returns the sub-element at a given index. 925*e1eccf28SAndroid Build Coastguard Worker * @param[in] index index of sub-element 926*e1eccf28SAndroid Build Coastguard Worker * @return sub-element 927*e1eccf28SAndroid Build Coastguard Worker */ 928*e1eccf28SAndroid Build Coastguard Worker sp<const Element> getSubElement(uint32_t index); 929*e1eccf28SAndroid Build Coastguard Worker 930*e1eccf28SAndroid Build Coastguard Worker /** 931*e1eccf28SAndroid Build Coastguard Worker * For complex Elements, this returns the name of the sub-element at a given 932*e1eccf28SAndroid Build Coastguard Worker * index. 933*e1eccf28SAndroid Build Coastguard Worker * @param[in] index index of sub-element 934*e1eccf28SAndroid Build Coastguard Worker * @return name of sub-element 935*e1eccf28SAndroid Build Coastguard Worker */ 936*e1eccf28SAndroid Build Coastguard Worker const char * getSubElementName(uint32_t index); 937*e1eccf28SAndroid Build Coastguard Worker 938*e1eccf28SAndroid Build Coastguard Worker /** 939*e1eccf28SAndroid Build Coastguard Worker * For complex Elements, this returns the size of the sub-element at a given 940*e1eccf28SAndroid Build Coastguard Worker * index. 941*e1eccf28SAndroid Build Coastguard Worker * @param[in] index index of sub-element 942*e1eccf28SAndroid Build Coastguard Worker * @return size of sub-element 943*e1eccf28SAndroid Build Coastguard Worker */ 944*e1eccf28SAndroid Build Coastguard Worker size_t getSubElementArraySize(uint32_t index); 945*e1eccf28SAndroid Build Coastguard Worker 946*e1eccf28SAndroid Build Coastguard Worker /** 947*e1eccf28SAndroid Build Coastguard Worker * Returns the location of a sub-element within a complex Element. 948*e1eccf28SAndroid Build Coastguard Worker * @param[in] index index of sub-element 949*e1eccf28SAndroid Build Coastguard Worker * @return offset in bytes 950*e1eccf28SAndroid Build Coastguard Worker */ 951*e1eccf28SAndroid Build Coastguard Worker uint32_t getSubElementOffsetBytes(uint32_t index); 952*e1eccf28SAndroid Build Coastguard Worker 953*e1eccf28SAndroid Build Coastguard Worker /** 954*e1eccf28SAndroid Build Coastguard Worker * Returns the data type used for the Element. 955*e1eccf28SAndroid Build Coastguard Worker * @return data type 956*e1eccf28SAndroid Build Coastguard Worker */ getDataType()957*e1eccf28SAndroid Build Coastguard Worker RsDataType getDataType() const { 958*e1eccf28SAndroid Build Coastguard Worker return mType; 959*e1eccf28SAndroid Build Coastguard Worker } 960*e1eccf28SAndroid Build Coastguard Worker 961*e1eccf28SAndroid Build Coastguard Worker /** 962*e1eccf28SAndroid Build Coastguard Worker * Returns the data kind used for the Element. 963*e1eccf28SAndroid Build Coastguard Worker * @return data kind 964*e1eccf28SAndroid Build Coastguard Worker */ getDataKind()965*e1eccf28SAndroid Build Coastguard Worker RsDataKind getDataKind() const { 966*e1eccf28SAndroid Build Coastguard Worker return mKind; 967*e1eccf28SAndroid Build Coastguard Worker } 968*e1eccf28SAndroid Build Coastguard Worker 969*e1eccf28SAndroid Build Coastguard Worker /** 970*e1eccf28SAndroid Build Coastguard Worker * Returns the size in bytes of the Element. 971*e1eccf28SAndroid Build Coastguard Worker * @return size in bytes 972*e1eccf28SAndroid Build Coastguard Worker */ getSizeBytes()973*e1eccf28SAndroid Build Coastguard Worker size_t getSizeBytes() const { 974*e1eccf28SAndroid Build Coastguard Worker return mSizeBytes; 975*e1eccf28SAndroid Build Coastguard Worker } 976*e1eccf28SAndroid Build Coastguard Worker 977*e1eccf28SAndroid Build Coastguard Worker /** 978*e1eccf28SAndroid Build Coastguard Worker * Returns the number of vector components for this Element. 979*e1eccf28SAndroid Build Coastguard Worker * @return number of vector components 980*e1eccf28SAndroid Build Coastguard Worker */ getVectorSize()981*e1eccf28SAndroid Build Coastguard Worker uint32_t getVectorSize() const { 982*e1eccf28SAndroid Build Coastguard Worker return mVectorSize; 983*e1eccf28SAndroid Build Coastguard Worker } 984*e1eccf28SAndroid Build Coastguard Worker 985*e1eccf28SAndroid Build Coastguard Worker /** 986*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single bool. 987*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 988*e1eccf28SAndroid Build Coastguard Worker * @return Element 989*e1eccf28SAndroid Build Coastguard Worker */ 990*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> BOOLEAN(const sp<RS> &rs); 991*e1eccf28SAndroid Build Coastguard Worker /** 992*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single unsigned char. 993*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 994*e1eccf28SAndroid Build Coastguard Worker * @return Element 995*e1eccf28SAndroid Build Coastguard Worker */ 996*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U8(const sp<RS> &rs); 997*e1eccf28SAndroid Build Coastguard Worker /** 998*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single signed char. 999*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1000*e1eccf28SAndroid Build Coastguard Worker * @return Element 1001*e1eccf28SAndroid Build Coastguard Worker */ 1002*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I8(const sp<RS> &rs); 1003*e1eccf28SAndroid Build Coastguard Worker /** 1004*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single unsigned short. 1005*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1006*e1eccf28SAndroid Build Coastguard Worker * @return Element 1007*e1eccf28SAndroid Build Coastguard Worker */ 1008*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U16(const sp<RS> &rs); 1009*e1eccf28SAndroid Build Coastguard Worker /** 1010*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single signed short. 1011*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1012*e1eccf28SAndroid Build Coastguard Worker * @return Element 1013*e1eccf28SAndroid Build Coastguard Worker */ 1014*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I16(const sp<RS> &rs); 1015*e1eccf28SAndroid Build Coastguard Worker /** 1016*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single unsigned int. 1017*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1018*e1eccf28SAndroid Build Coastguard Worker * @return Element 1019*e1eccf28SAndroid Build Coastguard Worker */ 1020*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U32(const sp<RS> &rs); 1021*e1eccf28SAndroid Build Coastguard Worker /** 1022*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single signed int. 1023*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1024*e1eccf28SAndroid Build Coastguard Worker * @return Element 1025*e1eccf28SAndroid Build Coastguard Worker */ 1026*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I32(const sp<RS> &rs); 1027*e1eccf28SAndroid Build Coastguard Worker /** 1028*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single unsigned long long. 1029*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1030*e1eccf28SAndroid Build Coastguard Worker * @return Element 1031*e1eccf28SAndroid Build Coastguard Worker */ 1032*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U64(const sp<RS> &rs); 1033*e1eccf28SAndroid Build Coastguard Worker /** 1034*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single signed long long. 1035*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1036*e1eccf28SAndroid Build Coastguard Worker * @return Element 1037*e1eccf28SAndroid Build Coastguard Worker */ 1038*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I64(const sp<RS> &rs); 1039*e1eccf28SAndroid Build Coastguard Worker /** 1040*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single half. 1041*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1042*e1eccf28SAndroid Build Coastguard Worker * @return Element 1043*e1eccf28SAndroid Build Coastguard Worker */ 1044*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F16(const sp<RS> &rs); 1045*e1eccf28SAndroid Build Coastguard Worker /** 1046*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single float. 1047*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1048*e1eccf28SAndroid Build Coastguard Worker * @return Element 1049*e1eccf28SAndroid Build Coastguard Worker */ 1050*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F32(const sp<RS> &rs); 1051*e1eccf28SAndroid Build Coastguard Worker /** 1052*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single double. 1053*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1054*e1eccf28SAndroid Build Coastguard Worker * @return Element 1055*e1eccf28SAndroid Build Coastguard Worker */ 1056*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F64(const sp<RS> &rs); 1057*e1eccf28SAndroid Build Coastguard Worker /** 1058*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single Element. 1059*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1060*e1eccf28SAndroid Build Coastguard Worker * @return Element 1061*e1eccf28SAndroid Build Coastguard Worker */ 1062*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> ELEMENT(const sp<RS> &rs); 1063*e1eccf28SAndroid Build Coastguard Worker /** 1064*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single Type. 1065*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1066*e1eccf28SAndroid Build Coastguard Worker * @return Element 1067*e1eccf28SAndroid Build Coastguard Worker */ 1068*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> TYPE(const sp<RS> &rs); 1069*e1eccf28SAndroid Build Coastguard Worker /** 1070*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single Allocation. 1071*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1072*e1eccf28SAndroid Build Coastguard Worker * @return Element 1073*e1eccf28SAndroid Build Coastguard Worker */ 1074*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> ALLOCATION(const sp<RS> &rs); 1075*e1eccf28SAndroid Build Coastguard Worker /** 1076*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single Sampler. 1077*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1078*e1eccf28SAndroid Build Coastguard Worker * @return Element 1079*e1eccf28SAndroid Build Coastguard Worker */ 1080*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> SAMPLER(const sp<RS> &rs); 1081*e1eccf28SAndroid Build Coastguard Worker /** 1082*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a single Script. 1083*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1084*e1eccf28SAndroid Build Coastguard Worker * @return Element 1085*e1eccf28SAndroid Build Coastguard Worker */ 1086*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> SCRIPT(const sp<RS> &rs); 1087*e1eccf28SAndroid Build Coastguard Worker /** 1088*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an ALPHA_8 pixel. 1089*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1090*e1eccf28SAndroid Build Coastguard Worker * @return Element 1091*e1eccf28SAndroid Build Coastguard Worker */ 1092*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> A_8(const sp<RS> &rs); 1093*e1eccf28SAndroid Build Coastguard Worker /** 1094*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an RGB_565 pixel. 1095*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1096*e1eccf28SAndroid Build Coastguard Worker * @return Element 1097*e1eccf28SAndroid Build Coastguard Worker */ 1098*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> RGB_565(const sp<RS> &rs); 1099*e1eccf28SAndroid Build Coastguard Worker /** 1100*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an RGB_888 pixel. 1101*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1102*e1eccf28SAndroid Build Coastguard Worker * @return Element 1103*e1eccf28SAndroid Build Coastguard Worker */ 1104*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> RGB_888(const sp<RS> &rs); 1105*e1eccf28SAndroid Build Coastguard Worker /** 1106*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an RGBA_5551 pixel. 1107*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1108*e1eccf28SAndroid Build Coastguard Worker * @return Element 1109*e1eccf28SAndroid Build Coastguard Worker */ 1110*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> RGBA_5551(const sp<RS> &rs); 1111*e1eccf28SAndroid Build Coastguard Worker /** 1112*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an RGBA_4444 pixel. 1113*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1114*e1eccf28SAndroid Build Coastguard Worker * @return Element 1115*e1eccf28SAndroid Build Coastguard Worker */ 1116*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> RGBA_4444(const sp<RS> &rs); 1117*e1eccf28SAndroid Build Coastguard Worker /** 1118*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an RGBA_8888 pixel. 1119*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1120*e1eccf28SAndroid Build Coastguard Worker * @return Element 1121*e1eccf28SAndroid Build Coastguard Worker */ 1122*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> RGBA_8888(const sp<RS> &rs); 1123*e1eccf28SAndroid Build Coastguard Worker 1124*e1eccf28SAndroid Build Coastguard Worker /** 1125*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a half2. 1126*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1127*e1eccf28SAndroid Build Coastguard Worker * @return Element 1128*e1eccf28SAndroid Build Coastguard Worker */ 1129*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F16_2(const sp<RS> &rs); 1130*e1eccf28SAndroid Build Coastguard Worker /** 1131*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a half3. 1132*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1133*e1eccf28SAndroid Build Coastguard Worker * @return Element 1134*e1eccf28SAndroid Build Coastguard Worker */ 1135*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F16_3(const sp<RS> &rs); 1136*e1eccf28SAndroid Build Coastguard Worker /** 1137*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a half4. 1138*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1139*e1eccf28SAndroid Build Coastguard Worker * @return Element 1140*e1eccf28SAndroid Build Coastguard Worker */ 1141*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F16_4(const sp<RS> &rs); 1142*e1eccf28SAndroid Build Coastguard Worker 1143*e1eccf28SAndroid Build Coastguard Worker /** 1144*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a float2. 1145*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1146*e1eccf28SAndroid Build Coastguard Worker * @return Element 1147*e1eccf28SAndroid Build Coastguard Worker */ 1148*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F32_2(const sp<RS> &rs); 1149*e1eccf28SAndroid Build Coastguard Worker /** 1150*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a float3. 1151*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1152*e1eccf28SAndroid Build Coastguard Worker * @return Element 1153*e1eccf28SAndroid Build Coastguard Worker */ 1154*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F32_3(const sp<RS> &rs); 1155*e1eccf28SAndroid Build Coastguard Worker /** 1156*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a float4. 1157*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1158*e1eccf28SAndroid Build Coastguard Worker * @return Element 1159*e1eccf28SAndroid Build Coastguard Worker */ 1160*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F32_4(const sp<RS> &rs); 1161*e1eccf28SAndroid Build Coastguard Worker /** 1162*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a double2. 1163*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1164*e1eccf28SAndroid Build Coastguard Worker * @return Element 1165*e1eccf28SAndroid Build Coastguard Worker */ 1166*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F64_2(const sp<RS> &rs); 1167*e1eccf28SAndroid Build Coastguard Worker /** 1168*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a double3. 1169*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1170*e1eccf28SAndroid Build Coastguard Worker * @return Element 1171*e1eccf28SAndroid Build Coastguard Worker */ 1172*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F64_3(const sp<RS> &rs); 1173*e1eccf28SAndroid Build Coastguard Worker /** 1174*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a double4. 1175*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1176*e1eccf28SAndroid Build Coastguard Worker * @return Element 1177*e1eccf28SAndroid Build Coastguard Worker */ 1178*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> F64_4(const sp<RS> &rs); 1179*e1eccf28SAndroid Build Coastguard Worker /** 1180*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a uchar2. 1181*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1182*e1eccf28SAndroid Build Coastguard Worker * @return Element 1183*e1eccf28SAndroid Build Coastguard Worker */ 1184*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U8_2(const sp<RS> &rs); 1185*e1eccf28SAndroid Build Coastguard Worker /** 1186*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a uchar3. 1187*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1188*e1eccf28SAndroid Build Coastguard Worker * @return Element 1189*e1eccf28SAndroid Build Coastguard Worker */ 1190*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U8_3(const sp<RS> &rs); 1191*e1eccf28SAndroid Build Coastguard Worker /** 1192*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a uchar4. 1193*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1194*e1eccf28SAndroid Build Coastguard Worker * @return Element 1195*e1eccf28SAndroid Build Coastguard Worker */ 1196*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U8_4(const sp<RS> &rs); 1197*e1eccf28SAndroid Build Coastguard Worker /** 1198*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a char2. 1199*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1200*e1eccf28SAndroid Build Coastguard Worker * @return Element 1201*e1eccf28SAndroid Build Coastguard Worker */ 1202*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I8_2(const sp<RS> &rs); 1203*e1eccf28SAndroid Build Coastguard Worker /** 1204*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a char3. 1205*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1206*e1eccf28SAndroid Build Coastguard Worker * @return Element 1207*e1eccf28SAndroid Build Coastguard Worker */ 1208*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I8_3(const sp<RS> &rs); 1209*e1eccf28SAndroid Build Coastguard Worker /** 1210*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a char4. 1211*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1212*e1eccf28SAndroid Build Coastguard Worker * @return Element 1213*e1eccf28SAndroid Build Coastguard Worker */ 1214*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I8_4(const sp<RS> &rs); 1215*e1eccf28SAndroid Build Coastguard Worker /** 1216*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a ushort2. 1217*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1218*e1eccf28SAndroid Build Coastguard Worker * @return Element 1219*e1eccf28SAndroid Build Coastguard Worker */ 1220*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U16_2(const sp<RS> &rs); 1221*e1eccf28SAndroid Build Coastguard Worker /** 1222*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a ushort3. 1223*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1224*e1eccf28SAndroid Build Coastguard Worker * @return Element 1225*e1eccf28SAndroid Build Coastguard Worker */ 1226*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U16_3(const sp<RS> &rs); 1227*e1eccf28SAndroid Build Coastguard Worker /** 1228*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a ushort4. 1229*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1230*e1eccf28SAndroid Build Coastguard Worker * @return Element 1231*e1eccf28SAndroid Build Coastguard Worker */ 1232*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U16_4(const sp<RS> &rs); 1233*e1eccf28SAndroid Build Coastguard Worker /** 1234*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a short2. 1235*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1236*e1eccf28SAndroid Build Coastguard Worker * @return Element 1237*e1eccf28SAndroid Build Coastguard Worker */ 1238*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I16_2(const sp<RS> &rs); 1239*e1eccf28SAndroid Build Coastguard Worker /** 1240*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a short3. 1241*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1242*e1eccf28SAndroid Build Coastguard Worker * @return Element 1243*e1eccf28SAndroid Build Coastguard Worker */ 1244*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I16_3(const sp<RS> &rs); 1245*e1eccf28SAndroid Build Coastguard Worker /** 1246*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a short4. 1247*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1248*e1eccf28SAndroid Build Coastguard Worker * @return Element 1249*e1eccf28SAndroid Build Coastguard Worker */ 1250*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I16_4(const sp<RS> &rs); 1251*e1eccf28SAndroid Build Coastguard Worker /** 1252*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a uint2. 1253*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1254*e1eccf28SAndroid Build Coastguard Worker * @return Element 1255*e1eccf28SAndroid Build Coastguard Worker */ 1256*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U32_2(const sp<RS> &rs); 1257*e1eccf28SAndroid Build Coastguard Worker /** 1258*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a uint3. 1259*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1260*e1eccf28SAndroid Build Coastguard Worker * @return Element 1261*e1eccf28SAndroid Build Coastguard Worker */ 1262*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U32_3(const sp<RS> &rs); 1263*e1eccf28SAndroid Build Coastguard Worker /** 1264*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a uint4. 1265*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1266*e1eccf28SAndroid Build Coastguard Worker * @return Element 1267*e1eccf28SAndroid Build Coastguard Worker */ 1268*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U32_4(const sp<RS> &rs); 1269*e1eccf28SAndroid Build Coastguard Worker /** 1270*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an int2. 1271*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1272*e1eccf28SAndroid Build Coastguard Worker * @return Element 1273*e1eccf28SAndroid Build Coastguard Worker */ 1274*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I32_2(const sp<RS> &rs); 1275*e1eccf28SAndroid Build Coastguard Worker /** 1276*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an int3. 1277*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1278*e1eccf28SAndroid Build Coastguard Worker * @return Element 1279*e1eccf28SAndroid Build Coastguard Worker */ 1280*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I32_3(const sp<RS> &rs); 1281*e1eccf28SAndroid Build Coastguard Worker /** 1282*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an int4. 1283*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1284*e1eccf28SAndroid Build Coastguard Worker * @return Element 1285*e1eccf28SAndroid Build Coastguard Worker */ 1286*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I32_4(const sp<RS> &rs); 1287*e1eccf28SAndroid Build Coastguard Worker /** 1288*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a ulong2. 1289*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1290*e1eccf28SAndroid Build Coastguard Worker * @return Element 1291*e1eccf28SAndroid Build Coastguard Worker */ 1292*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U64_2(const sp<RS> &rs); 1293*e1eccf28SAndroid Build Coastguard Worker /** 1294*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a ulong3. 1295*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1296*e1eccf28SAndroid Build Coastguard Worker * @return Element 1297*e1eccf28SAndroid Build Coastguard Worker */ 1298*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U64_3(const sp<RS> &rs); 1299*e1eccf28SAndroid Build Coastguard Worker /** 1300*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a ulong4. 1301*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1302*e1eccf28SAndroid Build Coastguard Worker * @return Element 1303*e1eccf28SAndroid Build Coastguard Worker */ 1304*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> U64_4(const sp<RS> &rs); 1305*e1eccf28SAndroid Build Coastguard Worker /** 1306*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a long2. 1307*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1308*e1eccf28SAndroid Build Coastguard Worker * @return Element 1309*e1eccf28SAndroid Build Coastguard Worker */ 1310*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I64_2(const sp<RS> &rs); 1311*e1eccf28SAndroid Build Coastguard Worker /** 1312*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a long3. 1313*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1314*e1eccf28SAndroid Build Coastguard Worker * @return Element 1315*e1eccf28SAndroid Build Coastguard Worker */ 1316*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I64_3(const sp<RS> &rs); 1317*e1eccf28SAndroid Build Coastguard Worker /** 1318*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a long4. 1319*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1320*e1eccf28SAndroid Build Coastguard Worker * @return Element 1321*e1eccf28SAndroid Build Coastguard Worker */ 1322*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> I64_4(const sp<RS> &rs); 1323*e1eccf28SAndroid Build Coastguard Worker /** 1324*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing a YUV pixel. 1325*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1326*e1eccf28SAndroid Build Coastguard Worker * @return Element 1327*e1eccf28SAndroid Build Coastguard Worker */ 1328*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> YUV(const sp<RS> &rs); 1329*e1eccf28SAndroid Build Coastguard Worker /** 1330*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an rs_matrix_4x4. 1331*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1332*e1eccf28SAndroid Build Coastguard Worker * @return Element 1333*e1eccf28SAndroid Build Coastguard Worker */ 1334*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> MATRIX_4X4(const sp<RS> &rs); 1335*e1eccf28SAndroid Build Coastguard Worker /** 1336*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an rs_matrix_3x3. 1337*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1338*e1eccf28SAndroid Build Coastguard Worker * @return Element 1339*e1eccf28SAndroid Build Coastguard Worker */ 1340*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> MATRIX_3X3(const sp<RS> &rs); 1341*e1eccf28SAndroid Build Coastguard Worker /** 1342*e1eccf28SAndroid Build Coastguard Worker * Utility function for returning an Element containing an rs_matrix_2x2. 1343*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1344*e1eccf28SAndroid Build Coastguard Worker * @return Element 1345*e1eccf28SAndroid Build Coastguard Worker */ 1346*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> MATRIX_2X2(const sp<RS> &rs); 1347*e1eccf28SAndroid Build Coastguard Worker 1348*e1eccf28SAndroid Build Coastguard Worker void updateFromNative(); 1349*e1eccf28SAndroid Build Coastguard Worker 1350*e1eccf28SAndroid Build Coastguard Worker /** 1351*e1eccf28SAndroid Build Coastguard Worker * Create an Element with a given DataType. 1352*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1353*e1eccf28SAndroid Build Coastguard Worker * @param[in] dt data type 1354*e1eccf28SAndroid Build Coastguard Worker * @return Element 1355*e1eccf28SAndroid Build Coastguard Worker */ 1356*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> createUser(const sp<RS>& rs, RsDataType dt); 1357*e1eccf28SAndroid Build Coastguard Worker /** 1358*e1eccf28SAndroid Build Coastguard Worker * Create a vector Element with the given DataType 1359*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript 1360*e1eccf28SAndroid Build Coastguard Worker * @param[in] dt DataType 1361*e1eccf28SAndroid Build Coastguard Worker * @param[in] size vector size 1362*e1eccf28SAndroid Build Coastguard Worker * @return Element 1363*e1eccf28SAndroid Build Coastguard Worker */ 1364*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> createVector(const sp<RS>& rs, RsDataType dt, uint32_t size); 1365*e1eccf28SAndroid Build Coastguard Worker /** 1366*e1eccf28SAndroid Build Coastguard Worker * Create an Element with a given DataType and DataKind. 1367*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1368*e1eccf28SAndroid Build Coastguard Worker * @param[in] dt DataType 1369*e1eccf28SAndroid Build Coastguard Worker * @param[in] dk DataKind 1370*e1eccf28SAndroid Build Coastguard Worker * @return Element 1371*e1eccf28SAndroid Build Coastguard Worker */ 1372*e1eccf28SAndroid Build Coastguard Worker static sp<const Element> createPixel(const sp<RS>& rs, RsDataType dt, RsDataKind dk); 1373*e1eccf28SAndroid Build Coastguard Worker 1374*e1eccf28SAndroid Build Coastguard Worker /** 1375*e1eccf28SAndroid Build Coastguard Worker * Returns true if the Element can interoperate with this Element. 1376*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element to compare 1377*e1eccf28SAndroid Build Coastguard Worker * @return true if Elements can interoperate 1378*e1eccf28SAndroid Build Coastguard Worker */ 1379*e1eccf28SAndroid Build Coastguard Worker bool isCompatible(const sp<const Element>&e) const; 1380*e1eccf28SAndroid Build Coastguard Worker 1381*e1eccf28SAndroid Build Coastguard Worker /** 1382*e1eccf28SAndroid Build Coastguard Worker * Builder class for producing complex elements with matching field and name 1383*e1eccf28SAndroid Build Coastguard Worker * pairs. The builder starts empty. The order in which elements are added is 1384*e1eccf28SAndroid Build Coastguard Worker * retained for the layout in memory. 1385*e1eccf28SAndroid Build Coastguard Worker */ 1386*e1eccf28SAndroid Build Coastguard Worker class Builder { 1387*e1eccf28SAndroid Build Coastguard Worker private: 1388*e1eccf28SAndroid Build Coastguard Worker RS* mRS; 1389*e1eccf28SAndroid Build Coastguard Worker size_t mElementsCount; 1390*e1eccf28SAndroid Build Coastguard Worker size_t mElementsVecSize; 1391*e1eccf28SAndroid Build Coastguard Worker sp<const Element> * mElements; 1392*e1eccf28SAndroid Build Coastguard Worker char ** mElementNames; 1393*e1eccf28SAndroid Build Coastguard Worker size_t * mElementNameLengths; 1394*e1eccf28SAndroid Build Coastguard Worker uint32_t * mArraySizes; 1395*e1eccf28SAndroid Build Coastguard Worker bool mSkipPadding; 1396*e1eccf28SAndroid Build Coastguard Worker 1397*e1eccf28SAndroid Build Coastguard Worker public: 1398*e1eccf28SAndroid Build Coastguard Worker explicit Builder(sp<RS> rs); 1399*e1eccf28SAndroid Build Coastguard Worker ~Builder(); 1400*e1eccf28SAndroid Build Coastguard Worker void add(const sp<const Element>& e, const char * name, uint32_t arraySize = 1); 1401*e1eccf28SAndroid Build Coastguard Worker sp<const Element> create(); 1402*e1eccf28SAndroid Build Coastguard Worker }; 1403*e1eccf28SAndroid Build Coastguard Worker 1404*e1eccf28SAndroid Build Coastguard Worker protected: 1405*e1eccf28SAndroid Build Coastguard Worker friend class Type; 1406*e1eccf28SAndroid Build Coastguard Worker Element(void *id, sp<RS> rs, 1407*e1eccf28SAndroid Build Coastguard Worker sp<const Element> * elements, 1408*e1eccf28SAndroid Build Coastguard Worker size_t elementCount, 1409*e1eccf28SAndroid Build Coastguard Worker const char ** elementNames, 1410*e1eccf28SAndroid Build Coastguard Worker size_t * elementNameLengths, 1411*e1eccf28SAndroid Build Coastguard Worker uint32_t * arraySizes); 1412*e1eccf28SAndroid Build Coastguard Worker Element(void *id, sp<RS> rs, RsDataType dt, RsDataKind dk, bool norm, uint32_t size); 1413*e1eccf28SAndroid Build Coastguard Worker Element(void *id, sp<RS> rs); 1414*e1eccf28SAndroid Build Coastguard Worker explicit Element(sp<RS> rs); 1415*e1eccf28SAndroid Build Coastguard Worker virtual ~Element(); 1416*e1eccf28SAndroid Build Coastguard Worker 1417*e1eccf28SAndroid Build Coastguard Worker private: 1418*e1eccf28SAndroid Build Coastguard Worker void updateVisibleSubElements(); 1419*e1eccf28SAndroid Build Coastguard Worker 1420*e1eccf28SAndroid Build Coastguard Worker size_t mElementsCount; 1421*e1eccf28SAndroid Build Coastguard Worker size_t mVisibleElementMapSize; 1422*e1eccf28SAndroid Build Coastguard Worker 1423*e1eccf28SAndroid Build Coastguard Worker sp<const Element> * mElements; 1424*e1eccf28SAndroid Build Coastguard Worker char ** mElementNames; 1425*e1eccf28SAndroid Build Coastguard Worker size_t * mElementNameLengths; 1426*e1eccf28SAndroid Build Coastguard Worker uint32_t * mArraySizes; 1427*e1eccf28SAndroid Build Coastguard Worker uint32_t * mVisibleElementMap; 1428*e1eccf28SAndroid Build Coastguard Worker uint32_t * mOffsetInBytes; 1429*e1eccf28SAndroid Build Coastguard Worker 1430*e1eccf28SAndroid Build Coastguard Worker RsDataType mType; 1431*e1eccf28SAndroid Build Coastguard Worker RsDataKind mKind; 1432*e1eccf28SAndroid Build Coastguard Worker bool mNormalized; 1433*e1eccf28SAndroid Build Coastguard Worker size_t mSizeBytes; 1434*e1eccf28SAndroid Build Coastguard Worker size_t mVectorSize; 1435*e1eccf28SAndroid Build Coastguard Worker }; 1436*e1eccf28SAndroid Build Coastguard Worker 1437*e1eccf28SAndroid Build Coastguard Worker class FieldPacker { 1438*e1eccf28SAndroid Build Coastguard Worker protected: 1439*e1eccf28SAndroid Build Coastguard Worker unsigned char* mData; 1440*e1eccf28SAndroid Build Coastguard Worker size_t mPos; 1441*e1eccf28SAndroid Build Coastguard Worker size_t mLen; 1442*e1eccf28SAndroid Build Coastguard Worker 1443*e1eccf28SAndroid Build Coastguard Worker public: FieldPacker(size_t len)1444*e1eccf28SAndroid Build Coastguard Worker explicit FieldPacker(size_t len) 1445*e1eccf28SAndroid Build Coastguard Worker : mPos(0), mLen(len) { 1446*e1eccf28SAndroid Build Coastguard Worker mData = new unsigned char[len]; 1447*e1eccf28SAndroid Build Coastguard Worker } 1448*e1eccf28SAndroid Build Coastguard Worker ~FieldPacker()1449*e1eccf28SAndroid Build Coastguard Worker virtual ~FieldPacker() { 1450*e1eccf28SAndroid Build Coastguard Worker delete [] mData; 1451*e1eccf28SAndroid Build Coastguard Worker } 1452*e1eccf28SAndroid Build Coastguard Worker align(size_t v)1453*e1eccf28SAndroid Build Coastguard Worker void align(size_t v) { 1454*e1eccf28SAndroid Build Coastguard Worker if ((v & (v - 1)) != 0) { 1455*e1eccf28SAndroid Build Coastguard Worker // ALOGE("Non-power-of-two alignment: %zu", v); 1456*e1eccf28SAndroid Build Coastguard Worker return; 1457*e1eccf28SAndroid Build Coastguard Worker } 1458*e1eccf28SAndroid Build Coastguard Worker 1459*e1eccf28SAndroid Build Coastguard Worker while ((mPos & (v - 1)) != 0) { 1460*e1eccf28SAndroid Build Coastguard Worker mData[mPos++] = 0; 1461*e1eccf28SAndroid Build Coastguard Worker } 1462*e1eccf28SAndroid Build Coastguard Worker } 1463*e1eccf28SAndroid Build Coastguard Worker reset()1464*e1eccf28SAndroid Build Coastguard Worker void reset() { 1465*e1eccf28SAndroid Build Coastguard Worker mPos = 0; 1466*e1eccf28SAndroid Build Coastguard Worker } 1467*e1eccf28SAndroid Build Coastguard Worker reset(size_t i)1468*e1eccf28SAndroid Build Coastguard Worker void reset(size_t i) { 1469*e1eccf28SAndroid Build Coastguard Worker if (i >= mLen) { 1470*e1eccf28SAndroid Build Coastguard Worker // ALOGE("Out of bounds: i (%zu) >= len (%zu)", i, mLen); 1471*e1eccf28SAndroid Build Coastguard Worker return; 1472*e1eccf28SAndroid Build Coastguard Worker } 1473*e1eccf28SAndroid Build Coastguard Worker mPos = i; 1474*e1eccf28SAndroid Build Coastguard Worker } 1475*e1eccf28SAndroid Build Coastguard Worker skip(size_t i)1476*e1eccf28SAndroid Build Coastguard Worker void skip(size_t i) { 1477*e1eccf28SAndroid Build Coastguard Worker size_t res = mPos + i; 1478*e1eccf28SAndroid Build Coastguard Worker if (res > mLen) { 1479*e1eccf28SAndroid Build Coastguard Worker // ALOGE("Exceeded buffer length: i (%zu) > len (%zu)", i, mLen); 1480*e1eccf28SAndroid Build Coastguard Worker return; 1481*e1eccf28SAndroid Build Coastguard Worker } 1482*e1eccf28SAndroid Build Coastguard Worker mPos = res; 1483*e1eccf28SAndroid Build Coastguard Worker } 1484*e1eccf28SAndroid Build Coastguard Worker getData()1485*e1eccf28SAndroid Build Coastguard Worker void* getData() const { 1486*e1eccf28SAndroid Build Coastguard Worker return mData; 1487*e1eccf28SAndroid Build Coastguard Worker } 1488*e1eccf28SAndroid Build Coastguard Worker getLength()1489*e1eccf28SAndroid Build Coastguard Worker size_t getLength() const { 1490*e1eccf28SAndroid Build Coastguard Worker return mLen; 1491*e1eccf28SAndroid Build Coastguard Worker } 1492*e1eccf28SAndroid Build Coastguard Worker 1493*e1eccf28SAndroid Build Coastguard Worker template <typename T> add(T t)1494*e1eccf28SAndroid Build Coastguard Worker void add(T t) { 1495*e1eccf28SAndroid Build Coastguard Worker align(sizeof(t)); 1496*e1eccf28SAndroid Build Coastguard Worker if (mPos + sizeof(t) <= mLen) { 1497*e1eccf28SAndroid Build Coastguard Worker memcpy(&mData[mPos], &t, sizeof(t)); 1498*e1eccf28SAndroid Build Coastguard Worker mPos += sizeof(t); 1499*e1eccf28SAndroid Build Coastguard Worker } 1500*e1eccf28SAndroid Build Coastguard Worker } 1501*e1eccf28SAndroid Build Coastguard Worker 1502*e1eccf28SAndroid Build Coastguard Worker /* 1503*e1eccf28SAndroid Build Coastguard Worker void add(rs_matrix4x4 m) { 1504*e1eccf28SAndroid Build Coastguard Worker for (size_t i = 0; i < 16; i++) { 1505*e1eccf28SAndroid Build Coastguard Worker add(m.m[i]); 1506*e1eccf28SAndroid Build Coastguard Worker } 1507*e1eccf28SAndroid Build Coastguard Worker } 1508*e1eccf28SAndroid Build Coastguard Worker 1509*e1eccf28SAndroid Build Coastguard Worker void add(rs_matrix3x3 m) { 1510*e1eccf28SAndroid Build Coastguard Worker for (size_t i = 0; i < 9; i++) { 1511*e1eccf28SAndroid Build Coastguard Worker add(m.m[i]); 1512*e1eccf28SAndroid Build Coastguard Worker } 1513*e1eccf28SAndroid Build Coastguard Worker } 1514*e1eccf28SAndroid Build Coastguard Worker 1515*e1eccf28SAndroid Build Coastguard Worker void add(rs_matrix2x2 m) { 1516*e1eccf28SAndroid Build Coastguard Worker for (size_t i = 0; i < 4; i++) { 1517*e1eccf28SAndroid Build Coastguard Worker add(m.m[i]); 1518*e1eccf28SAndroid Build Coastguard Worker } 1519*e1eccf28SAndroid Build Coastguard Worker } 1520*e1eccf28SAndroid Build Coastguard Worker */ 1521*e1eccf28SAndroid Build Coastguard Worker add(const sp<BaseObj> & obj)1522*e1eccf28SAndroid Build Coastguard Worker void add(const sp<BaseObj>& obj) { 1523*e1eccf28SAndroid Build Coastguard Worker if (obj != NULL) { 1524*e1eccf28SAndroid Build Coastguard Worker add((uint32_t) (uintptr_t) obj->getID()); 1525*e1eccf28SAndroid Build Coastguard Worker } else { 1526*e1eccf28SAndroid Build Coastguard Worker add((uint32_t) 0); 1527*e1eccf28SAndroid Build Coastguard Worker } 1528*e1eccf28SAndroid Build Coastguard Worker } 1529*e1eccf28SAndroid Build Coastguard Worker }; 1530*e1eccf28SAndroid Build Coastguard Worker 1531*e1eccf28SAndroid Build Coastguard Worker /** 1532*e1eccf28SAndroid Build Coastguard Worker * A Type describes the Element and dimensions used for an Allocation or a 1533*e1eccf28SAndroid Build Coastguard Worker * parallel operation. 1534*e1eccf28SAndroid Build Coastguard Worker * 1535*e1eccf28SAndroid Build Coastguard Worker * A Type always includes an Element and an X dimension. A Type may be 1536*e1eccf28SAndroid Build Coastguard Worker * multidimensional, up to three dimensions. A nonzero value in the Y or Z 1537*e1eccf28SAndroid Build Coastguard Worker * dimensions indicates that the dimension is present. Note that a Type with 1538*e1eccf28SAndroid Build Coastguard Worker * only a given X dimension and a Type with the same X dimension but Y = 1 are 1539*e1eccf28SAndroid Build Coastguard Worker * not equivalent. 1540*e1eccf28SAndroid Build Coastguard Worker * 1541*e1eccf28SAndroid Build Coastguard Worker * A Type also supports inclusion of level of detail (LOD) or cube map 1542*e1eccf28SAndroid Build Coastguard Worker * faces. LOD and cube map faces are booleans to indicate present or not 1543*e1eccf28SAndroid Build Coastguard Worker * present. 1544*e1eccf28SAndroid Build Coastguard Worker * 1545*e1eccf28SAndroid Build Coastguard Worker * A Type also supports YUV format information to support an Allocation in a YUV 1546*e1eccf28SAndroid Build Coastguard Worker * format. The YUV formats supported are RS_YUV_YV12 and RS_YUV_NV21. 1547*e1eccf28SAndroid Build Coastguard Worker */ 1548*e1eccf28SAndroid Build Coastguard Worker class Type : public BaseObj { 1549*e1eccf28SAndroid Build Coastguard Worker protected: 1550*e1eccf28SAndroid Build Coastguard Worker friend class Allocation; 1551*e1eccf28SAndroid Build Coastguard Worker 1552*e1eccf28SAndroid Build Coastguard Worker uint32_t mDimX; 1553*e1eccf28SAndroid Build Coastguard Worker uint32_t mDimY; 1554*e1eccf28SAndroid Build Coastguard Worker uint32_t mDimZ; 1555*e1eccf28SAndroid Build Coastguard Worker RsYuvFormat mYuvFormat; 1556*e1eccf28SAndroid Build Coastguard Worker bool mDimMipmaps; 1557*e1eccf28SAndroid Build Coastguard Worker bool mDimFaces; 1558*e1eccf28SAndroid Build Coastguard Worker size_t mElementCount; 1559*e1eccf28SAndroid Build Coastguard Worker sp<const Element> mElement; 1560*e1eccf28SAndroid Build Coastguard Worker 1561*e1eccf28SAndroid Build Coastguard Worker Type(void *id, sp<RS> rs); 1562*e1eccf28SAndroid Build Coastguard Worker 1563*e1eccf28SAndroid Build Coastguard Worker void calcElementCount(); 1564*e1eccf28SAndroid Build Coastguard Worker virtual void updateFromNative(); 1565*e1eccf28SAndroid Build Coastguard Worker 1566*e1eccf28SAndroid Build Coastguard Worker public: 1567*e1eccf28SAndroid Build Coastguard Worker 1568*e1eccf28SAndroid Build Coastguard Worker /** 1569*e1eccf28SAndroid Build Coastguard Worker * Returns the YUV format. 1570*e1eccf28SAndroid Build Coastguard Worker * @return YUV format of the Allocation 1571*e1eccf28SAndroid Build Coastguard Worker */ getYuvFormat()1572*e1eccf28SAndroid Build Coastguard Worker RsYuvFormat getYuvFormat() const { 1573*e1eccf28SAndroid Build Coastguard Worker return mYuvFormat; 1574*e1eccf28SAndroid Build Coastguard Worker } 1575*e1eccf28SAndroid Build Coastguard Worker 1576*e1eccf28SAndroid Build Coastguard Worker /** 1577*e1eccf28SAndroid Build Coastguard Worker * Returns the Element of the Allocation. 1578*e1eccf28SAndroid Build Coastguard Worker * @return YUV format of the Allocation 1579*e1eccf28SAndroid Build Coastguard Worker */ getElement()1580*e1eccf28SAndroid Build Coastguard Worker sp<const Element> getElement() const { 1581*e1eccf28SAndroid Build Coastguard Worker return mElement; 1582*e1eccf28SAndroid Build Coastguard Worker } 1583*e1eccf28SAndroid Build Coastguard Worker 1584*e1eccf28SAndroid Build Coastguard Worker /** 1585*e1eccf28SAndroid Build Coastguard Worker * Returns the X dimension of the Allocation. 1586*e1eccf28SAndroid Build Coastguard Worker * @return X dimension of the allocation 1587*e1eccf28SAndroid Build Coastguard Worker */ getX()1588*e1eccf28SAndroid Build Coastguard Worker uint32_t getX() const { 1589*e1eccf28SAndroid Build Coastguard Worker return mDimX; 1590*e1eccf28SAndroid Build Coastguard Worker } 1591*e1eccf28SAndroid Build Coastguard Worker 1592*e1eccf28SAndroid Build Coastguard Worker /** 1593*e1eccf28SAndroid Build Coastguard Worker * Returns the Y dimension of the Allocation. 1594*e1eccf28SAndroid Build Coastguard Worker * @return Y dimension of the allocation 1595*e1eccf28SAndroid Build Coastguard Worker */ getY()1596*e1eccf28SAndroid Build Coastguard Worker uint32_t getY() const { 1597*e1eccf28SAndroid Build Coastguard Worker return mDimY; 1598*e1eccf28SAndroid Build Coastguard Worker } 1599*e1eccf28SAndroid Build Coastguard Worker 1600*e1eccf28SAndroid Build Coastguard Worker /** 1601*e1eccf28SAndroid Build Coastguard Worker * Returns the Z dimension of the Allocation. 1602*e1eccf28SAndroid Build Coastguard Worker * @return Z dimension of the allocation 1603*e1eccf28SAndroid Build Coastguard Worker */ getZ()1604*e1eccf28SAndroid Build Coastguard Worker uint32_t getZ() const { 1605*e1eccf28SAndroid Build Coastguard Worker return mDimZ; 1606*e1eccf28SAndroid Build Coastguard Worker } 1607*e1eccf28SAndroid Build Coastguard Worker 1608*e1eccf28SAndroid Build Coastguard Worker /** 1609*e1eccf28SAndroid Build Coastguard Worker * Returns true if the Allocation has mipmaps. 1610*e1eccf28SAndroid Build Coastguard Worker * @return true if the Allocation has mipmaps 1611*e1eccf28SAndroid Build Coastguard Worker */ hasMipmaps()1612*e1eccf28SAndroid Build Coastguard Worker bool hasMipmaps() const { 1613*e1eccf28SAndroid Build Coastguard Worker return mDimMipmaps; 1614*e1eccf28SAndroid Build Coastguard Worker } 1615*e1eccf28SAndroid Build Coastguard Worker 1616*e1eccf28SAndroid Build Coastguard Worker /** 1617*e1eccf28SAndroid Build Coastguard Worker * Returns true if the Allocation is a cube map 1618*e1eccf28SAndroid Build Coastguard Worker * @return true if the Allocation is a cube map 1619*e1eccf28SAndroid Build Coastguard Worker */ hasFaces()1620*e1eccf28SAndroid Build Coastguard Worker bool hasFaces() const { 1621*e1eccf28SAndroid Build Coastguard Worker return mDimFaces; 1622*e1eccf28SAndroid Build Coastguard Worker } 1623*e1eccf28SAndroid Build Coastguard Worker 1624*e1eccf28SAndroid Build Coastguard Worker /** 1625*e1eccf28SAndroid Build Coastguard Worker * Returns number of accessible Elements in the Allocation 1626*e1eccf28SAndroid Build Coastguard Worker * @return number of accessible Elements in the Allocation 1627*e1eccf28SAndroid Build Coastguard Worker */ getCount()1628*e1eccf28SAndroid Build Coastguard Worker size_t getCount() const { 1629*e1eccf28SAndroid Build Coastguard Worker return mElementCount; 1630*e1eccf28SAndroid Build Coastguard Worker } 1631*e1eccf28SAndroid Build Coastguard Worker 1632*e1eccf28SAndroid Build Coastguard Worker /** 1633*e1eccf28SAndroid Build Coastguard Worker * Returns size in bytes of all Elements in the Allocation 1634*e1eccf28SAndroid Build Coastguard Worker * @return size in bytes of all Elements in the Allocation 1635*e1eccf28SAndroid Build Coastguard Worker */ getSizeBytes()1636*e1eccf28SAndroid Build Coastguard Worker size_t getSizeBytes() const { 1637*e1eccf28SAndroid Build Coastguard Worker return mElementCount * mElement->getSizeBytes(); 1638*e1eccf28SAndroid Build Coastguard Worker } 1639*e1eccf28SAndroid Build Coastguard Worker 1640*e1eccf28SAndroid Build Coastguard Worker /** 1641*e1eccf28SAndroid Build Coastguard Worker * Creates a new Type with the given Element and dimensions. 1642*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1643*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element 1644*e1eccf28SAndroid Build Coastguard Worker * @param[in] dimX X dimension 1645*e1eccf28SAndroid Build Coastguard Worker * @param[in] dimY Y dimension 1646*e1eccf28SAndroid Build Coastguard Worker * @param[in] dimZ Z dimension 1647*e1eccf28SAndroid Build Coastguard Worker * @return new Type 1648*e1eccf28SAndroid Build Coastguard Worker */ 1649*e1eccf28SAndroid Build Coastguard Worker static sp<const Type> create(const sp<RS>& rs, const sp<const Element>& e, uint32_t dimX, uint32_t dimY, uint32_t dimZ); 1650*e1eccf28SAndroid Build Coastguard Worker 1651*e1eccf28SAndroid Build Coastguard Worker class Builder { 1652*e1eccf28SAndroid Build Coastguard Worker protected: 1653*e1eccf28SAndroid Build Coastguard Worker RS* mRS; 1654*e1eccf28SAndroid Build Coastguard Worker uint32_t mDimX; 1655*e1eccf28SAndroid Build Coastguard Worker uint32_t mDimY; 1656*e1eccf28SAndroid Build Coastguard Worker uint32_t mDimZ; 1657*e1eccf28SAndroid Build Coastguard Worker RsYuvFormat mYuvFormat; 1658*e1eccf28SAndroid Build Coastguard Worker bool mDimMipmaps; 1659*e1eccf28SAndroid Build Coastguard Worker bool mDimFaces; 1660*e1eccf28SAndroid Build Coastguard Worker sp<const Element> mElement; 1661*e1eccf28SAndroid Build Coastguard Worker 1662*e1eccf28SAndroid Build Coastguard Worker public: 1663*e1eccf28SAndroid Build Coastguard Worker Builder(sp<RS> rs, sp<const Element> e); 1664*e1eccf28SAndroid Build Coastguard Worker 1665*e1eccf28SAndroid Build Coastguard Worker void setX(uint32_t value); 1666*e1eccf28SAndroid Build Coastguard Worker void setY(uint32_t value); 1667*e1eccf28SAndroid Build Coastguard Worker void setZ(uint32_t value); 1668*e1eccf28SAndroid Build Coastguard Worker void setYuvFormat(RsYuvFormat format); 1669*e1eccf28SAndroid Build Coastguard Worker void setMipmaps(bool value); 1670*e1eccf28SAndroid Build Coastguard Worker void setFaces(bool value); 1671*e1eccf28SAndroid Build Coastguard Worker sp<const Type> create(); 1672*e1eccf28SAndroid Build Coastguard Worker }; 1673*e1eccf28SAndroid Build Coastguard Worker 1674*e1eccf28SAndroid Build Coastguard Worker }; 1675*e1eccf28SAndroid Build Coastguard Worker 1676*e1eccf28SAndroid Build Coastguard Worker /** 1677*e1eccf28SAndroid Build Coastguard Worker * The parent class for all executable Scripts. This should not be used by applications. 1678*e1eccf28SAndroid Build Coastguard Worker */ 1679*e1eccf28SAndroid Build Coastguard Worker class Script : public BaseObj { 1680*e1eccf28SAndroid Build Coastguard Worker private: 1681*e1eccf28SAndroid Build Coastguard Worker 1682*e1eccf28SAndroid Build Coastguard Worker protected: 1683*e1eccf28SAndroid Build Coastguard Worker Script(void *id, sp<RS> rs); 1684*e1eccf28SAndroid Build Coastguard Worker void forEach(uint32_t slot, const sp<const Allocation>& in, const sp<const Allocation>& out, 1685*e1eccf28SAndroid Build Coastguard Worker const void *v, size_t) const; 1686*e1eccf28SAndroid Build Coastguard Worker void bindAllocation(const sp<Allocation>& va, uint32_t slot) const; 1687*e1eccf28SAndroid Build Coastguard Worker void setVar(uint32_t index, const void *, size_t len) const; 1688*e1eccf28SAndroid Build Coastguard Worker void setVar(uint32_t index, const sp<const BaseObj>& o) const; 1689*e1eccf28SAndroid Build Coastguard Worker void invoke(uint32_t slot, const void *v, size_t len) const; 1690*e1eccf28SAndroid Build Coastguard Worker 1691*e1eccf28SAndroid Build Coastguard Worker invoke(uint32_t slot)1692*e1eccf28SAndroid Build Coastguard Worker void invoke(uint32_t slot) const { 1693*e1eccf28SAndroid Build Coastguard Worker invoke(slot, NULL, 0); 1694*e1eccf28SAndroid Build Coastguard Worker } setVar(uint32_t index,float v)1695*e1eccf28SAndroid Build Coastguard Worker void setVar(uint32_t index, float v) const { 1696*e1eccf28SAndroid Build Coastguard Worker setVar(index, &v, sizeof(v)); 1697*e1eccf28SAndroid Build Coastguard Worker } setVar(uint32_t index,double v)1698*e1eccf28SAndroid Build Coastguard Worker void setVar(uint32_t index, double v) const { 1699*e1eccf28SAndroid Build Coastguard Worker setVar(index, &v, sizeof(v)); 1700*e1eccf28SAndroid Build Coastguard Worker } setVar(uint32_t index,int32_t v)1701*e1eccf28SAndroid Build Coastguard Worker void setVar(uint32_t index, int32_t v) const { 1702*e1eccf28SAndroid Build Coastguard Worker setVar(index, &v, sizeof(v)); 1703*e1eccf28SAndroid Build Coastguard Worker } setVar(uint32_t index,uint32_t v)1704*e1eccf28SAndroid Build Coastguard Worker void setVar(uint32_t index, uint32_t v) const { 1705*e1eccf28SAndroid Build Coastguard Worker setVar(index, &v, sizeof(v)); 1706*e1eccf28SAndroid Build Coastguard Worker } setVar(uint32_t index,int64_t v)1707*e1eccf28SAndroid Build Coastguard Worker void setVar(uint32_t index, int64_t v) const { 1708*e1eccf28SAndroid Build Coastguard Worker setVar(index, &v, sizeof(v)); 1709*e1eccf28SAndroid Build Coastguard Worker } setVar(uint32_t index,bool v)1710*e1eccf28SAndroid Build Coastguard Worker void setVar(uint32_t index, bool v) const { 1711*e1eccf28SAndroid Build Coastguard Worker setVar(index, &v, sizeof(v)); 1712*e1eccf28SAndroid Build Coastguard Worker } 1713*e1eccf28SAndroid Build Coastguard Worker 1714*e1eccf28SAndroid Build Coastguard Worker public: 1715*e1eccf28SAndroid Build Coastguard Worker class FieldBase { 1716*e1eccf28SAndroid Build Coastguard Worker protected: 1717*e1eccf28SAndroid Build Coastguard Worker sp<const Element> mElement; 1718*e1eccf28SAndroid Build Coastguard Worker sp<Allocation> mAllocation; 1719*e1eccf28SAndroid Build Coastguard Worker 1720*e1eccf28SAndroid Build Coastguard Worker void init(const sp<RS>& rs, uint32_t dimx, uint32_t usages = 0); 1721*e1eccf28SAndroid Build Coastguard Worker 1722*e1eccf28SAndroid Build Coastguard Worker public: getElement()1723*e1eccf28SAndroid Build Coastguard Worker sp<const Element> getElement() { 1724*e1eccf28SAndroid Build Coastguard Worker return mElement; 1725*e1eccf28SAndroid Build Coastguard Worker } 1726*e1eccf28SAndroid Build Coastguard Worker getType()1727*e1eccf28SAndroid Build Coastguard Worker sp<const Type> getType() { 1728*e1eccf28SAndroid Build Coastguard Worker return mAllocation->getType(); 1729*e1eccf28SAndroid Build Coastguard Worker } 1730*e1eccf28SAndroid Build Coastguard Worker getAllocation()1731*e1eccf28SAndroid Build Coastguard Worker sp<const Allocation> getAllocation() { 1732*e1eccf28SAndroid Build Coastguard Worker return mAllocation; 1733*e1eccf28SAndroid Build Coastguard Worker } 1734*e1eccf28SAndroid Build Coastguard Worker 1735*e1eccf28SAndroid Build Coastguard Worker //void updateAllocation(); 1736*e1eccf28SAndroid Build Coastguard Worker }; 1737*e1eccf28SAndroid Build Coastguard Worker }; 1738*e1eccf28SAndroid Build Coastguard Worker 1739*e1eccf28SAndroid Build Coastguard Worker /** 1740*e1eccf28SAndroid Build Coastguard Worker * The parent class for all user-defined scripts. This is intended to be used by auto-generated code only. 1741*e1eccf28SAndroid Build Coastguard Worker */ 1742*e1eccf28SAndroid Build Coastguard Worker class ScriptC : public Script { 1743*e1eccf28SAndroid Build Coastguard Worker protected: 1744*e1eccf28SAndroid Build Coastguard Worker ScriptC(sp<RS> rs, 1745*e1eccf28SAndroid Build Coastguard Worker const void *codeTxt, size_t codeLength, 1746*e1eccf28SAndroid Build Coastguard Worker const char *cachedName, size_t cachedNameLength, 1747*e1eccf28SAndroid Build Coastguard Worker const char *cacheDir, size_t cacheDirLength); 1748*e1eccf28SAndroid Build Coastguard Worker 1749*e1eccf28SAndroid Build Coastguard Worker }; 1750*e1eccf28SAndroid Build Coastguard Worker 1751*e1eccf28SAndroid Build Coastguard Worker /** 1752*e1eccf28SAndroid Build Coastguard Worker * The parent class for all script intrinsics. Intrinsics provide highly optimized implementations of 1753*e1eccf28SAndroid Build Coastguard Worker * basic functions. This is not intended to be used directly. 1754*e1eccf28SAndroid Build Coastguard Worker */ 1755*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsic : public Script { 1756*e1eccf28SAndroid Build Coastguard Worker protected: 1757*e1eccf28SAndroid Build Coastguard Worker sp<const Element> mElement; 1758*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsic(sp<RS> rs, int id, sp<const Element> e); 1759*e1eccf28SAndroid Build Coastguard Worker virtual ~ScriptIntrinsic(); 1760*e1eccf28SAndroid Build Coastguard Worker }; 1761*e1eccf28SAndroid Build Coastguard Worker 1762*e1eccf28SAndroid Build Coastguard Worker /** 1763*e1eccf28SAndroid Build Coastguard Worker * Intrinsic for converting RGB to RGBA by using a 3D lookup table. The incoming 1764*e1eccf28SAndroid Build Coastguard Worker * r,g,b values are use as normalized x,y,z coordinates into a 3D 1765*e1eccf28SAndroid Build Coastguard Worker * allocation. The 8 nearest values are sampled and linearly interpolated. The 1766*e1eccf28SAndroid Build Coastguard Worker * result is placed in the output. 1767*e1eccf28SAndroid Build Coastguard Worker */ 1768*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsic3DLUT : public ScriptIntrinsic { 1769*e1eccf28SAndroid Build Coastguard Worker private: 1770*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsic3DLUT(sp<RS> rs, sp<const Element> e); 1771*e1eccf28SAndroid Build Coastguard Worker public: 1772*e1eccf28SAndroid Build Coastguard Worker /** 1773*e1eccf28SAndroid Build Coastguard Worker * Supported Element types are U8_4. Default lookup table is identity. 1774*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 1775*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element 1776*e1eccf28SAndroid Build Coastguard Worker * @return new ScriptIntrinsic 1777*e1eccf28SAndroid Build Coastguard Worker */ 1778*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsic3DLUT> create(const sp<RS>& rs, const sp<const Element>& e); 1779*e1eccf28SAndroid Build Coastguard Worker 1780*e1eccf28SAndroid Build Coastguard Worker /** 1781*e1eccf28SAndroid Build Coastguard Worker * Launch the intrinsic. 1782*e1eccf28SAndroid Build Coastguard Worker * @param[in] ain input Allocation 1783*e1eccf28SAndroid Build Coastguard Worker * @param[in] aout output Allocation 1784*e1eccf28SAndroid Build Coastguard Worker */ 1785*e1eccf28SAndroid Build Coastguard Worker void forEach(const sp<Allocation>& ain, const sp<Allocation>& aout); 1786*e1eccf28SAndroid Build Coastguard Worker 1787*e1eccf28SAndroid Build Coastguard Worker /** 1788*e1eccf28SAndroid Build Coastguard Worker * Sets the lookup table. The lookup table must use the same Element as the 1789*e1eccf28SAndroid Build Coastguard Worker * intrinsic. 1790*e1eccf28SAndroid Build Coastguard Worker * @param[in] lut new lookup table 1791*e1eccf28SAndroid Build Coastguard Worker */ 1792*e1eccf28SAndroid Build Coastguard Worker void setLUT(const sp<Allocation>& lut); 1793*e1eccf28SAndroid Build Coastguard Worker }; 1794*e1eccf28SAndroid Build Coastguard Worker 1795*e1eccf28SAndroid Build Coastguard Worker 1796*e1eccf28SAndroid Build Coastguard Worker /** 1797*e1eccf28SAndroid Build Coastguard Worker * Intrinsic kernel provides high performance RenderScript APIs to BLAS. 1798*e1eccf28SAndroid Build Coastguard Worker * 1799*e1eccf28SAndroid Build Coastguard Worker * The BLAS (Basic Linear Algebra Subprograms) are routines that provide standard 1800*e1eccf28SAndroid Build Coastguard Worker * building blocks for performing basic vector and matrix operations. 1801*e1eccf28SAndroid Build Coastguard Worker * 1802*e1eccf28SAndroid Build Coastguard Worker * For detailed description of BLAS, please refer to http://www.netlib.org/blas/ 1803*e1eccf28SAndroid Build Coastguard Worker * 1804*e1eccf28SAndroid Build Coastguard Worker **/ 1805*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsicBLAS : public ScriptIntrinsic { 1806*e1eccf28SAndroid Build Coastguard Worker private: 1807*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsicBLAS(sp<RS> rs, sp<const Element> e); 1808*e1eccf28SAndroid Build Coastguard Worker public: 1809*e1eccf28SAndroid Build Coastguard Worker /** 1810*e1eccf28SAndroid Build Coastguard Worker * Create an intrinsic to access BLAS subroutines. 1811*e1eccf28SAndroid Build Coastguard Worker * 1812*e1eccf28SAndroid Build Coastguard Worker * @param rs The RenderScript context 1813*e1eccf28SAndroid Build Coastguard Worker * @return ScriptIntrinsicBLAS 1814*e1eccf28SAndroid Build Coastguard Worker */ 1815*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsicBLAS> create(const sp<RS>& rs); 1816*e1eccf28SAndroid Build Coastguard Worker 1817*e1eccf28SAndroid Build Coastguard Worker /** 1818*e1eccf28SAndroid Build Coastguard Worker * SGEMV performs one of the matrix-vector operations 1819*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y 1820*e1eccf28SAndroid Build Coastguard Worker * 1821*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/d58/sgemv_8f.html 1822*e1eccf28SAndroid Build Coastguard Worker * 1823*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 1824*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 1825*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 1826*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 1827*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 1828*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 1829*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32}. 1830*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 1831*e1eccf28SAndroid Build Coastguard Worker */ 1832*e1eccf28SAndroid Build Coastguard Worker void SGEMV(RsBlasTranspose TransA, 1833*e1eccf28SAndroid Build Coastguard Worker float alpha, const sp<Allocation>& A, const sp<Allocation>& X, int incX, 1834*e1eccf28SAndroid Build Coastguard Worker float beta, const sp<Allocation>& Y, int incY); 1835*e1eccf28SAndroid Build Coastguard Worker 1836*e1eccf28SAndroid Build Coastguard Worker /** 1837*e1eccf28SAndroid Build Coastguard Worker * DGEMV performs one of the matrix-vector operations 1838*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y 1839*e1eccf28SAndroid Build Coastguard Worker * 1840*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/dc/da8/dgemv_8f.html 1841*e1eccf28SAndroid Build Coastguard Worker * 1842*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 1843*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 1844*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 1845*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 1846*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 1847*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 1848*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64}. 1849*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 1850*e1eccf28SAndroid Build Coastguard Worker */ 1851*e1eccf28SAndroid Build Coastguard Worker void DGEMV(RsBlasTranspose TransA, 1852*e1eccf28SAndroid Build Coastguard Worker double alpha, const sp<Allocation>& A, const sp<Allocation>& X, int incX, 1853*e1eccf28SAndroid Build Coastguard Worker double beta, const sp<Allocation>& Y, int incY); 1854*e1eccf28SAndroid Build Coastguard Worker 1855*e1eccf28SAndroid Build Coastguard Worker /** 1856*e1eccf28SAndroid Build Coastguard Worker * CGEMV performs one of the matrix-vector operations 1857*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y 1858*e1eccf28SAndroid Build Coastguard Worker * 1859*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d4/d8a/cgemv_8f.html 1860*e1eccf28SAndroid Build Coastguard Worker * 1861*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 1862*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 1863*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 1864*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 1865*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 1866*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 1867*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32_2}. 1868*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 1869*e1eccf28SAndroid Build Coastguard Worker */ 1870*e1eccf28SAndroid Build Coastguard Worker void CGEMV(RsBlasTranspose TransA, 1871*e1eccf28SAndroid Build Coastguard Worker Float2 alpha, const sp<Allocation>& A, const sp<Allocation>& X, int incX, 1872*e1eccf28SAndroid Build Coastguard Worker Float2 beta, const sp<Allocation>& Y, int incY); 1873*e1eccf28SAndroid Build Coastguard Worker 1874*e1eccf28SAndroid Build Coastguard Worker /** 1875*e1eccf28SAndroid Build Coastguard Worker * ZGEMV performs one of the matrix-vector operations 1876*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y 1877*e1eccf28SAndroid Build Coastguard Worker * 1878*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/d40/zgemv_8f.html 1879*e1eccf28SAndroid Build Coastguard Worker * 1880*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 1881*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 1882*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 1883*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 1884*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 1885*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 1886*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64_2}. 1887*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 1888*e1eccf28SAndroid Build Coastguard Worker */ 1889*e1eccf28SAndroid Build Coastguard Worker void ZGEMV(RsBlasTranspose TransA, 1890*e1eccf28SAndroid Build Coastguard Worker Double2 alpha, const sp<Allocation>& A, const sp<Allocation>& X, int incX, 1891*e1eccf28SAndroid Build Coastguard Worker Double2 beta, const sp<Allocation>& Y, int incY); 1892*e1eccf28SAndroid Build Coastguard Worker 1893*e1eccf28SAndroid Build Coastguard Worker /** 1894*e1eccf28SAndroid Build Coastguard Worker * SGBMV performs one of the matrix-vector operations 1895*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y 1896*e1eccf28SAndroid Build Coastguard Worker * 1897*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d6/d46/sgbmv_8f.html 1898*e1eccf28SAndroid Build Coastguard Worker * 1899*e1eccf28SAndroid Build Coastguard Worker * Note: For a M*N matrix, the input Allocation should also be of size M*N (dimY = M, dimX = N), 1900*e1eccf28SAndroid Build Coastguard Worker * but only the region M*(KL+KU+1) will be referenced. The following subroutine can is an 1901*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert the original matrix 'a' to row-based band matrix 'b'. 1902*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, m): 1903*e1eccf28SAndroid Build Coastguard Worker * for j in range(max(0, i-kl), min(i+ku+1, n)): 1904*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i+kl] = a[i, j] 1905*e1eccf28SAndroid Build Coastguard Worker * 1906*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 1907*e1eccf28SAndroid Build Coastguard Worker * @param KL The number of sub-diagonals of the matrix A. 1908*e1eccf28SAndroid Build Coastguard Worker * @param KU The number of super-diagonals of the matrix A. 1909*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 1910*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains the band matrix A, supported elements type: {Element#F32}. 1911*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 1912*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 1913*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 1914*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32}. 1915*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 1916*e1eccf28SAndroid Build Coastguard Worker */ 1917*e1eccf28SAndroid Build Coastguard Worker void SGBMV(RsBlasTranspose TransA, 1918*e1eccf28SAndroid Build Coastguard Worker int KL, int KU, float alpha, const sp<Allocation>& A, const sp<Allocation>& X, int incX, 1919*e1eccf28SAndroid Build Coastguard Worker float beta, const sp<Allocation>& Y, int incY); 1920*e1eccf28SAndroid Build Coastguard Worker 1921*e1eccf28SAndroid Build Coastguard Worker /** 1922*e1eccf28SAndroid Build Coastguard Worker * DGBMV performs one of the matrix-vector operations 1923*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y 1924*e1eccf28SAndroid Build Coastguard Worker * 1925*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d2/d3f/dgbmv_8f.html 1926*e1eccf28SAndroid Build Coastguard Worker * 1927*e1eccf28SAndroid Build Coastguard Worker * Note: For a M*N matrix, the input Allocation should also be of size M*N (dimY = M, dimX = N), 1928*e1eccf28SAndroid Build Coastguard Worker * but only the region M*(KL+KU+1) will be referenced. The following subroutine can is an 1929*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert the original matrix 'a' to row-based band matrix 'b'. 1930*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, m): 1931*e1eccf28SAndroid Build Coastguard Worker * for j in range(max(0, i-kl), min(i+ku+1, n)): 1932*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i+kl] = a[i, j] 1933*e1eccf28SAndroid Build Coastguard Worker * 1934*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 1935*e1eccf28SAndroid Build Coastguard Worker * @param KL The number of sub-diagonals of the matrix A. 1936*e1eccf28SAndroid Build Coastguard Worker * @param KU The number of super-diagonals of the matrix A. 1937*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 1938*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains the band matrix A, supported elements type: {Element#F64}. 1939*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 1940*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 1941*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 1942*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64}. 1943*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 1944*e1eccf28SAndroid Build Coastguard Worker */ 1945*e1eccf28SAndroid Build Coastguard Worker void DGBMV(RsBlasTranspose TransA, 1946*e1eccf28SAndroid Build Coastguard Worker int KL, int KU, double alpha, const sp<Allocation>& A, const sp<Allocation>& X, 1947*e1eccf28SAndroid Build Coastguard Worker int incX, double beta, const sp<Allocation>& Y, int incY); 1948*e1eccf28SAndroid Build Coastguard Worker 1949*e1eccf28SAndroid Build Coastguard Worker /** 1950*e1eccf28SAndroid Build Coastguard Worker * CGBMV performs one of the matrix-vector operations 1951*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y 1952*e1eccf28SAndroid Build Coastguard Worker * 1953*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d0/d75/cgbmv_8f.html 1954*e1eccf28SAndroid Build Coastguard Worker * 1955*e1eccf28SAndroid Build Coastguard Worker * Note: For a M*N matrix, the input Allocation should also be of size M*N (dimY = M, dimX = N), 1956*e1eccf28SAndroid Build Coastguard Worker * but only the region M*(KL+KU+1) will be referenced. The following subroutine can is an 1957*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert the original matrix 'a' to row-based band matrix 'b'. 1958*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, m): 1959*e1eccf28SAndroid Build Coastguard Worker * for j in range(max(0, i-kl), min(i+ku+1, n)): 1960*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i+kl] = a[i, j] 1961*e1eccf28SAndroid Build Coastguard Worker * 1962*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 1963*e1eccf28SAndroid Build Coastguard Worker * @param KL The number of sub-diagonals of the matrix A. 1964*e1eccf28SAndroid Build Coastguard Worker * @param KU The number of super-diagonals of the matrix A. 1965*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 1966*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains the band matrix A, supported elements type: {Element#F32_2}. 1967*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 1968*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 1969*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 1970*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32_2}. 1971*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 1972*e1eccf28SAndroid Build Coastguard Worker */ 1973*e1eccf28SAndroid Build Coastguard Worker void CGBMV(RsBlasTranspose TransA, 1974*e1eccf28SAndroid Build Coastguard Worker int KL, int KU, Float2 alpha, const sp<Allocation>& A, const sp<Allocation>& X, 1975*e1eccf28SAndroid Build Coastguard Worker int incX, Float2 beta, const sp<Allocation>& Y, int incY); 1976*e1eccf28SAndroid Build Coastguard Worker 1977*e1eccf28SAndroid Build Coastguard Worker /** 1978*e1eccf28SAndroid Build Coastguard Worker * ZGBMV performs one of the matrix-vector operations 1979*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y or y := alpha*A**T*x + beta*y or y := alpha*A**H*x + beta*y 1980*e1eccf28SAndroid Build Coastguard Worker * 1981*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d9/d46/zgbmv_8f.html 1982*e1eccf28SAndroid Build Coastguard Worker * 1983*e1eccf28SAndroid Build Coastguard Worker * Note: For a M*N matrix, the input Allocation should also be of size M*N (dimY = M, dimX = N), 1984*e1eccf28SAndroid Build Coastguard Worker * but only the region M*(KL+KU+1) will be referenced. The following subroutine can is an 1985*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert the original matrix 'a' to row-based band matrix 'b'. 1986*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, m): 1987*e1eccf28SAndroid Build Coastguard Worker * for j in range(max(0, i-kl), min(i+ku+1, n)): 1988*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i+kl] = a[i, j] 1989*e1eccf28SAndroid Build Coastguard Worker * 1990*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 1991*e1eccf28SAndroid Build Coastguard Worker * @param KL The number of sub-diagonals of the matrix A. 1992*e1eccf28SAndroid Build Coastguard Worker * @param KU The number of super-diagonals of the matrix A. 1993*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 1994*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains the band matrix A, supported elements type: {Element#F64_2}. 1995*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 1996*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 1997*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 1998*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64_2}. 1999*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2000*e1eccf28SAndroid Build Coastguard Worker */ 2001*e1eccf28SAndroid Build Coastguard Worker void ZGBMV(RsBlasTranspose TransA, 2002*e1eccf28SAndroid Build Coastguard Worker int KL, int KU, Double2 alpha, const sp<Allocation>& A, const sp<Allocation>& X, int incX, 2003*e1eccf28SAndroid Build Coastguard Worker Double2 beta, const sp<Allocation>& Y, int incY); 2004*e1eccf28SAndroid Build Coastguard Worker 2005*e1eccf28SAndroid Build Coastguard Worker /** 2006*e1eccf28SAndroid Build Coastguard Worker * STRMV performs one of the matrix-vector operations 2007*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x 2008*e1eccf28SAndroid Build Coastguard Worker * 2009*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/de/d45/strmv_8f.html 2010*e1eccf28SAndroid Build Coastguard Worker * 2011*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2012*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2013*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2014*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 2015*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2016*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2017*e1eccf28SAndroid Build Coastguard Worker */ 2018*e1eccf28SAndroid Build Coastguard Worker void STRMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2019*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2020*e1eccf28SAndroid Build Coastguard Worker 2021*e1eccf28SAndroid Build Coastguard Worker /** 2022*e1eccf28SAndroid Build Coastguard Worker * DTRMV performs one of the matrix-vector operations 2023*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x 2024*e1eccf28SAndroid Build Coastguard Worker * 2025*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/dc/d7e/dtrmv_8f.html 2026*e1eccf28SAndroid Build Coastguard Worker * 2027*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2028*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2029*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2030*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 2031*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2032*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2033*e1eccf28SAndroid Build Coastguard Worker */ 2034*e1eccf28SAndroid Build Coastguard Worker void DTRMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2035*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2036*e1eccf28SAndroid Build Coastguard Worker 2037*e1eccf28SAndroid Build Coastguard Worker /** 2038*e1eccf28SAndroid Build Coastguard Worker * CTRMV performs one of the matrix-vector operations 2039*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x or x := A**H*x 2040*e1eccf28SAndroid Build Coastguard Worker * 2041*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/df/d78/ctrmv_8f.html 2042*e1eccf28SAndroid Build Coastguard Worker * 2043*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2044*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2045*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2046*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2047*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2048*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2049*e1eccf28SAndroid Build Coastguard Worker */ 2050*e1eccf28SAndroid Build Coastguard Worker void CTRMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2051*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2052*e1eccf28SAndroid Build Coastguard Worker 2053*e1eccf28SAndroid Build Coastguard Worker /** 2054*e1eccf28SAndroid Build Coastguard Worker * ZTRMV performs one of the matrix-vector operations 2055*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x or x := A**H*x 2056*e1eccf28SAndroid Build Coastguard Worker * 2057*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d0/dd1/ztrmv_8f.html 2058*e1eccf28SAndroid Build Coastguard Worker * 2059*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2060*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2061*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2062*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 2063*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 2064*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2065*e1eccf28SAndroid Build Coastguard Worker */ 2066*e1eccf28SAndroid Build Coastguard Worker void ZTRMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2067*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2068*e1eccf28SAndroid Build Coastguard Worker 2069*e1eccf28SAndroid Build Coastguard Worker /** 2070*e1eccf28SAndroid Build Coastguard Worker * STBMV performs one of the matrix-vector operations 2071*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x 2072*e1eccf28SAndroid Build Coastguard Worker * 2073*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d6/d7d/stbmv_8f.html 2074*e1eccf28SAndroid Build Coastguard Worker * 2075*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2076*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2077*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2078*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2079*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2080*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2081*e1eccf28SAndroid Build Coastguard Worker * 2082*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2083*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2084*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2085*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2086*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 2087*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2088*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2089*e1eccf28SAndroid Build Coastguard Worker */ 2090*e1eccf28SAndroid Build Coastguard Worker void STBMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2091*e1eccf28SAndroid Build Coastguard Worker int K, const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2092*e1eccf28SAndroid Build Coastguard Worker 2093*e1eccf28SAndroid Build Coastguard Worker /** 2094*e1eccf28SAndroid Build Coastguard Worker * DTBMV performs one of the matrix-vector operations 2095*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x 2096*e1eccf28SAndroid Build Coastguard Worker * 2097*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/df/d29/dtbmv_8f.html 2098*e1eccf28SAndroid Build Coastguard Worker * 2099*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2100*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2101*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2102*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2103*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2104*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2105*e1eccf28SAndroid Build Coastguard Worker * 2106*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2107*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2108*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2109*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2110*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 2111*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2112*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2113*e1eccf28SAndroid Build Coastguard Worker */ 2114*e1eccf28SAndroid Build Coastguard Worker void DTBMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2115*e1eccf28SAndroid Build Coastguard Worker int K, const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2116*e1eccf28SAndroid Build Coastguard Worker 2117*e1eccf28SAndroid Build Coastguard Worker /** 2118*e1eccf28SAndroid Build Coastguard Worker * CTBMV performs one of the matrix-vector operations 2119*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x or x := A**H*x 2120*e1eccf28SAndroid Build Coastguard Worker * 2121*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d3/dcd/ctbmv_8f.html 2122*e1eccf28SAndroid Build Coastguard Worker * 2123*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2124*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2125*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2126*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2127*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2128*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2129*e1eccf28SAndroid Build Coastguard Worker * 2130*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2131*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2132*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2133*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2134*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2135*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2136*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2137*e1eccf28SAndroid Build Coastguard Worker */ 2138*e1eccf28SAndroid Build Coastguard Worker void CTBMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2139*e1eccf28SAndroid Build Coastguard Worker int K, const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2140*e1eccf28SAndroid Build Coastguard Worker 2141*e1eccf28SAndroid Build Coastguard Worker /** 2142*e1eccf28SAndroid Build Coastguard Worker * ZTBMV performs one of the matrix-vector operations 2143*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x or x := A**H*x 2144*e1eccf28SAndroid Build Coastguard Worker * 2145*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d3/d39/ztbmv_8f.html 2146*e1eccf28SAndroid Build Coastguard Worker * 2147*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2148*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2149*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2150*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2151*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2152*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2153*e1eccf28SAndroid Build Coastguard Worker * 2154*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2155*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2156*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2157*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2158*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 2159*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 2160*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2161*e1eccf28SAndroid Build Coastguard Worker */ 2162*e1eccf28SAndroid Build Coastguard Worker void ZTBMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2163*e1eccf28SAndroid Build Coastguard Worker int K, const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2164*e1eccf28SAndroid Build Coastguard Worker 2165*e1eccf28SAndroid Build Coastguard Worker /** 2166*e1eccf28SAndroid Build Coastguard Worker * STPMV performs one of the matrix-vector operations 2167*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x 2168*e1eccf28SAndroid Build Coastguard Worker * 2169*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/db1/stpmv_8f.html 2170*e1eccf28SAndroid Build Coastguard Worker * 2171*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2172*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2173*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2174*e1eccf28SAndroid Build Coastguard Worker * k = 0 2175*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2176*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2177*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2178*e1eccf28SAndroid Build Coastguard Worker * 2179*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2180*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2181*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2182*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains packed matrix A, supported elements type: {Element#F32}. 2183*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2184*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2185*e1eccf28SAndroid Build Coastguard Worker */ 2186*e1eccf28SAndroid Build Coastguard Worker void STPMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2187*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Ap, const sp<Allocation>& X, int incX); 2188*e1eccf28SAndroid Build Coastguard Worker 2189*e1eccf28SAndroid Build Coastguard Worker /** 2190*e1eccf28SAndroid Build Coastguard Worker * DTPMV performs one of the matrix-vector operations 2191*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x 2192*e1eccf28SAndroid Build Coastguard Worker * 2193*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/dc/dcd/dtpmv_8f.html 2194*e1eccf28SAndroid Build Coastguard Worker * 2195*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2196*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2197*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2198*e1eccf28SAndroid Build Coastguard Worker * k = 0 2199*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2200*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2201*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2202*e1eccf28SAndroid Build Coastguard Worker * 2203*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2204*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2205*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2206*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains packed matrix A, supported elements type: {Element#F64}. 2207*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2208*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2209*e1eccf28SAndroid Build Coastguard Worker */ 2210*e1eccf28SAndroid Build Coastguard Worker void DTPMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2211*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Ap, const sp<Allocation>& X, int incX); 2212*e1eccf28SAndroid Build Coastguard Worker 2213*e1eccf28SAndroid Build Coastguard Worker /** 2214*e1eccf28SAndroid Build Coastguard Worker * CTPMV performs one of the matrix-vector operations 2215*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x or x := A**H*x 2216*e1eccf28SAndroid Build Coastguard Worker * 2217*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d4/dbb/ctpmv_8f.html 2218*e1eccf28SAndroid Build Coastguard Worker * 2219*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2220*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2221*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2222*e1eccf28SAndroid Build Coastguard Worker * k = 0 2223*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2224*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2225*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2226*e1eccf28SAndroid Build Coastguard Worker * 2227*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2228*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2229*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2230*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains packed matrix A, supported elements type: {Element#F32_2}. 2231*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2232*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2233*e1eccf28SAndroid Build Coastguard Worker */ 2234*e1eccf28SAndroid Build Coastguard Worker void CTPMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2235*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Ap, const sp<Allocation>& X, int incX); 2236*e1eccf28SAndroid Build Coastguard Worker 2237*e1eccf28SAndroid Build Coastguard Worker /** 2238*e1eccf28SAndroid Build Coastguard Worker * ZTPMV performs one of the matrix-vector operations 2239*e1eccf28SAndroid Build Coastguard Worker * x := A*x or x := A**T*x or x := A**H*x 2240*e1eccf28SAndroid Build Coastguard Worker * 2241*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d2/d9e/ztpmv_8f.html 2242*e1eccf28SAndroid Build Coastguard Worker * 2243*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2244*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2245*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2246*e1eccf28SAndroid Build Coastguard Worker * k = 0 2247*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2248*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2249*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2250*e1eccf28SAndroid Build Coastguard Worker * 2251*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2252*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2253*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2254*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains packed matrix A, supported elements type: {Element#F64_2}. 2255*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 2256*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2257*e1eccf28SAndroid Build Coastguard Worker */ 2258*e1eccf28SAndroid Build Coastguard Worker void ZTPMV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2259*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Ap, const sp<Allocation>& X, int incX); 2260*e1eccf28SAndroid Build Coastguard Worker 2261*e1eccf28SAndroid Build Coastguard Worker /** 2262*e1eccf28SAndroid Build Coastguard Worker * STRSV solves one of the systems of equations 2263*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b 2264*e1eccf28SAndroid Build Coastguard Worker * 2265*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d0/d2a/strsv_8f.html 2266*e1eccf28SAndroid Build Coastguard Worker * 2267*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2268*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2269*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2270*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 2271*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2272*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2273*e1eccf28SAndroid Build Coastguard Worker */ 2274*e1eccf28SAndroid Build Coastguard Worker void STRSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2275*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2276*e1eccf28SAndroid Build Coastguard Worker 2277*e1eccf28SAndroid Build Coastguard Worker /** 2278*e1eccf28SAndroid Build Coastguard Worker * DTRSV solves one of the systems of equations 2279*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b 2280*e1eccf28SAndroid Build Coastguard Worker * 2281*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d6/d96/dtrsv_8f.html 2282*e1eccf28SAndroid Build Coastguard Worker * 2283*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2284*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2285*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2286*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 2287*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2288*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2289*e1eccf28SAndroid Build Coastguard Worker */ 2290*e1eccf28SAndroid Build Coastguard Worker void DTRSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2291*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2292*e1eccf28SAndroid Build Coastguard Worker 2293*e1eccf28SAndroid Build Coastguard Worker /** 2294*e1eccf28SAndroid Build Coastguard Worker * CTRSV solves one of the systems of equations 2295*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b or A**H*x = b 2296*e1eccf28SAndroid Build Coastguard Worker * 2297*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d4/dc8/ctrsv_8f.html 2298*e1eccf28SAndroid Build Coastguard Worker * 2299*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2300*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2301*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2302*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2303*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2304*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2305*e1eccf28SAndroid Build Coastguard Worker */ 2306*e1eccf28SAndroid Build Coastguard Worker void CTRSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2307*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2308*e1eccf28SAndroid Build Coastguard Worker 2309*e1eccf28SAndroid Build Coastguard Worker /** 2310*e1eccf28SAndroid Build Coastguard Worker * ZTRSV solves one of the systems of equations 2311*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b or A**H*x = b 2312*e1eccf28SAndroid Build Coastguard Worker * 2313*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d1/d2f/ztrsv_8f.html 2314*e1eccf28SAndroid Build Coastguard Worker * 2315*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2316*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2317*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2318*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 2319*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 2320*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2321*e1eccf28SAndroid Build Coastguard Worker */ 2322*e1eccf28SAndroid Build Coastguard Worker void ZTRSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2323*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2324*e1eccf28SAndroid Build Coastguard Worker 2325*e1eccf28SAndroid Build Coastguard Worker /** 2326*e1eccf28SAndroid Build Coastguard Worker * STBSV solves one of the systems of equations 2327*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b 2328*e1eccf28SAndroid Build Coastguard Worker * 2329*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d0/d1f/stbsv_8f.html 2330*e1eccf28SAndroid Build Coastguard Worker * 2331*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2332*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2333*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2334*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2335*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2336*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2337*e1eccf28SAndroid Build Coastguard Worker * 2338*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2339*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2340*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2341*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2342*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 2343*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2344*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2345*e1eccf28SAndroid Build Coastguard Worker */ 2346*e1eccf28SAndroid Build Coastguard Worker void STBSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2347*e1eccf28SAndroid Build Coastguard Worker int K, const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2348*e1eccf28SAndroid Build Coastguard Worker 2349*e1eccf28SAndroid Build Coastguard Worker /** 2350*e1eccf28SAndroid Build Coastguard Worker * DTBSV solves one of the systems of equations 2351*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b 2352*e1eccf28SAndroid Build Coastguard Worker * 2353*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d4/dcf/dtbsv_8f.html 2354*e1eccf28SAndroid Build Coastguard Worker * 2355*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2356*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2357*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2358*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2359*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2360*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2361*e1eccf28SAndroid Build Coastguard Worker * 2362*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2363*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2364*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2365*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2366*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 2367*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2368*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2369*e1eccf28SAndroid Build Coastguard Worker */ 2370*e1eccf28SAndroid Build Coastguard Worker void DTBSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2371*e1eccf28SAndroid Build Coastguard Worker int K, const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2372*e1eccf28SAndroid Build Coastguard Worker 2373*e1eccf28SAndroid Build Coastguard Worker /** 2374*e1eccf28SAndroid Build Coastguard Worker * CTBSV solves one of the systems of equations 2375*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b or A**H*x = b 2376*e1eccf28SAndroid Build Coastguard Worker * 2377*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d9/d5f/ctbsv_8f.html 2378*e1eccf28SAndroid Build Coastguard Worker * 2379*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2380*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2381*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2382*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2383*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2384*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2385*e1eccf28SAndroid Build Coastguard Worker * 2386*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2387*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2388*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2389*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2390*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2391*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2392*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2393*e1eccf28SAndroid Build Coastguard Worker */ 2394*e1eccf28SAndroid Build Coastguard Worker void CTBSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2395*e1eccf28SAndroid Build Coastguard Worker int K, const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2396*e1eccf28SAndroid Build Coastguard Worker 2397*e1eccf28SAndroid Build Coastguard Worker /** 2398*e1eccf28SAndroid Build Coastguard Worker * ZTBSV solves one of the systems of equations 2399*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b or A**H*x = b 2400*e1eccf28SAndroid Build Coastguard Worker * 2401*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d4/d5a/ztbsv_8f.html 2402*e1eccf28SAndroid Build Coastguard Worker * 2403*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2404*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2405*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2406*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2407*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2408*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2409*e1eccf28SAndroid Build Coastguard Worker * 2410*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2411*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2412*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2413*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2414*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 2415*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 2416*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2417*e1eccf28SAndroid Build Coastguard Worker */ 2418*e1eccf28SAndroid Build Coastguard Worker void ZTBSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2419*e1eccf28SAndroid Build Coastguard Worker int K, const sp<Allocation>& A, const sp<Allocation>& X, int incX); 2420*e1eccf28SAndroid Build Coastguard Worker 2421*e1eccf28SAndroid Build Coastguard Worker /** 2422*e1eccf28SAndroid Build Coastguard Worker * STPSV solves one of the systems of equations 2423*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b 2424*e1eccf28SAndroid Build Coastguard Worker * 2425*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d0/d7c/stpsv_8f.html 2426*e1eccf28SAndroid Build Coastguard Worker * 2427*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2428*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2429*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2430*e1eccf28SAndroid Build Coastguard Worker * k = 0 2431*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2432*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2433*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2434*e1eccf28SAndroid Build Coastguard Worker * 2435*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2436*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2437*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2438*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains packed matrix A, supported elements type: {Element#F32}. 2439*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2440*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2441*e1eccf28SAndroid Build Coastguard Worker */ 2442*e1eccf28SAndroid Build Coastguard Worker void STPSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2443*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Ap, const sp<Allocation>& X, int incX); 2444*e1eccf28SAndroid Build Coastguard Worker 2445*e1eccf28SAndroid Build Coastguard Worker /** 2446*e1eccf28SAndroid Build Coastguard Worker * DTPSV solves one of the systems of equations 2447*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b 2448*e1eccf28SAndroid Build Coastguard Worker * 2449*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d9/d84/dtpsv_8f.html 2450*e1eccf28SAndroid Build Coastguard Worker * 2451*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2452*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2453*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2454*e1eccf28SAndroid Build Coastguard Worker * k = 0 2455*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2456*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2457*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2458*e1eccf28SAndroid Build Coastguard Worker * 2459*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2460*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2461*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2462*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains packed matrix A, supported elements type: {Element#F64}. 2463*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2464*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2465*e1eccf28SAndroid Build Coastguard Worker */ 2466*e1eccf28SAndroid Build Coastguard Worker void DTPSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2467*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Ap, const sp<Allocation>& X, int incX); 2468*e1eccf28SAndroid Build Coastguard Worker 2469*e1eccf28SAndroid Build Coastguard Worker /** 2470*e1eccf28SAndroid Build Coastguard Worker * CTPSV solves one of the systems of equations 2471*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b or A**H*x = b 2472*e1eccf28SAndroid Build Coastguard Worker * 2473*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d8/d56/ctpsv_8f.html 2474*e1eccf28SAndroid Build Coastguard Worker * 2475*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2476*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2477*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2478*e1eccf28SAndroid Build Coastguard Worker * k = 0 2479*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2480*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2481*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2482*e1eccf28SAndroid Build Coastguard Worker * 2483*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2484*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2485*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2486*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains packed matrix A, supported elements type: {Element#F32_2}. 2487*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2488*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2489*e1eccf28SAndroid Build Coastguard Worker */ 2490*e1eccf28SAndroid Build Coastguard Worker void CTPSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2491*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Ap, const sp<Allocation>& X, int incX); 2492*e1eccf28SAndroid Build Coastguard Worker 2493*e1eccf28SAndroid Build Coastguard Worker /** 2494*e1eccf28SAndroid Build Coastguard Worker * ZTPSV solves one of the systems of equations 2495*e1eccf28SAndroid Build Coastguard Worker * A*x = b or A**T*x = b or A**H*x = b 2496*e1eccf28SAndroid Build Coastguard Worker * 2497*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/da/d57/ztpsv_8f.html 2498*e1eccf28SAndroid Build Coastguard Worker * 2499*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2500*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2501*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2502*e1eccf28SAndroid Build Coastguard Worker * k = 0 2503*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2504*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2505*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2506*e1eccf28SAndroid Build Coastguard Worker * 2507*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the matrix is an upper or lower triangular matrix. 2508*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 2509*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 2510*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains packed matrix A, supported elements type: {Element#F64_2}. 2511*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 2512*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2513*e1eccf28SAndroid Build Coastguard Worker */ 2514*e1eccf28SAndroid Build Coastguard Worker void ZTPSV(RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 2515*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Ap, const sp<Allocation>& X, int incX); 2516*e1eccf28SAndroid Build Coastguard Worker 2517*e1eccf28SAndroid Build Coastguard Worker /** 2518*e1eccf28SAndroid Build Coastguard Worker * SSYMV performs the matrix-vector operation 2519*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 2520*e1eccf28SAndroid Build Coastguard Worker * 2521*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d2/d94/ssymv_8f.html 2522*e1eccf28SAndroid Build Coastguard Worker * 2523*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 2524*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2525*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 2526*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2527*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2528*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 2529*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32}. 2530*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2531*e1eccf28SAndroid Build Coastguard Worker */ 2532*e1eccf28SAndroid Build Coastguard Worker void SSYMV(RsBlasUplo Uplo, float alpha, const sp<Allocation>& A, const sp<Allocation>& X, 2533*e1eccf28SAndroid Build Coastguard Worker int incX, float beta, const sp<Allocation>& Y, int incY); 2534*e1eccf28SAndroid Build Coastguard Worker 2535*e1eccf28SAndroid Build Coastguard Worker /** 2536*e1eccf28SAndroid Build Coastguard Worker * SSBMV performs the matrix-vector operation 2537*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 2538*e1eccf28SAndroid Build Coastguard Worker * 2539*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d3/da1/ssbmv_8f.html 2540*e1eccf28SAndroid Build Coastguard Worker * 2541*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2542*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2543*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2544*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2545*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2546*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2547*e1eccf28SAndroid Build Coastguard Worker * 2548*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of the band matrix A is being supplied. 2549*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2550*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2551*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 2552*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2553*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2554*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 2555*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32}. 2556*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2557*e1eccf28SAndroid Build Coastguard Worker */ 2558*e1eccf28SAndroid Build Coastguard Worker void SSBMV(RsBlasUplo Uplo, int K, float alpha, const sp<Allocation>& A, const sp<Allocation>& X, 2559*e1eccf28SAndroid Build Coastguard Worker int incX, float beta, const sp<Allocation>& Y, int incY); 2560*e1eccf28SAndroid Build Coastguard Worker 2561*e1eccf28SAndroid Build Coastguard Worker /** 2562*e1eccf28SAndroid Build Coastguard Worker * SSPMV performs the matrix-vector operation 2563*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 2564*e1eccf28SAndroid Build Coastguard Worker * 2565*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d8/d68/sspmv_8f.html 2566*e1eccf28SAndroid Build Coastguard Worker * 2567*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2568*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2569*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2570*e1eccf28SAndroid Build Coastguard Worker * k = 0 2571*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2572*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2573*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2574*e1eccf28SAndroid Build Coastguard Worker * 2575*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of the matrix A is supplied in packed form. 2576*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2577*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F32}. 2578*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2579*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2580*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 2581*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32}. 2582*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2583*e1eccf28SAndroid Build Coastguard Worker */ 2584*e1eccf28SAndroid Build Coastguard Worker void SSPMV(RsBlasUplo Uplo, float alpha, const sp<Allocation>& Ap, const sp<Allocation>& X, 2585*e1eccf28SAndroid Build Coastguard Worker int incX, float beta, const sp<Allocation>& Y, int incY); 2586*e1eccf28SAndroid Build Coastguard Worker 2587*e1eccf28SAndroid Build Coastguard Worker /** 2588*e1eccf28SAndroid Build Coastguard Worker * SGER performs the rank 1 operation 2589*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**T + A 2590*e1eccf28SAndroid Build Coastguard Worker * 2591*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/d5c/sger_8f.html 2592*e1eccf28SAndroid Build Coastguard Worker * 2593*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2594*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2595*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2596*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32}. 2597*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2598*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 2599*e1eccf28SAndroid Build Coastguard Worker */ 2600*e1eccf28SAndroid Build Coastguard Worker void SGER(float alpha, const sp<Allocation>& X, int incX, const sp<Allocation>& Y, int incY, const sp<Allocation>& A); 2601*e1eccf28SAndroid Build Coastguard Worker 2602*e1eccf28SAndroid Build Coastguard Worker /** 2603*e1eccf28SAndroid Build Coastguard Worker * SSYR performs the rank 1 operation 2604*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*x**T + A 2605*e1eccf28SAndroid Build Coastguard Worker * 2606*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d6/dac/ssyr_8f.html 2607*e1eccf28SAndroid Build Coastguard Worker * 2608*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 2609*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2610*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2611*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2612*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 2613*e1eccf28SAndroid Build Coastguard Worker */ 2614*e1eccf28SAndroid Build Coastguard Worker void SSYR(RsBlasUplo Uplo, float alpha, const sp<Allocation>& X, int incX, const sp<Allocation>& A); 2615*e1eccf28SAndroid Build Coastguard Worker 2616*e1eccf28SAndroid Build Coastguard Worker /** 2617*e1eccf28SAndroid Build Coastguard Worker * SSPR performs the rank 1 operation 2618*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*x**T + A 2619*e1eccf28SAndroid Build Coastguard Worker * 2620*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d2/d9b/sspr_8f.html 2621*e1eccf28SAndroid Build Coastguard Worker * 2622*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2623*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2624*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2625*e1eccf28SAndroid Build Coastguard Worker * k = 0 2626*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2627*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2628*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2629*e1eccf28SAndroid Build Coastguard Worker * 2630*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form. 2631*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2632*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2633*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2634*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F32}. 2635*e1eccf28SAndroid Build Coastguard Worker */ 2636*e1eccf28SAndroid Build Coastguard Worker void SSPR(RsBlasUplo Uplo, float alpha, const sp<Allocation>& X, int incX, const sp<Allocation>& Ap); 2637*e1eccf28SAndroid Build Coastguard Worker 2638*e1eccf28SAndroid Build Coastguard Worker /** 2639*e1eccf28SAndroid Build Coastguard Worker * SSYR2 performs the symmetric rank 2 operation 2640*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**T + alpha*y*x**T + A 2641*e1eccf28SAndroid Build Coastguard Worker * 2642*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/d99/ssyr2_8f.html 2643*e1eccf28SAndroid Build Coastguard Worker * 2644*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 2645*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2646*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2647*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2648*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32}. 2649*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2650*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 2651*e1eccf28SAndroid Build Coastguard Worker */ 2652*e1eccf28SAndroid Build Coastguard Worker void SSYR2(RsBlasUplo Uplo, float alpha, const sp<Allocation>& X, int incX, 2653*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& A); 2654*e1eccf28SAndroid Build Coastguard Worker 2655*e1eccf28SAndroid Build Coastguard Worker /** 2656*e1eccf28SAndroid Build Coastguard Worker * SSPR2 performs the symmetric rank 2 operation 2657*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**T + alpha*y*x**T + A 2658*e1eccf28SAndroid Build Coastguard Worker * 2659*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/d3e/sspr2_8f.html 2660*e1eccf28SAndroid Build Coastguard Worker * 2661*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2662*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2663*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2664*e1eccf28SAndroid Build Coastguard Worker * k = 0 2665*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2666*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2667*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2668*e1eccf28SAndroid Build Coastguard Worker * 2669*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form. 2670*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2671*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32}. 2672*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2673*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32}. 2674*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2675*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F32}. 2676*e1eccf28SAndroid Build Coastguard Worker */ 2677*e1eccf28SAndroid Build Coastguard Worker void SSPR2(RsBlasUplo Uplo, float alpha, const sp<Allocation>& X, int incX, 2678*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& Ap); 2679*e1eccf28SAndroid Build Coastguard Worker 2680*e1eccf28SAndroid Build Coastguard Worker /** 2681*e1eccf28SAndroid Build Coastguard Worker * DSYMV performs the matrix-vector operation 2682*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 2683*e1eccf28SAndroid Build Coastguard Worker * 2684*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d8/dbe/dsymv_8f.html 2685*e1eccf28SAndroid Build Coastguard Worker * 2686*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 2687*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2688*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 2689*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2690*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2691*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 2692*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64}. 2693*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2694*e1eccf28SAndroid Build Coastguard Worker */ 2695*e1eccf28SAndroid Build Coastguard Worker void DSYMV(RsBlasUplo Uplo, double alpha, const sp<Allocation>& A, const sp<Allocation>& X, int incX, 2696*e1eccf28SAndroid Build Coastguard Worker double beta, const sp<Allocation>& Y, int incY); 2697*e1eccf28SAndroid Build Coastguard Worker 2698*e1eccf28SAndroid Build Coastguard Worker /** 2699*e1eccf28SAndroid Build Coastguard Worker * DSBMV performs the matrix-vector operation 2700*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 2701*e1eccf28SAndroid Build Coastguard Worker * 2702*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d8/d1e/dsbmv_8f.html 2703*e1eccf28SAndroid Build Coastguard Worker * 2704*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2705*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2706*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2707*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2708*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2709*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2710*e1eccf28SAndroid Build Coastguard Worker * 2711*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of the band matrix A is being supplied. 2712*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2713*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2714*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 2715*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2716*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2717*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 2718*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64}. 2719*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2720*e1eccf28SAndroid Build Coastguard Worker */ 2721*e1eccf28SAndroid Build Coastguard Worker void DSBMV(RsBlasUplo Uplo, int K, double alpha, const sp<Allocation>& A, const sp<Allocation>& X, int incX, 2722*e1eccf28SAndroid Build Coastguard Worker double beta, const sp<Allocation>& Y, int incY); 2723*e1eccf28SAndroid Build Coastguard Worker 2724*e1eccf28SAndroid Build Coastguard Worker /** 2725*e1eccf28SAndroid Build Coastguard Worker * DSPMV performs the matrix-vector operation 2726*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 2727*e1eccf28SAndroid Build Coastguard Worker * 2728*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d4/d85/dspmv_8f.html 2729*e1eccf28SAndroid Build Coastguard Worker * 2730*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2731*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2732*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2733*e1eccf28SAndroid Build Coastguard Worker * k = 0 2734*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2735*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2736*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2737*e1eccf28SAndroid Build Coastguard Worker * 2738*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of the matrix A is supplied in packed form. 2739*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2740*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F64}. 2741*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2742*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2743*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 2744*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64}. 2745*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2746*e1eccf28SAndroid Build Coastguard Worker */ 2747*e1eccf28SAndroid Build Coastguard Worker void DSPMV(RsBlasUplo Uplo, double alpha, const sp<Allocation>& Ap, const sp<Allocation>& X, int incX, 2748*e1eccf28SAndroid Build Coastguard Worker double beta, const sp<Allocation>& Y, int incY); 2749*e1eccf28SAndroid Build Coastguard Worker 2750*e1eccf28SAndroid Build Coastguard Worker /** 2751*e1eccf28SAndroid Build Coastguard Worker * DGER performs the rank 1 operation 2752*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**T + A 2753*e1eccf28SAndroid Build Coastguard Worker * 2754*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/dc/da8/dger_8f.html 2755*e1eccf28SAndroid Build Coastguard Worker * 2756*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2757*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2758*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2759*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64}. 2760*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2761*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 2762*e1eccf28SAndroid Build Coastguard Worker */ 2763*e1eccf28SAndroid Build Coastguard Worker void DGER(double alpha, const sp<Allocation>& X, int incX, const sp<Allocation>& Y, int incY, const sp<Allocation>& A); 2764*e1eccf28SAndroid Build Coastguard Worker 2765*e1eccf28SAndroid Build Coastguard Worker /** 2766*e1eccf28SAndroid Build Coastguard Worker * DSYR performs the rank 1 operation 2767*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*x**T + A 2768*e1eccf28SAndroid Build Coastguard Worker * 2769*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d3/d60/dsyr_8f.html 2770*e1eccf28SAndroid Build Coastguard Worker * 2771*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 2772*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2773*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2774*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2775*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 2776*e1eccf28SAndroid Build Coastguard Worker */ 2777*e1eccf28SAndroid Build Coastguard Worker void DSYR(RsBlasUplo Uplo, double alpha, const sp<Allocation>& X, int incX, const sp<Allocation>& A); 2778*e1eccf28SAndroid Build Coastguard Worker 2779*e1eccf28SAndroid Build Coastguard Worker /** 2780*e1eccf28SAndroid Build Coastguard Worker * DSPR performs the rank 1 operation 2781*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*x**T + A 2782*e1eccf28SAndroid Build Coastguard Worker * 2783*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/dd/dba/dspr_8f.html 2784*e1eccf28SAndroid Build Coastguard Worker * 2785*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2786*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2787*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2788*e1eccf28SAndroid Build Coastguard Worker * k = 0 2789*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2790*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2791*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2792*e1eccf28SAndroid Build Coastguard Worker * 2793*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form. 2794*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2795*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2796*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2797*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F64}. 2798*e1eccf28SAndroid Build Coastguard Worker */ 2799*e1eccf28SAndroid Build Coastguard Worker void DSPR(RsBlasUplo Uplo, double alpha, const sp<Allocation>& X, int incX, const sp<Allocation>& Ap); 2800*e1eccf28SAndroid Build Coastguard Worker 2801*e1eccf28SAndroid Build Coastguard Worker /** 2802*e1eccf28SAndroid Build Coastguard Worker * DSYR2 performs the symmetric rank 2 operation 2803*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**T + alpha*y*x**T + A 2804*e1eccf28SAndroid Build Coastguard Worker * 2805*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/de/d41/dsyr2_8f.html 2806*e1eccf28SAndroid Build Coastguard Worker * 2807*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 2808*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2809*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2810*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2811*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64}. 2812*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2813*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 2814*e1eccf28SAndroid Build Coastguard Worker */ 2815*e1eccf28SAndroid Build Coastguard Worker void DSYR2(RsBlasUplo Uplo, double alpha, const sp<Allocation>& X, int incX, 2816*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& A); 2817*e1eccf28SAndroid Build Coastguard Worker 2818*e1eccf28SAndroid Build Coastguard Worker /** 2819*e1eccf28SAndroid Build Coastguard Worker * DSPR2 performs the symmetric rank 2 operation 2820*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**T + alpha*y*x**T + A 2821*e1eccf28SAndroid Build Coastguard Worker * 2822*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/dd/d9e/dspr2_8f.html 2823*e1eccf28SAndroid Build Coastguard Worker * 2824*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2825*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2826*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2827*e1eccf28SAndroid Build Coastguard Worker * k = 0 2828*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2829*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2830*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2831*e1eccf28SAndroid Build Coastguard Worker * 2832*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form. 2833*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2834*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64}. 2835*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2836*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64}. 2837*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2838*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F64}. 2839*e1eccf28SAndroid Build Coastguard Worker */ 2840*e1eccf28SAndroid Build Coastguard Worker void DSPR2(RsBlasUplo Uplo, double alpha, const sp<Allocation>& X, int incX, 2841*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& Ap); 2842*e1eccf28SAndroid Build Coastguard Worker 2843*e1eccf28SAndroid Build Coastguard Worker /** 2844*e1eccf28SAndroid Build Coastguard Worker * CHEMV performs the matrix-vector operation 2845*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 2846*e1eccf28SAndroid Build Coastguard Worker * 2847*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d7/d51/chemv_8f.html 2848*e1eccf28SAndroid Build Coastguard Worker * 2849*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 2850*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2851*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2852*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2853*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2854*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 2855*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32_2}. 2856*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2857*e1eccf28SAndroid Build Coastguard Worker */ 2858*e1eccf28SAndroid Build Coastguard Worker void CHEMV(RsBlasUplo Uplo, Float2 alpha, const sp<Allocation>& A, const sp<Allocation>& X, 2859*e1eccf28SAndroid Build Coastguard Worker int incX, Float2 beta, const sp<Allocation>& Y, int incY); 2860*e1eccf28SAndroid Build Coastguard Worker 2861*e1eccf28SAndroid Build Coastguard Worker /** 2862*e1eccf28SAndroid Build Coastguard Worker * CHBMV performs the matrix-vector operation 2863*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 2864*e1eccf28SAndroid Build Coastguard Worker * 2865*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/dc2/chbmv_8f.html 2866*e1eccf28SAndroid Build Coastguard Worker * 2867*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 2868*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 2869*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 2870*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2871*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 2872*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 2873*e1eccf28SAndroid Build Coastguard Worker * 2874*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of the band matrix A is being supplied. 2875*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 2876*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2877*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2878*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2879*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2880*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 2881*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32_2}. 2882*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2883*e1eccf28SAndroid Build Coastguard Worker */ 2884*e1eccf28SAndroid Build Coastguard Worker void CHBMV(RsBlasUplo Uplo, int K, Float2 alpha, const sp<Allocation>& A, const sp<Allocation>& X, 2885*e1eccf28SAndroid Build Coastguard Worker int incX, Float2 beta, const sp<Allocation>& Y, int incY); 2886*e1eccf28SAndroid Build Coastguard Worker 2887*e1eccf28SAndroid Build Coastguard Worker /** 2888*e1eccf28SAndroid Build Coastguard Worker * CHPMV performs the matrix-vector operation 2889*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 2890*e1eccf28SAndroid Build Coastguard Worker * 2891*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d2/d06/chpmv_8f.html 2892*e1eccf28SAndroid Build Coastguard Worker * 2893*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2894*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2895*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2896*e1eccf28SAndroid Build Coastguard Worker * k = 0 2897*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2898*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2899*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2900*e1eccf28SAndroid Build Coastguard Worker * 2901*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of the matrix A is supplied in packed form. 2902*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2903*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2904*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2905*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2906*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 2907*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32_2}. 2908*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2909*e1eccf28SAndroid Build Coastguard Worker */ 2910*e1eccf28SAndroid Build Coastguard Worker void CHPMV(RsBlasUplo Uplo, Float2 alpha, const sp<Allocation>& Ap, const sp<Allocation>& X, 2911*e1eccf28SAndroid Build Coastguard Worker int incX, Float2 beta, const sp<Allocation>& Y, int incY); 2912*e1eccf28SAndroid Build Coastguard Worker 2913*e1eccf28SAndroid Build Coastguard Worker /** 2914*e1eccf28SAndroid Build Coastguard Worker * CGERU performs the rank 1 operation 2915*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**T + A 2916*e1eccf28SAndroid Build Coastguard Worker * 2917*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/d5f/cgeru_8f.html 2918*e1eccf28SAndroid Build Coastguard Worker * 2919*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2920*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2921*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2922*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32_2}. 2923*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2924*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2925*e1eccf28SAndroid Build Coastguard Worker */ 2926*e1eccf28SAndroid Build Coastguard Worker void CGERU(Float2 alpha, const sp<Allocation>& X, int incX, 2927*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& A); 2928*e1eccf28SAndroid Build Coastguard Worker 2929*e1eccf28SAndroid Build Coastguard Worker /** 2930*e1eccf28SAndroid Build Coastguard Worker * CGERC performs the rank 1 operation 2931*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**H + A 2932*e1eccf28SAndroid Build Coastguard Worker * 2933*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/dd/d84/cgerc_8f.html 2934*e1eccf28SAndroid Build Coastguard Worker * 2935*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2936*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2937*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2938*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32_2}. 2939*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2940*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2941*e1eccf28SAndroid Build Coastguard Worker */ 2942*e1eccf28SAndroid Build Coastguard Worker void CGERC(Float2 alpha, const sp<Allocation>& X, int incX, 2943*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& A); 2944*e1eccf28SAndroid Build Coastguard Worker 2945*e1eccf28SAndroid Build Coastguard Worker /** 2946*e1eccf28SAndroid Build Coastguard Worker * CHER performs the rank 1 operation 2947*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*x**H + A 2948*e1eccf28SAndroid Build Coastguard Worker * 2949*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d3/d6d/cher_8f.html 2950*e1eccf28SAndroid Build Coastguard Worker * 2951*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 2952*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2953*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2954*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2955*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2956*e1eccf28SAndroid Build Coastguard Worker */ 2957*e1eccf28SAndroid Build Coastguard Worker void CHER(RsBlasUplo Uplo, float alpha, const sp<Allocation>& X, int incX, const sp<Allocation>& A); 2958*e1eccf28SAndroid Build Coastguard Worker 2959*e1eccf28SAndroid Build Coastguard Worker /** 2960*e1eccf28SAndroid Build Coastguard Worker * CHPR performs the rank 1 operation 2961*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*x**H + A 2962*e1eccf28SAndroid Build Coastguard Worker * 2963*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/dcd/chpr_8f.html 2964*e1eccf28SAndroid Build Coastguard Worker * 2965*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 2966*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 2967*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 2968*e1eccf28SAndroid Build Coastguard Worker * k = 0 2969*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 2970*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 2971*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 2972*e1eccf28SAndroid Build Coastguard Worker * 2973*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form. 2974*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2975*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2976*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2977*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2978*e1eccf28SAndroid Build Coastguard Worker */ 2979*e1eccf28SAndroid Build Coastguard Worker void CHPR(RsBlasUplo Uplo, float alpha, const sp<Allocation>& X, int incX, const sp<Allocation>& Ap); 2980*e1eccf28SAndroid Build Coastguard Worker 2981*e1eccf28SAndroid Build Coastguard Worker /** 2982*e1eccf28SAndroid Build Coastguard Worker * CHER2 performs the symmetric rank 2 operation 2983*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**H + alpha*y*x**H + A 2984*e1eccf28SAndroid Build Coastguard Worker * 2985*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/d87/cher2_8f.html 2986*e1eccf28SAndroid Build Coastguard Worker * 2987*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 2988*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 2989*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 2990*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 2991*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32_2}. 2992*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 2993*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 2994*e1eccf28SAndroid Build Coastguard Worker */ 2995*e1eccf28SAndroid Build Coastguard Worker void CHER2(RsBlasUplo Uplo, Float2 alpha, const sp<Allocation>& X, int incX, 2996*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& A); 2997*e1eccf28SAndroid Build Coastguard Worker 2998*e1eccf28SAndroid Build Coastguard Worker /** 2999*e1eccf28SAndroid Build Coastguard Worker * CHPR2 performs the symmetric rank 2 operation 3000*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**H + alpha*y*x**H + A 3001*e1eccf28SAndroid Build Coastguard Worker * 3002*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d6/d44/chpr2_8f.html 3003*e1eccf28SAndroid Build Coastguard Worker * 3004*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 3005*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 3006*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 3007*e1eccf28SAndroid Build Coastguard Worker * k = 0 3008*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 3009*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 3010*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 3011*e1eccf28SAndroid Build Coastguard Worker * 3012*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form. 3013*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3014*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F32_2}. 3015*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 3016*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F32_2}. 3017*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 3018*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F32_2}. 3019*e1eccf28SAndroid Build Coastguard Worker */ 3020*e1eccf28SAndroid Build Coastguard Worker void CHPR2(RsBlasUplo Uplo, Float2 alpha, const sp<Allocation>& X, int incX, 3021*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& Ap); 3022*e1eccf28SAndroid Build Coastguard Worker 3023*e1eccf28SAndroid Build Coastguard Worker /** 3024*e1eccf28SAndroid Build Coastguard Worker * ZHEMV performs the matrix-vector operation 3025*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 3026*e1eccf28SAndroid Build Coastguard Worker * 3027*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d0/ddd/zhemv_8f.html 3028*e1eccf28SAndroid Build Coastguard Worker * 3029*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 3030*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3031*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3032*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 3033*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 3034*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3035*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64_2}. 3036*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 3037*e1eccf28SAndroid Build Coastguard Worker */ 3038*e1eccf28SAndroid Build Coastguard Worker void ZHEMV(RsBlasUplo Uplo, Double2 alpha, const sp<Allocation>& A, const sp<Allocation>& X, 3039*e1eccf28SAndroid Build Coastguard Worker int incX, Double2 beta, const sp<Allocation>& Y, int incY); 3040*e1eccf28SAndroid Build Coastguard Worker 3041*e1eccf28SAndroid Build Coastguard Worker /** 3042*e1eccf28SAndroid Build Coastguard Worker * ZHBMV performs the matrix-vector operation 3043*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 3044*e1eccf28SAndroid Build Coastguard Worker * 3045*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d3/d1a/zhbmv_8f.html 3046*e1eccf28SAndroid Build Coastguard Worker * 3047*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should also be of size N*N (dimY = N, dimX = N), 3048*e1eccf28SAndroid Build Coastguard Worker * but only the region N*(K+1) will be referenced. The following subroutine can is an 3049*e1eccf28SAndroid Build Coastguard Worker * example showing how to convert a UPPER trianglar matrix 'a' to row-based band matrix 'b'. 3050*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 3051*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, min(i+k+1, n)): 3052*e1eccf28SAndroid Build Coastguard Worker * b[i, j-i] = a[i, j] 3053*e1eccf28SAndroid Build Coastguard Worker * 3054*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of the band matrix A is being supplied. 3055*e1eccf28SAndroid Build Coastguard Worker * @param K The number of off-diagonals of the matrix A 3056*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3057*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3058*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 3059*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 3060*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3061*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64_2}. 3062*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 3063*e1eccf28SAndroid Build Coastguard Worker */ 3064*e1eccf28SAndroid Build Coastguard Worker void ZHBMV(RsBlasUplo Uplo, int K, Double2 alpha, const sp<Allocation>& A, const sp<Allocation>& X, 3065*e1eccf28SAndroid Build Coastguard Worker int incX, Double2 beta, const sp<Allocation>& Y, int incY); 3066*e1eccf28SAndroid Build Coastguard Worker 3067*e1eccf28SAndroid Build Coastguard Worker /** 3068*e1eccf28SAndroid Build Coastguard Worker * ZHPMV performs the matrix-vector operation 3069*e1eccf28SAndroid Build Coastguard Worker * y := alpha*A*x + beta*y 3070*e1eccf28SAndroid Build Coastguard Worker * 3071*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d0/d60/zhpmv_8f.html 3072*e1eccf28SAndroid Build Coastguard Worker * 3073*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 3074*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 3075*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 3076*e1eccf28SAndroid Build Coastguard Worker * k = 0 3077*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 3078*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 3079*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 3080*e1eccf28SAndroid Build Coastguard Worker * 3081*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of the matrix A is supplied in packed form. 3082*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3083*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3084*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 3085*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 3086*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3087*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64_2}. 3088*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 3089*e1eccf28SAndroid Build Coastguard Worker */ 3090*e1eccf28SAndroid Build Coastguard Worker void ZHPMV(RsBlasUplo Uplo, Double2 alpha, const sp<Allocation>& Ap, const sp<Allocation>& X, 3091*e1eccf28SAndroid Build Coastguard Worker int incX, Double2 beta, const sp<Allocation>& Y, int incY); 3092*e1eccf28SAndroid Build Coastguard Worker 3093*e1eccf28SAndroid Build Coastguard Worker /** 3094*e1eccf28SAndroid Build Coastguard Worker * ZGERU performs the rank 1 operation 3095*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**T + A 3096*e1eccf28SAndroid Build Coastguard Worker * 3097*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d7/d12/zgeru_8f.html 3098*e1eccf28SAndroid Build Coastguard Worker * 3099*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3100*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 3101*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 3102*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64_2}. 3103*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 3104*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3105*e1eccf28SAndroid Build Coastguard Worker */ 3106*e1eccf28SAndroid Build Coastguard Worker void ZGERU(Double2 alpha, const sp<Allocation>& X, int incX, 3107*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& A); 3108*e1eccf28SAndroid Build Coastguard Worker 3109*e1eccf28SAndroid Build Coastguard Worker /** 3110*e1eccf28SAndroid Build Coastguard Worker * ZGERC performs the rank 1 operation 3111*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**H + A 3112*e1eccf28SAndroid Build Coastguard Worker * 3113*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d3/dad/zgerc_8f.html 3114*e1eccf28SAndroid Build Coastguard Worker * 3115*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3116*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 3117*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 3118*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64_2}. 3119*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 3120*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3121*e1eccf28SAndroid Build Coastguard Worker */ 3122*e1eccf28SAndroid Build Coastguard Worker void ZGERC(Double2 alpha, const sp<Allocation>& X, int incX, 3123*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& A); 3124*e1eccf28SAndroid Build Coastguard Worker 3125*e1eccf28SAndroid Build Coastguard Worker /** 3126*e1eccf28SAndroid Build Coastguard Worker * ZHER performs the rank 1 operation 3127*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*x**H + A 3128*e1eccf28SAndroid Build Coastguard Worker * 3129*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/de/d0e/zher_8f.html 3130*e1eccf28SAndroid Build Coastguard Worker * 3131*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 3132*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3133*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 3134*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 3135*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3136*e1eccf28SAndroid Build Coastguard Worker */ 3137*e1eccf28SAndroid Build Coastguard Worker void ZHER(RsBlasUplo Uplo, double alpha, const sp<Allocation>& X, int incX, const sp<Allocation>& A); 3138*e1eccf28SAndroid Build Coastguard Worker 3139*e1eccf28SAndroid Build Coastguard Worker /** 3140*e1eccf28SAndroid Build Coastguard Worker * ZHPR performs the rank 1 operation 3141*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*x**H + A 3142*e1eccf28SAndroid Build Coastguard Worker * 3143*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/de/de1/zhpr_8f.html 3144*e1eccf28SAndroid Build Coastguard Worker * 3145*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 3146*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 3147*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 3148*e1eccf28SAndroid Build Coastguard Worker * k = 0 3149*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 3150*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 3151*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 3152*e1eccf28SAndroid Build Coastguard Worker * 3153*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form. 3154*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3155*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 3156*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 3157*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3158*e1eccf28SAndroid Build Coastguard Worker */ 3159*e1eccf28SAndroid Build Coastguard Worker void ZHPR(RsBlasUplo Uplo, double alpha, const sp<Allocation>& X, int incX, const sp<Allocation>& Ap); 3160*e1eccf28SAndroid Build Coastguard Worker 3161*e1eccf28SAndroid Build Coastguard Worker /** 3162*e1eccf28SAndroid Build Coastguard Worker * ZHER2 performs the symmetric rank 2 operation 3163*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**H + alpha*y*x**H + A 3164*e1eccf28SAndroid Build Coastguard Worker * 3165*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/da/d8a/zher2_8f.html 3166*e1eccf28SAndroid Build Coastguard Worker * 3167*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 3168*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3169*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 3170*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 3171*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64_2}. 3172*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 3173*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3174*e1eccf28SAndroid Build Coastguard Worker */ 3175*e1eccf28SAndroid Build Coastguard Worker void ZHER2(RsBlasUplo Uplo, Double2 alpha, const sp<Allocation>& X, int incX, 3176*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& A); 3177*e1eccf28SAndroid Build Coastguard Worker 3178*e1eccf28SAndroid Build Coastguard Worker /** 3179*e1eccf28SAndroid Build Coastguard Worker * ZHPR2 performs the symmetric rank 2 operation 3180*e1eccf28SAndroid Build Coastguard Worker * A := alpha*x*y**H + alpha*y*x**H + A 3181*e1eccf28SAndroid Build Coastguard Worker * 3182*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d5/d52/zhpr2_8f.html 3183*e1eccf28SAndroid Build Coastguard Worker * 3184*e1eccf28SAndroid Build Coastguard Worker * Note: For a N*N matrix, the input Allocation should be a 1D allocation of size dimX = N*(N+1)/2, 3185*e1eccf28SAndroid Build Coastguard Worker * The following subroutine can is an example showing how to convert a UPPER trianglar matrix 3186*e1eccf28SAndroid Build Coastguard Worker * 'a' to packed matrix 'b'. 3187*e1eccf28SAndroid Build Coastguard Worker * k = 0 3188*e1eccf28SAndroid Build Coastguard Worker * for i in range(0, n): 3189*e1eccf28SAndroid Build Coastguard Worker * for j in range(i, n): 3190*e1eccf28SAndroid Build Coastguard Worker * b[k++] = a[i, j] 3191*e1eccf28SAndroid Build Coastguard Worker * 3192*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be supplied in the packed form. 3193*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3194*e1eccf28SAndroid Build Coastguard Worker * @param X The input allocation contains vector x, supported elements type: {Element#F64_2}. 3195*e1eccf28SAndroid Build Coastguard Worker * @param incX The increment for the elements of vector x, must be larger than zero. 3196*e1eccf28SAndroid Build Coastguard Worker * @param Y The input allocation contains vector y, supported elements type: {Element#F64_2}. 3197*e1eccf28SAndroid Build Coastguard Worker * @param incY The increment for the elements of vector y, must be larger than zero. 3198*e1eccf28SAndroid Build Coastguard Worker * @param Ap The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3199*e1eccf28SAndroid Build Coastguard Worker */ 3200*e1eccf28SAndroid Build Coastguard Worker void ZHPR2(RsBlasUplo Uplo, Double2 alpha, const sp<Allocation>& X, int incX, 3201*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& Y, int incY, const sp<Allocation>& Ap); 3202*e1eccf28SAndroid Build Coastguard Worker 3203*e1eccf28SAndroid Build Coastguard Worker /** 3204*e1eccf28SAndroid Build Coastguard Worker * SGEMM performs one of the matrix-matrix operations 3205*e1eccf28SAndroid Build Coastguard Worker * C := alpha*op(A)*op(B) + beta*C where op(X) is one of op(X) = X or op(X) = X**T 3206*e1eccf28SAndroid Build Coastguard Worker * 3207*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d4/de2/sgemm_8f.html 3208*e1eccf28SAndroid Build Coastguard Worker * 3209*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3210*e1eccf28SAndroid Build Coastguard Worker * @param TransB The type of transpose applied to matrix B. 3211*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3212*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 3213*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32}. 3214*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3215*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32}. 3216*e1eccf28SAndroid Build Coastguard Worker */ 3217*e1eccf28SAndroid Build Coastguard Worker void SGEMM(RsBlasTranspose TransA, RsBlasTranspose TransB, float alpha, const sp<Allocation>& A, 3218*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, float beta, const sp<Allocation>& C); 3219*e1eccf28SAndroid Build Coastguard Worker 3220*e1eccf28SAndroid Build Coastguard Worker 3221*e1eccf28SAndroid Build Coastguard Worker /** 3222*e1eccf28SAndroid Build Coastguard Worker * DGEMM performs one of the matrix-matrix operations 3223*e1eccf28SAndroid Build Coastguard Worker * C := alpha*op(A)*op(B) + beta*C where op(X) is one of op(X) = X or op(X) = X**T 3224*e1eccf28SAndroid Build Coastguard Worker * 3225*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d7/d2b/dgemm_8f.html 3226*e1eccf28SAndroid Build Coastguard Worker * 3227*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3228*e1eccf28SAndroid Build Coastguard Worker * @param TransB The type of transpose applied to matrix B. 3229*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3230*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 3231*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64}. 3232*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3233*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64}. 3234*e1eccf28SAndroid Build Coastguard Worker */ 3235*e1eccf28SAndroid Build Coastguard Worker void DGEMM(RsBlasTranspose TransA, RsBlasTranspose TransB, double alpha, const sp<Allocation>& A, 3236*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, double beta, const sp<Allocation>& C); 3237*e1eccf28SAndroid Build Coastguard Worker 3238*e1eccf28SAndroid Build Coastguard Worker /** 3239*e1eccf28SAndroid Build Coastguard Worker * CGEMM performs one of the matrix-matrix operations 3240*e1eccf28SAndroid Build Coastguard Worker * C := alpha*op(A)*op(B) + beta*C where op(X) is one of op(X) = X or op(X) = X**T or op(X) = X**H 3241*e1eccf28SAndroid Build Coastguard Worker * 3242*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d6/d5b/cgemm_8f.html 3243*e1eccf28SAndroid Build Coastguard Worker * 3244*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3245*e1eccf28SAndroid Build Coastguard Worker * @param TransB The type of transpose applied to matrix B. 3246*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3247*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 3248*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32_2}. 3249*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3250*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32_2}. 3251*e1eccf28SAndroid Build Coastguard Worker */ 3252*e1eccf28SAndroid Build Coastguard Worker void CGEMM(RsBlasTranspose TransA, RsBlasTranspose TransB, Float2 alpha, const sp<Allocation>& A, 3253*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, Float2 beta, const sp<Allocation>& C); 3254*e1eccf28SAndroid Build Coastguard Worker 3255*e1eccf28SAndroid Build Coastguard Worker /** 3256*e1eccf28SAndroid Build Coastguard Worker * ZGEMM performs one of the matrix-matrix operations 3257*e1eccf28SAndroid Build Coastguard Worker * C := alpha*op(A)*op(B) + beta*C where op(X) is one of op(X) = X or op(X) = X**T or op(X) = X**H 3258*e1eccf28SAndroid Build Coastguard Worker * 3259*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d7/d76/zgemm_8f.html 3260*e1eccf28SAndroid Build Coastguard Worker * 3261*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3262*e1eccf28SAndroid Build Coastguard Worker * @param TransB The type of transpose applied to matrix B. 3263*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3264*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3265*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64_2}. 3266*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3267*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64_2}. 3268*e1eccf28SAndroid Build Coastguard Worker */ 3269*e1eccf28SAndroid Build Coastguard Worker void ZGEMM(RsBlasTranspose TransA, RsBlasTranspose TransB, Double2 alpha, const sp<Allocation>& A, 3270*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, Double2 beta, const sp<Allocation>& C); 3271*e1eccf28SAndroid Build Coastguard Worker 3272*e1eccf28SAndroid Build Coastguard Worker /** 3273*e1eccf28SAndroid Build Coastguard Worker * SSYMM performs one of the matrix-matrix operations 3274*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C 3275*e1eccf28SAndroid Build Coastguard Worker * 3276*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d7/d42/ssymm_8f.html 3277*e1eccf28SAndroid Build Coastguard Worker * 3278*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3279*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 3280*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3281*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 3282*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32}. 3283*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3284*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32}. 3285*e1eccf28SAndroid Build Coastguard Worker */ 3286*e1eccf28SAndroid Build Coastguard Worker void SSYMM(RsBlasSide Side, RsBlasUplo Uplo, float alpha, const sp<Allocation>& A, 3287*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, float beta, const sp<Allocation>& C); 3288*e1eccf28SAndroid Build Coastguard Worker 3289*e1eccf28SAndroid Build Coastguard Worker /** 3290*e1eccf28SAndroid Build Coastguard Worker * DSYMM performs one of the matrix-matrix operations 3291*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C 3292*e1eccf28SAndroid Build Coastguard Worker * 3293*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d8/db0/dsymm_8f.html 3294*e1eccf28SAndroid Build Coastguard Worker * 3295*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3296*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 3297*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3298*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 3299*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64}. 3300*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3301*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64}. 3302*e1eccf28SAndroid Build Coastguard Worker */ 3303*e1eccf28SAndroid Build Coastguard Worker void DSYMM(RsBlasSide Side, RsBlasUplo Uplo, double alpha, const sp<Allocation>& A, 3304*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, double beta, const sp<Allocation>& C); 3305*e1eccf28SAndroid Build Coastguard Worker 3306*e1eccf28SAndroid Build Coastguard Worker /** 3307*e1eccf28SAndroid Build Coastguard Worker * CSYMM performs one of the matrix-matrix operations 3308*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C 3309*e1eccf28SAndroid Build Coastguard Worker * 3310*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/db/d59/csymm_8f.html 3311*e1eccf28SAndroid Build Coastguard Worker * 3312*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3313*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 3314*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3315*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 3316*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32_2}. 3317*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3318*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32_2}. 3319*e1eccf28SAndroid Build Coastguard Worker */ 3320*e1eccf28SAndroid Build Coastguard Worker void CSYMM(RsBlasSide Side, RsBlasUplo Uplo, Float2 alpha, const sp<Allocation>& A, 3321*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, Float2 beta, const sp<Allocation>& C); 3322*e1eccf28SAndroid Build Coastguard Worker 3323*e1eccf28SAndroid Build Coastguard Worker /** 3324*e1eccf28SAndroid Build Coastguard Worker * ZSYMM performs one of the matrix-matrix operations 3325*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C 3326*e1eccf28SAndroid Build Coastguard Worker * 3327*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/df/d51/zsymm_8f.html 3328*e1eccf28SAndroid Build Coastguard Worker * 3329*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3330*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 3331*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3332*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3333*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64_2}. 3334*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3335*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64_2}. 3336*e1eccf28SAndroid Build Coastguard Worker */ 3337*e1eccf28SAndroid Build Coastguard Worker void ZSYMM(RsBlasSide Side, RsBlasUplo Uplo, Double2 alpha, const sp<Allocation>& A, 3338*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, Double2 beta, const sp<Allocation>& C); 3339*e1eccf28SAndroid Build Coastguard Worker 3340*e1eccf28SAndroid Build Coastguard Worker /** 3341*e1eccf28SAndroid Build Coastguard Worker * SSYRK performs one of the symmetric rank k operations 3342*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*A**T + beta*C or C := alpha*A**T*A + beta*C 3343*e1eccf28SAndroid Build Coastguard Worker * 3344*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d0/d40/ssyrk_8f.html 3345*e1eccf28SAndroid Build Coastguard Worker * 3346*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3347*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3348*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3349*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 3350*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3351*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32}. 3352*e1eccf28SAndroid Build Coastguard Worker */ 3353*e1eccf28SAndroid Build Coastguard Worker void SSYRK(RsBlasUplo Uplo, RsBlasTranspose Trans, float alpha, 3354*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, float beta, const sp<Allocation>& C); 3355*e1eccf28SAndroid Build Coastguard Worker 3356*e1eccf28SAndroid Build Coastguard Worker /** 3357*e1eccf28SAndroid Build Coastguard Worker * DSYRK performs one of the symmetric rank k operations 3358*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*A**T + beta*C or C := alpha*A**T*A + beta*C 3359*e1eccf28SAndroid Build Coastguard Worker * 3360*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/dc/d05/dsyrk_8f.html 3361*e1eccf28SAndroid Build Coastguard Worker * 3362*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3363*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3364*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3365*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 3366*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3367*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64}. 3368*e1eccf28SAndroid Build Coastguard Worker */ 3369*e1eccf28SAndroid Build Coastguard Worker void DSYRK(RsBlasUplo Uplo, RsBlasTranspose Trans, double alpha, 3370*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, double beta, const sp<Allocation>& C); 3371*e1eccf28SAndroid Build Coastguard Worker 3372*e1eccf28SAndroid Build Coastguard Worker /** 3373*e1eccf28SAndroid Build Coastguard Worker * CSYRK performs one of the symmetric rank k operations 3374*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*A**T + beta*C or C := alpha*A**T*A + beta*C 3375*e1eccf28SAndroid Build Coastguard Worker * 3376*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d3/d6a/csyrk_8f.html 3377*e1eccf28SAndroid Build Coastguard Worker * 3378*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3379*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3380*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3381*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 3382*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3383*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32_2}. 3384*e1eccf28SAndroid Build Coastguard Worker */ 3385*e1eccf28SAndroid Build Coastguard Worker void CSYRK(RsBlasUplo Uplo, RsBlasTranspose Trans, Float2 alpha, 3386*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, Float2 beta, const sp<Allocation>& C); 3387*e1eccf28SAndroid Build Coastguard Worker 3388*e1eccf28SAndroid Build Coastguard Worker /** 3389*e1eccf28SAndroid Build Coastguard Worker * ZSYRK performs one of the symmetric rank k operations 3390*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*A**T + beta*C or C := alpha*A**T*A + beta*C 3391*e1eccf28SAndroid Build Coastguard Worker * 3392*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/de/d54/zsyrk_8f.html 3393*e1eccf28SAndroid Build Coastguard Worker * 3394*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3395*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3396*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3397*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3398*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3399*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64_2}. 3400*e1eccf28SAndroid Build Coastguard Worker */ 3401*e1eccf28SAndroid Build Coastguard Worker void ZSYRK(RsBlasUplo Uplo, RsBlasTranspose Trans, Double2 alpha, 3402*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, Double2 beta, const sp<Allocation>& C); 3403*e1eccf28SAndroid Build Coastguard Worker 3404*e1eccf28SAndroid Build Coastguard Worker /** 3405*e1eccf28SAndroid Build Coastguard Worker * SSYR2K performs one of the symmetric rank 2k operations 3406*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B**T + alpha*B*A**T + beta*C or C := alpha*A**T*B + alpha*B**T*A + beta*C 3407*e1eccf28SAndroid Build Coastguard Worker * 3408*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/df/d3d/ssyr2k_8f.html 3409*e1eccf28SAndroid Build Coastguard Worker * 3410*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3411*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3412*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3413*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 3414*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32}. 3415*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3416*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32}. 3417*e1eccf28SAndroid Build Coastguard Worker */ 3418*e1eccf28SAndroid Build Coastguard Worker void SSYR2K(RsBlasUplo Uplo, RsBlasTranspose Trans, float alpha, 3419*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& B, float beta, const sp<Allocation>& C); 3420*e1eccf28SAndroid Build Coastguard Worker 3421*e1eccf28SAndroid Build Coastguard Worker /** 3422*e1eccf28SAndroid Build Coastguard Worker * DSYR2K performs one of the symmetric rank 2k operations 3423*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B**T + alpha*B*A**T + beta*C or C := alpha*A**T*B + alpha*B**T*A + beta*C 3424*e1eccf28SAndroid Build Coastguard Worker * 3425*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d1/dec/dsyr2k_8f.html 3426*e1eccf28SAndroid Build Coastguard Worker * 3427*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3428*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3429*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3430*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 3431*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64}. 3432*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3433*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64}. 3434*e1eccf28SAndroid Build Coastguard Worker */ 3435*e1eccf28SAndroid Build Coastguard Worker void DSYR2K(RsBlasUplo Uplo, RsBlasTranspose Trans, double alpha, 3436*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& B, double beta, const sp<Allocation>& C); 3437*e1eccf28SAndroid Build Coastguard Worker 3438*e1eccf28SAndroid Build Coastguard Worker /** 3439*e1eccf28SAndroid Build Coastguard Worker * CSYR2K performs one of the symmetric rank 2k operations 3440*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B**T + alpha*B*A**T + beta*C or C := alpha*A**T*B + alpha*B**T*A + beta*C 3441*e1eccf28SAndroid Build Coastguard Worker * 3442*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/de/d7e/csyr2k_8f.html 3443*e1eccf28SAndroid Build Coastguard Worker * 3444*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3445*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3446*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3447*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 3448*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32_2}. 3449*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3450*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32_2}. 3451*e1eccf28SAndroid Build Coastguard Worker */ 3452*e1eccf28SAndroid Build Coastguard Worker void CSYR2K(RsBlasUplo Uplo, RsBlasTranspose Trans, Float2 alpha, 3453*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& B, Float2 beta, const sp<Allocation>& C); 3454*e1eccf28SAndroid Build Coastguard Worker 3455*e1eccf28SAndroid Build Coastguard Worker /** 3456*e1eccf28SAndroid Build Coastguard Worker * ZSYR2K performs one of the symmetric rank 2k operations 3457*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B**T + alpha*B*A**T + beta*C or C := alpha*A**T*B + alpha*B**T*A + beta*C 3458*e1eccf28SAndroid Build Coastguard Worker * 3459*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/df/d20/zsyr2k_8f.html 3460*e1eccf28SAndroid Build Coastguard Worker * 3461*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3462*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3463*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3464*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3465*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64_2}. 3466*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3467*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64_2}. 3468*e1eccf28SAndroid Build Coastguard Worker */ 3469*e1eccf28SAndroid Build Coastguard Worker void ZSYR2K(RsBlasUplo Uplo, RsBlasTranspose Trans, Double2 alpha, 3470*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& A, const sp<Allocation>& B, Double2 beta, const sp<Allocation>& C); 3471*e1eccf28SAndroid Build Coastguard Worker 3472*e1eccf28SAndroid Build Coastguard Worker /** 3473*e1eccf28SAndroid Build Coastguard Worker * STRMM performs one of the matrix-matrix operations 3474*e1eccf28SAndroid Build Coastguard Worker * B := alpha*op(A)*B or B := alpha*B*op(A) 3475*e1eccf28SAndroid Build Coastguard Worker * op(A) is one of op(A) = A or op(A) = A**T 3476*e1eccf28SAndroid Build Coastguard Worker * 3477*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/df/d01/strmm_8f.html 3478*e1eccf28SAndroid Build Coastguard Worker * 3479*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3480*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether matrix A is upper or lower triangular. 3481*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3482*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 3483*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3484*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 3485*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32}. 3486*e1eccf28SAndroid Build Coastguard Worker */ 3487*e1eccf28SAndroid Build Coastguard Worker void STRMM(RsBlasSide Side, RsBlasUplo Uplo, RsBlasTranspose TransA, 3488*e1eccf28SAndroid Build Coastguard Worker RsBlasDiag Diag, float alpha, const sp<Allocation>& A, const sp<Allocation>& B); 3489*e1eccf28SAndroid Build Coastguard Worker 3490*e1eccf28SAndroid Build Coastguard Worker /** 3491*e1eccf28SAndroid Build Coastguard Worker * DTRMM performs one of the matrix-matrix operations 3492*e1eccf28SAndroid Build Coastguard Worker * B := alpha*op(A)*B or B := alpha*B*op(A) 3493*e1eccf28SAndroid Build Coastguard Worker * op(A) is one of op(A) = A or op(A) = A**T 3494*e1eccf28SAndroid Build Coastguard Worker * 3495*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/dd/d19/dtrmm_8f.html 3496*e1eccf28SAndroid Build Coastguard Worker * 3497*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3498*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether matrix A is upper or lower triangular. 3499*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3500*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 3501*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3502*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 3503*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64}. 3504*e1eccf28SAndroid Build Coastguard Worker */ 3505*e1eccf28SAndroid Build Coastguard Worker void DTRMM(RsBlasSide Side, RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 3506*e1eccf28SAndroid Build Coastguard Worker double alpha, const sp<Allocation>& A, const sp<Allocation>& B); 3507*e1eccf28SAndroid Build Coastguard Worker 3508*e1eccf28SAndroid Build Coastguard Worker /** 3509*e1eccf28SAndroid Build Coastguard Worker * CTRMM performs one of the matrix-matrix operations 3510*e1eccf28SAndroid Build Coastguard Worker * B := alpha*op(A)*B or B := alpha*B*op(A) 3511*e1eccf28SAndroid Build Coastguard Worker * op(A) is one of op(A) = A or op(A) = A**T or op(A) = A**H 3512*e1eccf28SAndroid Build Coastguard Worker * 3513*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d4/d9b/ctrmm_8f.html 3514*e1eccf28SAndroid Build Coastguard Worker * 3515*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3516*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether matrix A is upper or lower triangular. 3517*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3518*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 3519*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3520*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 3521*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32_2}. 3522*e1eccf28SAndroid Build Coastguard Worker */ 3523*e1eccf28SAndroid Build Coastguard Worker void CTRMM(RsBlasSide Side, RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 3524*e1eccf28SAndroid Build Coastguard Worker Float2 alpha, const sp<Allocation>& A, const sp<Allocation>& B); 3525*e1eccf28SAndroid Build Coastguard Worker 3526*e1eccf28SAndroid Build Coastguard Worker /** 3527*e1eccf28SAndroid Build Coastguard Worker * ZTRMM performs one of the matrix-matrix operations 3528*e1eccf28SAndroid Build Coastguard Worker * B := alpha*op(A)*B or B := alpha*B*op(A) 3529*e1eccf28SAndroid Build Coastguard Worker * op(A) is one of op(A) = A or op(A) = A**T or op(A) = A**H 3530*e1eccf28SAndroid Build Coastguard Worker * 3531*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d8/de1/ztrmm_8f.html 3532*e1eccf28SAndroid Build Coastguard Worker * 3533*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3534*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether matrix A is upper or lower triangular. 3535*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3536*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 3537*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3538*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3539*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64_2}. 3540*e1eccf28SAndroid Build Coastguard Worker */ 3541*e1eccf28SAndroid Build Coastguard Worker void ZTRMM(RsBlasSide Side, RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 3542*e1eccf28SAndroid Build Coastguard Worker Double2 alpha, const sp<Allocation>& A, const sp<Allocation>& B); 3543*e1eccf28SAndroid Build Coastguard Worker 3544*e1eccf28SAndroid Build Coastguard Worker /** 3545*e1eccf28SAndroid Build Coastguard Worker * STRSM solves one of the matrix equations 3546*e1eccf28SAndroid Build Coastguard Worker * op(A)*X := alpha*B or X*op(A) := alpha*B 3547*e1eccf28SAndroid Build Coastguard Worker * op(A) is one of op(A) = A or op(A) = A**T 3548*e1eccf28SAndroid Build Coastguard Worker * 3549*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d2/d8b/strsm_8f.html 3550*e1eccf28SAndroid Build Coastguard Worker * 3551*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3552*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether matrix A is upper or lower triangular. 3553*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3554*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 3555*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3556*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32}. 3557*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32}. 3558*e1eccf28SAndroid Build Coastguard Worker */ 3559*e1eccf28SAndroid Build Coastguard Worker void STRSM(RsBlasSide Side, RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 3560*e1eccf28SAndroid Build Coastguard Worker float alpha, const sp<Allocation>& A, const sp<Allocation>& B); 3561*e1eccf28SAndroid Build Coastguard Worker 3562*e1eccf28SAndroid Build Coastguard Worker /** 3563*e1eccf28SAndroid Build Coastguard Worker * DTRSM solves one of the matrix equations 3564*e1eccf28SAndroid Build Coastguard Worker * op(A)*X := alpha*B or X*op(A) := alpha*B 3565*e1eccf28SAndroid Build Coastguard Worker * op(A) is one of op(A) = A or op(A) = A**T 3566*e1eccf28SAndroid Build Coastguard Worker * 3567*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/de/da7/dtrsm_8f.html 3568*e1eccf28SAndroid Build Coastguard Worker * 3569*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3570*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether matrix A is upper or lower triangular. 3571*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3572*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 3573*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3574*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64}. 3575*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64}. 3576*e1eccf28SAndroid Build Coastguard Worker */ 3577*e1eccf28SAndroid Build Coastguard Worker void DTRSM(RsBlasSide Side, RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 3578*e1eccf28SAndroid Build Coastguard Worker double alpha, const sp<Allocation>& A, const sp<Allocation>& B); 3579*e1eccf28SAndroid Build Coastguard Worker 3580*e1eccf28SAndroid Build Coastguard Worker /** 3581*e1eccf28SAndroid Build Coastguard Worker * CTRSM solves one of the matrix equations 3582*e1eccf28SAndroid Build Coastguard Worker * op(A)*X := alpha*B or X*op(A) := alpha*B 3583*e1eccf28SAndroid Build Coastguard Worker * op(A) is one of op(A) = A or op(A) = A**T or op(A) = A**H 3584*e1eccf28SAndroid Build Coastguard Worker * 3585*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/de/d30/ctrsm_8f.html 3586*e1eccf28SAndroid Build Coastguard Worker * 3587*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3588*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether matrix A is upper or lower triangular. 3589*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3590*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 3591*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3592*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 3593*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32_2}. 3594*e1eccf28SAndroid Build Coastguard Worker */ 3595*e1eccf28SAndroid Build Coastguard Worker void CTRSM(RsBlasSide Side, RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 3596*e1eccf28SAndroid Build Coastguard Worker Float2 alpha, const sp<Allocation>& A, const sp<Allocation>& B); 3597*e1eccf28SAndroid Build Coastguard Worker 3598*e1eccf28SAndroid Build Coastguard Worker /** 3599*e1eccf28SAndroid Build Coastguard Worker * ZTRSM solves one of the matrix equations 3600*e1eccf28SAndroid Build Coastguard Worker * op(A)*X := alpha*B or X*op(A) := alpha*B 3601*e1eccf28SAndroid Build Coastguard Worker * op(A) is one of op(A) = A or op(A) = A**T or op(A) = A**H 3602*e1eccf28SAndroid Build Coastguard Worker * 3603*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d1/d39/ztrsm_8f.html 3604*e1eccf28SAndroid Build Coastguard Worker * 3605*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3606*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether matrix A is upper or lower triangular. 3607*e1eccf28SAndroid Build Coastguard Worker * @param TransA The type of transpose applied to matrix A. 3608*e1eccf28SAndroid Build Coastguard Worker * @param Diag Specifies whether or not A is unit triangular. 3609*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3610*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3611*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64_2}. 3612*e1eccf28SAndroid Build Coastguard Worker */ 3613*e1eccf28SAndroid Build Coastguard Worker void ZTRSM(RsBlasSide Side, RsBlasUplo Uplo, RsBlasTranspose TransA, RsBlasDiag Diag, 3614*e1eccf28SAndroid Build Coastguard Worker Double2 alpha, const sp<Allocation>& A, const sp<Allocation>& B); 3615*e1eccf28SAndroid Build Coastguard Worker 3616*e1eccf28SAndroid Build Coastguard Worker /** 3617*e1eccf28SAndroid Build Coastguard Worker * CHEMM performs one of the matrix-matrix operations 3618*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C 3619*e1eccf28SAndroid Build Coastguard Worker * 3620*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d3/d66/chemm_8f.html 3621*e1eccf28SAndroid Build Coastguard Worker * 3622*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3623*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 3624*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3625*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 3626*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32_2}. 3627*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3628*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32_2}. 3629*e1eccf28SAndroid Build Coastguard Worker */ 3630*e1eccf28SAndroid Build Coastguard Worker void CHEMM(RsBlasSide Side, RsBlasUplo Uplo, Float2 alpha, const sp<Allocation>& A, 3631*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, Float2 beta, const sp<Allocation>& C); 3632*e1eccf28SAndroid Build Coastguard Worker 3633*e1eccf28SAndroid Build Coastguard Worker /** 3634*e1eccf28SAndroid Build Coastguard Worker * ZHEMM performs one of the matrix-matrix operations 3635*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B + beta*C or C := alpha*B*A + beta*C 3636*e1eccf28SAndroid Build Coastguard Worker * 3637*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d6/d3e/zhemm_8f.html 3638*e1eccf28SAndroid Build Coastguard Worker * 3639*e1eccf28SAndroid Build Coastguard Worker * @param Side Specifies whether the symmetric matrix A appears on the left or right. 3640*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part is to be referenced. 3641*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3642*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3643*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64_2}. 3644*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3645*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64_2}. 3646*e1eccf28SAndroid Build Coastguard Worker */ 3647*e1eccf28SAndroid Build Coastguard Worker void ZHEMM(RsBlasSide Side, RsBlasUplo Uplo, Double2 alpha, const sp<Allocation>& A, 3648*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, Double2 beta, const sp<Allocation>& C); 3649*e1eccf28SAndroid Build Coastguard Worker 3650*e1eccf28SAndroid Build Coastguard Worker /** 3651*e1eccf28SAndroid Build Coastguard Worker * CHERK performs one of the hermitian rank k operations 3652*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*A**H + beta*C or C := alpha*A**H*A + beta*C 3653*e1eccf28SAndroid Build Coastguard Worker * 3654*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d8/d52/cherk_8f.html 3655*e1eccf28SAndroid Build Coastguard Worker * 3656*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3657*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3658*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3659*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 3660*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3661*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32_2}. 3662*e1eccf28SAndroid Build Coastguard Worker */ 3663*e1eccf28SAndroid Build Coastguard Worker void CHERK(RsBlasUplo Uplo, RsBlasTranspose Trans, float alpha, const sp<Allocation>& A, 3664*e1eccf28SAndroid Build Coastguard Worker float beta, const sp<Allocation>& C); 3665*e1eccf28SAndroid Build Coastguard Worker 3666*e1eccf28SAndroid Build Coastguard Worker /** 3667*e1eccf28SAndroid Build Coastguard Worker * ZHERK performs one of the hermitian rank k operations 3668*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*A**H + beta*C or C := alpha*A**H*A + beta*C 3669*e1eccf28SAndroid Build Coastguard Worker * 3670*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d1/db1/zherk_8f.html 3671*e1eccf28SAndroid Build Coastguard Worker * 3672*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3673*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3674*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3675*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3676*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3677*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64_2}. 3678*e1eccf28SAndroid Build Coastguard Worker */ 3679*e1eccf28SAndroid Build Coastguard Worker void ZHERK(RsBlasUplo Uplo, RsBlasTranspose Trans, double alpha, const sp<Allocation>& A, 3680*e1eccf28SAndroid Build Coastguard Worker double beta, const sp<Allocation>& C); 3681*e1eccf28SAndroid Build Coastguard Worker 3682*e1eccf28SAndroid Build Coastguard Worker /** 3683*e1eccf28SAndroid Build Coastguard Worker * CHER2K performs one of the hermitian rank 2k operations 3684*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B**H + conjg( alpha )*B*A**H + beta*C or C := alpha*A**H*B + conjg( alpha )*B**H*A + beta*C 3685*e1eccf28SAndroid Build Coastguard Worker * 3686*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d1/d82/cher2k_8f.html 3687*e1eccf28SAndroid Build Coastguard Worker * 3688*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3689*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3690*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3691*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F32_2}. 3692*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F32_2}. 3693*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3694*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F32_2}. 3695*e1eccf28SAndroid Build Coastguard Worker */ 3696*e1eccf28SAndroid Build Coastguard Worker void CHER2K(RsBlasUplo Uplo, RsBlasTranspose Trans, Float2 alpha, const sp<Allocation>& A, 3697*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, float beta, const sp<Allocation>& C); 3698*e1eccf28SAndroid Build Coastguard Worker 3699*e1eccf28SAndroid Build Coastguard Worker /** 3700*e1eccf28SAndroid Build Coastguard Worker * ZHER2K performs one of the hermitian rank 2k operations 3701*e1eccf28SAndroid Build Coastguard Worker * C := alpha*A*B**H + conjg( alpha )*B*A**H + beta*C or C := alpha*A**H*B + conjg( alpha )*B**H*A + beta*C 3702*e1eccf28SAndroid Build Coastguard Worker * 3703*e1eccf28SAndroid Build Coastguard Worker * Details: http://www.netlib.org/lapack/explore-html/d7/dfa/zher2k_8f.html 3704*e1eccf28SAndroid Build Coastguard Worker * 3705*e1eccf28SAndroid Build Coastguard Worker * @param Uplo Specifies whether the upper or lower triangular part of C is to be referenced. 3706*e1eccf28SAndroid Build Coastguard Worker * @param Trans The type of transpose applied to the operation. 3707*e1eccf28SAndroid Build Coastguard Worker * @param alpha The scalar alpha. 3708*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#F64_2}. 3709*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#F64_2}. 3710*e1eccf28SAndroid Build Coastguard Worker * @param beta The scalar beta. 3711*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#F64_2}. 3712*e1eccf28SAndroid Build Coastguard Worker */ 3713*e1eccf28SAndroid Build Coastguard Worker void ZHER2K(RsBlasUplo Uplo, RsBlasTranspose Trans, Double2 alpha, const sp<Allocation>& A, 3714*e1eccf28SAndroid Build Coastguard Worker const sp<Allocation>& B, double beta, const sp<Allocation>& C); 3715*e1eccf28SAndroid Build Coastguard Worker 3716*e1eccf28SAndroid Build Coastguard Worker /** 3717*e1eccf28SAndroid Build Coastguard Worker * 8-bit GEMM-like operation for neural networks: C = A * Transpose(B) 3718*e1eccf28SAndroid Build Coastguard Worker * Calculations are done in 1.10.21 fixed-point format for the final output, 3719*e1eccf28SAndroid Build Coastguard Worker * just before there's a shift down to drop the fractional parts. The output 3720*e1eccf28SAndroid Build Coastguard Worker * values are gated to 0 to 255 to fit in a byte, but the 10-bit format 3721*e1eccf28SAndroid Build Coastguard Worker * gives some headroom to avoid wrapping around on small overflows. 3722*e1eccf28SAndroid Build Coastguard Worker * 3723*e1eccf28SAndroid Build Coastguard Worker * @param A The input allocation contains matrix A, supported elements type: {Element#U8}. 3724*e1eccf28SAndroid Build Coastguard Worker * @param a_offset The offset for all values in matrix A, e.g A[i,j] = A[i,j] - a_offset. Value should be from 0 to 255. 3725*e1eccf28SAndroid Build Coastguard Worker * @param B The input allocation contains matrix B, supported elements type: {Element#U8}. 3726*e1eccf28SAndroid Build Coastguard Worker * @param b_offset The offset for all values in matrix B, e.g B[i,j] = B[i,j] - b_offset. Value should be from 0 to 255. 3727*e1eccf28SAndroid Build Coastguard Worker * @param C The input allocation contains matrix C, supported elements type: {Element#U8}. 3728*e1eccf28SAndroid Build Coastguard Worker * @param c_offset The offset for all values in matrix C. 3729*e1eccf28SAndroid Build Coastguard Worker * @param c_mult The multiplier for all values in matrix C, e.g C[i,j] = (C[i,j] + c_offset) * c_mult. 3730*e1eccf28SAndroid Build Coastguard Worker **/ 3731*e1eccf28SAndroid Build Coastguard Worker void BNNM(const sp<Allocation>& A, int a_offset, const sp<Allocation>& B, int b_offset, const sp<Allocation>& C, 3732*e1eccf28SAndroid Build Coastguard Worker int c_offset, int c_mult); 3733*e1eccf28SAndroid Build Coastguard Worker }; 3734*e1eccf28SAndroid Build Coastguard Worker 3735*e1eccf28SAndroid Build Coastguard Worker /** 3736*e1eccf28SAndroid Build Coastguard Worker * Intrinsic kernel for blending two Allocations. 3737*e1eccf28SAndroid Build Coastguard Worker */ 3738*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsicBlend : public ScriptIntrinsic { 3739*e1eccf28SAndroid Build Coastguard Worker private: 3740*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsicBlend(sp<RS> rs, sp<const Element> e); 3741*e1eccf28SAndroid Build Coastguard Worker public: 3742*e1eccf28SAndroid Build Coastguard Worker /** 3743*e1eccf28SAndroid Build Coastguard Worker * Supported Element types are U8_4. 3744*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 3745*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element 3746*e1eccf28SAndroid Build Coastguard Worker * @return new ScriptIntrinsicBlend 3747*e1eccf28SAndroid Build Coastguard Worker */ 3748*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsicBlend> create(const sp<RS>& rs, const sp<const Element>& e); 3749*e1eccf28SAndroid Build Coastguard Worker /** 3750*e1eccf28SAndroid Build Coastguard Worker * sets dst = {0, 0, 0, 0} 3751*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3752*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3753*e1eccf28SAndroid Build Coastguard Worker */ 3754*e1eccf28SAndroid Build Coastguard Worker void forEachClear(const sp<Allocation>& in, const sp<Allocation>& out); 3755*e1eccf28SAndroid Build Coastguard Worker /** 3756*e1eccf28SAndroid Build Coastguard Worker * Sets dst = src 3757*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3758*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3759*e1eccf28SAndroid Build Coastguard Worker */ 3760*e1eccf28SAndroid Build Coastguard Worker void forEachSrc(const sp<Allocation>& in, const sp<Allocation>& out); 3761*e1eccf28SAndroid Build Coastguard Worker /** 3762*e1eccf28SAndroid Build Coastguard Worker * Sets dst = dst (NOP) 3763*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3764*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3765*e1eccf28SAndroid Build Coastguard Worker */ 3766*e1eccf28SAndroid Build Coastguard Worker void forEachDst(const sp<Allocation>& in, const sp<Allocation>& out); 3767*e1eccf28SAndroid Build Coastguard Worker /** 3768*e1eccf28SAndroid Build Coastguard Worker * Sets dst = src + dst * (1.0 - src.a) 3769*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3770*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3771*e1eccf28SAndroid Build Coastguard Worker */ 3772*e1eccf28SAndroid Build Coastguard Worker void forEachSrcOver(const sp<Allocation>& in, const sp<Allocation>& out); 3773*e1eccf28SAndroid Build Coastguard Worker /** 3774*e1eccf28SAndroid Build Coastguard Worker * Sets dst = dst + src * (1.0 - dst.a) 3775*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3776*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3777*e1eccf28SAndroid Build Coastguard Worker */ 3778*e1eccf28SAndroid Build Coastguard Worker void forEachDstOver(const sp<Allocation>& in, const sp<Allocation>& out); 3779*e1eccf28SAndroid Build Coastguard Worker /** 3780*e1eccf28SAndroid Build Coastguard Worker * Sets dst = src * dst.a 3781*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3782*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3783*e1eccf28SAndroid Build Coastguard Worker */ 3784*e1eccf28SAndroid Build Coastguard Worker void forEachSrcIn(const sp<Allocation>& in, const sp<Allocation>& out); 3785*e1eccf28SAndroid Build Coastguard Worker /** 3786*e1eccf28SAndroid Build Coastguard Worker * Sets dst = dst * src.a 3787*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3788*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3789*e1eccf28SAndroid Build Coastguard Worker */ 3790*e1eccf28SAndroid Build Coastguard Worker void forEachDstIn(const sp<Allocation>& in, const sp<Allocation>& out); 3791*e1eccf28SAndroid Build Coastguard Worker /** 3792*e1eccf28SAndroid Build Coastguard Worker * Sets dst = src * (1.0 - dst.a) 3793*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3794*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3795*e1eccf28SAndroid Build Coastguard Worker */ 3796*e1eccf28SAndroid Build Coastguard Worker void forEachSrcOut(const sp<Allocation>& in, const sp<Allocation>& out); 3797*e1eccf28SAndroid Build Coastguard Worker /** 3798*e1eccf28SAndroid Build Coastguard Worker * Sets dst = dst * (1.0 - src.a) 3799*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3800*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3801*e1eccf28SAndroid Build Coastguard Worker */ 3802*e1eccf28SAndroid Build Coastguard Worker void forEachDstOut(const sp<Allocation>& in, const sp<Allocation>& out); 3803*e1eccf28SAndroid Build Coastguard Worker /** 3804*e1eccf28SAndroid Build Coastguard Worker * Sets dst.rgb = src.rgb * dst.a + (1.0 - src.a) * dst.rgb 3805*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3806*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3807*e1eccf28SAndroid Build Coastguard Worker */ 3808*e1eccf28SAndroid Build Coastguard Worker void forEachSrcAtop(const sp<Allocation>& in, const sp<Allocation>& out); 3809*e1eccf28SAndroid Build Coastguard Worker /** 3810*e1eccf28SAndroid Build Coastguard Worker * Sets dst.rgb = dst.rgb * src.a + (1.0 - dst.a) * src.rgb 3811*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3812*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3813*e1eccf28SAndroid Build Coastguard Worker */ 3814*e1eccf28SAndroid Build Coastguard Worker void forEachDstAtop(const sp<Allocation>& in, const sp<Allocation>& out); 3815*e1eccf28SAndroid Build Coastguard Worker /** 3816*e1eccf28SAndroid Build Coastguard Worker * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a} 3817*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3818*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3819*e1eccf28SAndroid Build Coastguard Worker */ 3820*e1eccf28SAndroid Build Coastguard Worker void forEachXor(const sp<Allocation>& in, const sp<Allocation>& out); 3821*e1eccf28SAndroid Build Coastguard Worker /** 3822*e1eccf28SAndroid Build Coastguard Worker * Sets dst = src * dst 3823*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3824*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3825*e1eccf28SAndroid Build Coastguard Worker */ 3826*e1eccf28SAndroid Build Coastguard Worker void forEachMultiply(const sp<Allocation>& in, const sp<Allocation>& out); 3827*e1eccf28SAndroid Build Coastguard Worker /** 3828*e1eccf28SAndroid Build Coastguard Worker * Sets dst = min(src + dst, 1.0) 3829*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3830*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3831*e1eccf28SAndroid Build Coastguard Worker */ 3832*e1eccf28SAndroid Build Coastguard Worker void forEachAdd(const sp<Allocation>& in, const sp<Allocation>& out); 3833*e1eccf28SAndroid Build Coastguard Worker /** 3834*e1eccf28SAndroid Build Coastguard Worker * Sets dst = max(dst - src, 0.0) 3835*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3836*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3837*e1eccf28SAndroid Build Coastguard Worker */ 3838*e1eccf28SAndroid Build Coastguard Worker void forEachSubtract(const sp<Allocation>& in, const sp<Allocation>& out); 3839*e1eccf28SAndroid Build Coastguard Worker }; 3840*e1eccf28SAndroid Build Coastguard Worker 3841*e1eccf28SAndroid Build Coastguard Worker /** 3842*e1eccf28SAndroid Build Coastguard Worker * Intrinsic Gausian blur filter. Applies a Gaussian blur of the specified 3843*e1eccf28SAndroid Build Coastguard Worker * radius to all elements of an Allocation. 3844*e1eccf28SAndroid Build Coastguard Worker */ 3845*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsicBlur : public ScriptIntrinsic { 3846*e1eccf28SAndroid Build Coastguard Worker private: 3847*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsicBlur(sp<RS> rs, sp<const Element> e); 3848*e1eccf28SAndroid Build Coastguard Worker public: 3849*e1eccf28SAndroid Build Coastguard Worker /** 3850*e1eccf28SAndroid Build Coastguard Worker * Supported Element types are U8 and U8_4. 3851*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 3852*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element 3853*e1eccf28SAndroid Build Coastguard Worker * @return new ScriptIntrinsicBlur 3854*e1eccf28SAndroid Build Coastguard Worker */ 3855*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsicBlur> create(const sp<RS>& rs, const sp<const Element>& e); 3856*e1eccf28SAndroid Build Coastguard Worker /** 3857*e1eccf28SAndroid Build Coastguard Worker * Sets the input of the blur. 3858*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3859*e1eccf28SAndroid Build Coastguard Worker */ 3860*e1eccf28SAndroid Build Coastguard Worker void setInput(const sp<Allocation>& in); 3861*e1eccf28SAndroid Build Coastguard Worker /** 3862*e1eccf28SAndroid Build Coastguard Worker * Runs the intrinsic. 3863*e1eccf28SAndroid Build Coastguard Worker * @param[in] output Allocation 3864*e1eccf28SAndroid Build Coastguard Worker */ 3865*e1eccf28SAndroid Build Coastguard Worker void forEach(const sp<Allocation>& out); 3866*e1eccf28SAndroid Build Coastguard Worker /** 3867*e1eccf28SAndroid Build Coastguard Worker * Sets the radius of the blur. The supported range is 0 < radius <= 25. 3868*e1eccf28SAndroid Build Coastguard Worker * @param[in] radius radius of the blur 3869*e1eccf28SAndroid Build Coastguard Worker */ 3870*e1eccf28SAndroid Build Coastguard Worker void setRadius(float radius); 3871*e1eccf28SAndroid Build Coastguard Worker }; 3872*e1eccf28SAndroid Build Coastguard Worker 3873*e1eccf28SAndroid Build Coastguard Worker /** 3874*e1eccf28SAndroid Build Coastguard Worker * Intrinsic for applying a color matrix to allocations. This has the 3875*e1eccf28SAndroid Build Coastguard Worker * same effect as loading each element and converting it to a 3876*e1eccf28SAndroid Build Coastguard Worker * F32_N, multiplying the result by the 4x4 color matrix 3877*e1eccf28SAndroid Build Coastguard Worker * as performed by rsMatrixMultiply() and writing it to the output 3878*e1eccf28SAndroid Build Coastguard Worker * after conversion back to U8_N or F32_N. 3879*e1eccf28SAndroid Build Coastguard Worker */ 3880*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsicColorMatrix : public ScriptIntrinsic { 3881*e1eccf28SAndroid Build Coastguard Worker private: 3882*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsicColorMatrix(sp<RS> rs, sp<const Element> e); 3883*e1eccf28SAndroid Build Coastguard Worker public: 3884*e1eccf28SAndroid Build Coastguard Worker /** 3885*e1eccf28SAndroid Build Coastguard Worker * Creates a new intrinsic. 3886*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 3887*e1eccf28SAndroid Build Coastguard Worker * @return new ScriptIntrinsicColorMatrix 3888*e1eccf28SAndroid Build Coastguard Worker */ 3889*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsicColorMatrix> create(const sp<RS>& rs); 3890*e1eccf28SAndroid Build Coastguard Worker /** 3891*e1eccf28SAndroid Build Coastguard Worker * Applies the color matrix. Supported types are U8 and F32 with 3892*e1eccf28SAndroid Build Coastguard Worker * vector lengths between 1 and 4. 3893*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3894*e1eccf28SAndroid Build Coastguard Worker * @param[out] out output Allocation 3895*e1eccf28SAndroid Build Coastguard Worker */ 3896*e1eccf28SAndroid Build Coastguard Worker void forEach(const sp<Allocation>& in, const sp<Allocation>& out); 3897*e1eccf28SAndroid Build Coastguard Worker /** 3898*e1eccf28SAndroid Build Coastguard Worker * Set the value to be added after the color matrix has been 3899*e1eccf28SAndroid Build Coastguard Worker * applied. The default value is {0, 0, 0, 0}. 3900*e1eccf28SAndroid Build Coastguard Worker * @param[in] add float[4] of values 3901*e1eccf28SAndroid Build Coastguard Worker */ 3902*e1eccf28SAndroid Build Coastguard Worker void setAdd(float* add); 3903*e1eccf28SAndroid Build Coastguard Worker 3904*e1eccf28SAndroid Build Coastguard Worker /** 3905*e1eccf28SAndroid Build Coastguard Worker * Set the color matrix which will be applied to each cell of the 3906*e1eccf28SAndroid Build Coastguard Worker * image. The alpha channel will be copied. 3907*e1eccf28SAndroid Build Coastguard Worker * 3908*e1eccf28SAndroid Build Coastguard Worker * @param[in] m float[9] of values 3909*e1eccf28SAndroid Build Coastguard Worker */ 3910*e1eccf28SAndroid Build Coastguard Worker void setColorMatrix3(float* m); 3911*e1eccf28SAndroid Build Coastguard Worker /** 3912*e1eccf28SAndroid Build Coastguard Worker * Set the color matrix which will be applied to each cell of the 3913*e1eccf28SAndroid Build Coastguard Worker * image. 3914*e1eccf28SAndroid Build Coastguard Worker * 3915*e1eccf28SAndroid Build Coastguard Worker * @param[in] m float[16] of values 3916*e1eccf28SAndroid Build Coastguard Worker */ 3917*e1eccf28SAndroid Build Coastguard Worker void setColorMatrix4(float* m); 3918*e1eccf28SAndroid Build Coastguard Worker /** 3919*e1eccf28SAndroid Build Coastguard Worker * Set a color matrix to convert from RGB to luminance. The alpha 3920*e1eccf28SAndroid Build Coastguard Worker * channel will be a copy. 3921*e1eccf28SAndroid Build Coastguard Worker */ 3922*e1eccf28SAndroid Build Coastguard Worker void setGreyscale(); 3923*e1eccf28SAndroid Build Coastguard Worker /** 3924*e1eccf28SAndroid Build Coastguard Worker * Set the matrix to convert from RGB to YUV with a direct copy of 3925*e1eccf28SAndroid Build Coastguard Worker * the 4th channel. 3926*e1eccf28SAndroid Build Coastguard Worker */ 3927*e1eccf28SAndroid Build Coastguard Worker void setRGBtoYUV(); 3928*e1eccf28SAndroid Build Coastguard Worker /** 3929*e1eccf28SAndroid Build Coastguard Worker * Set the matrix to convert from YUV to RGB with a direct copy of 3930*e1eccf28SAndroid Build Coastguard Worker * the 4th channel. 3931*e1eccf28SAndroid Build Coastguard Worker */ 3932*e1eccf28SAndroid Build Coastguard Worker void setYUVtoRGB(); 3933*e1eccf28SAndroid Build Coastguard Worker }; 3934*e1eccf28SAndroid Build Coastguard Worker 3935*e1eccf28SAndroid Build Coastguard Worker /** 3936*e1eccf28SAndroid Build Coastguard Worker * Intrinsic for applying a 3x3 convolve to an allocation. 3937*e1eccf28SAndroid Build Coastguard Worker */ 3938*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsicConvolve3x3 : public ScriptIntrinsic { 3939*e1eccf28SAndroid Build Coastguard Worker private: 3940*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsicConvolve3x3(sp<RS> rs, sp<const Element> e); 3941*e1eccf28SAndroid Build Coastguard Worker public: 3942*e1eccf28SAndroid Build Coastguard Worker /** 3943*e1eccf28SAndroid Build Coastguard Worker * Supported types U8 and F32 with vector lengths between 1 and 3944*e1eccf28SAndroid Build Coastguard Worker * 4. The default convolution kernel is the identity. 3945*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 3946*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element 3947*e1eccf28SAndroid Build Coastguard Worker * @return new ScriptIntrinsicConvolve3x3 3948*e1eccf28SAndroid Build Coastguard Worker */ 3949*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsicConvolve3x3> create(const sp<RS>& rs, const sp<const Element>& e); 3950*e1eccf28SAndroid Build Coastguard Worker /** 3951*e1eccf28SAndroid Build Coastguard Worker * Sets input for intrinsic. 3952*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3953*e1eccf28SAndroid Build Coastguard Worker */ 3954*e1eccf28SAndroid Build Coastguard Worker void setInput(const sp<Allocation>& in); 3955*e1eccf28SAndroid Build Coastguard Worker /** 3956*e1eccf28SAndroid Build Coastguard Worker * Launches the intrinsic. 3957*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3958*e1eccf28SAndroid Build Coastguard Worker */ 3959*e1eccf28SAndroid Build Coastguard Worker void forEach(const sp<Allocation>& out); 3960*e1eccf28SAndroid Build Coastguard Worker /** 3961*e1eccf28SAndroid Build Coastguard Worker * Sets convolution kernel. 3962*e1eccf28SAndroid Build Coastguard Worker * @param[in] v float[9] of values 3963*e1eccf28SAndroid Build Coastguard Worker */ 3964*e1eccf28SAndroid Build Coastguard Worker void setCoefficients(float* v); 3965*e1eccf28SAndroid Build Coastguard Worker }; 3966*e1eccf28SAndroid Build Coastguard Worker 3967*e1eccf28SAndroid Build Coastguard Worker /** 3968*e1eccf28SAndroid Build Coastguard Worker * Intrinsic for applying a 5x5 convolve to an allocation. 3969*e1eccf28SAndroid Build Coastguard Worker */ 3970*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsicConvolve5x5 : public ScriptIntrinsic { 3971*e1eccf28SAndroid Build Coastguard Worker private: 3972*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsicConvolve5x5(sp<RS> rs, sp<const Element> e); 3973*e1eccf28SAndroid Build Coastguard Worker public: 3974*e1eccf28SAndroid Build Coastguard Worker /** 3975*e1eccf28SAndroid Build Coastguard Worker * Supported types U8 and F32 with vector lengths between 1 and 3976*e1eccf28SAndroid Build Coastguard Worker * 4. The default convolution kernel is the identity. 3977*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 3978*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element 3979*e1eccf28SAndroid Build Coastguard Worker * @return new ScriptIntrinsicConvolve5x5 3980*e1eccf28SAndroid Build Coastguard Worker */ 3981*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsicConvolve5x5> create(const sp<RS>& rs, const sp<const Element>& e); 3982*e1eccf28SAndroid Build Coastguard Worker /** 3983*e1eccf28SAndroid Build Coastguard Worker * Sets input for intrinsic. 3984*e1eccf28SAndroid Build Coastguard Worker * @param[in] in input Allocation 3985*e1eccf28SAndroid Build Coastguard Worker */ 3986*e1eccf28SAndroid Build Coastguard Worker void setInput(const sp<Allocation>& in); 3987*e1eccf28SAndroid Build Coastguard Worker /** 3988*e1eccf28SAndroid Build Coastguard Worker * Launches the intrinsic. 3989*e1eccf28SAndroid Build Coastguard Worker * @param[in] out output Allocation 3990*e1eccf28SAndroid Build Coastguard Worker */ 3991*e1eccf28SAndroid Build Coastguard Worker void forEach(const sp<Allocation>& out); 3992*e1eccf28SAndroid Build Coastguard Worker /** 3993*e1eccf28SAndroid Build Coastguard Worker * Sets convolution kernel. 3994*e1eccf28SAndroid Build Coastguard Worker * @param[in] v float[25] of values 3995*e1eccf28SAndroid Build Coastguard Worker */ 3996*e1eccf28SAndroid Build Coastguard Worker void setCoefficients(float* v); 3997*e1eccf28SAndroid Build Coastguard Worker }; 3998*e1eccf28SAndroid Build Coastguard Worker 3999*e1eccf28SAndroid Build Coastguard Worker /** 4000*e1eccf28SAndroid Build Coastguard Worker * Intrinsic for computing a histogram. 4001*e1eccf28SAndroid Build Coastguard Worker */ 4002*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsicHistogram : public ScriptIntrinsic { 4003*e1eccf28SAndroid Build Coastguard Worker private: 4004*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsicHistogram(sp<RS> rs, sp<const Element> e); 4005*e1eccf28SAndroid Build Coastguard Worker sp<Allocation> mOut; 4006*e1eccf28SAndroid Build Coastguard Worker public: 4007*e1eccf28SAndroid Build Coastguard Worker /** 4008*e1eccf28SAndroid Build Coastguard Worker * Create an intrinsic for calculating the histogram of an uchar 4009*e1eccf28SAndroid Build Coastguard Worker * or uchar4 image. 4010*e1eccf28SAndroid Build Coastguard Worker * 4011*e1eccf28SAndroid Build Coastguard Worker * Supported elements types are U8_4, U8_3, U8_2, and U8. 4012*e1eccf28SAndroid Build Coastguard Worker * 4013*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs The RenderScript context 4014*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element type for inputs 4015*e1eccf28SAndroid Build Coastguard Worker * 4016*e1eccf28SAndroid Build Coastguard Worker * @return ScriptIntrinsicHistogram 4017*e1eccf28SAndroid Build Coastguard Worker */ 4018*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsicHistogram> create(const sp<RS>& rs, const sp<const Element>& e); 4019*e1eccf28SAndroid Build Coastguard Worker /** 4020*e1eccf28SAndroid Build Coastguard Worker * Set the output of the histogram. 32 bit integer types are 4021*e1eccf28SAndroid Build Coastguard Worker * supported. 4022*e1eccf28SAndroid Build Coastguard Worker * 4023*e1eccf28SAndroid Build Coastguard Worker * @param[in] aout The output allocation 4024*e1eccf28SAndroid Build Coastguard Worker */ 4025*e1eccf28SAndroid Build Coastguard Worker void setOutput(const sp<Allocation>& aout); 4026*e1eccf28SAndroid Build Coastguard Worker /** 4027*e1eccf28SAndroid Build Coastguard Worker * Set the coefficients used for the dot product calculation. The 4028*e1eccf28SAndroid Build Coastguard Worker * default is {0.299f, 0.587f, 0.114f, 0.f}. 4029*e1eccf28SAndroid Build Coastguard Worker * 4030*e1eccf28SAndroid Build Coastguard Worker * Coefficients must be >= 0 and sum to 1.0 or less. 4031*e1eccf28SAndroid Build Coastguard Worker * 4032*e1eccf28SAndroid Build Coastguard Worker * @param[in] r Red coefficient 4033*e1eccf28SAndroid Build Coastguard Worker * @param[in] g Green coefficient 4034*e1eccf28SAndroid Build Coastguard Worker * @param[in] b Blue coefficient 4035*e1eccf28SAndroid Build Coastguard Worker * @param[in] a Alpha coefficient 4036*e1eccf28SAndroid Build Coastguard Worker */ 4037*e1eccf28SAndroid Build Coastguard Worker void setDotCoefficients(float r, float g, float b, float a); 4038*e1eccf28SAndroid Build Coastguard Worker /** 4039*e1eccf28SAndroid Build Coastguard Worker * Process an input buffer and place the histogram into the output 4040*e1eccf28SAndroid Build Coastguard Worker * allocation. The output allocation may be a narrower vector size 4041*e1eccf28SAndroid Build Coastguard Worker * than the input. In this case the vector size of the output is 4042*e1eccf28SAndroid Build Coastguard Worker * used to determine how many of the input channels are used in 4043*e1eccf28SAndroid Build Coastguard Worker * the computation. This is useful if you have an RGBA input 4044*e1eccf28SAndroid Build Coastguard Worker * buffer but only want the histogram for RGB. 4045*e1eccf28SAndroid Build Coastguard Worker * 4046*e1eccf28SAndroid Build Coastguard Worker * 1D and 2D input allocations are supported. 4047*e1eccf28SAndroid Build Coastguard Worker * 4048*e1eccf28SAndroid Build Coastguard Worker * @param[in] ain The input image 4049*e1eccf28SAndroid Build Coastguard Worker */ 4050*e1eccf28SAndroid Build Coastguard Worker void forEach(const sp<Allocation>& ain); 4051*e1eccf28SAndroid Build Coastguard Worker /** 4052*e1eccf28SAndroid Build Coastguard Worker * Process an input buffer and place the histogram into the output 4053*e1eccf28SAndroid Build Coastguard Worker * allocation. The dot product of the input channel and the 4054*e1eccf28SAndroid Build Coastguard Worker * coefficients from 'setDotCoefficients' are used to calculate 4055*e1eccf28SAndroid Build Coastguard Worker * the output values. 4056*e1eccf28SAndroid Build Coastguard Worker * 4057*e1eccf28SAndroid Build Coastguard Worker * 1D and 2D input allocations are supported. 4058*e1eccf28SAndroid Build Coastguard Worker * 4059*e1eccf28SAndroid Build Coastguard Worker * @param ain The input image 4060*e1eccf28SAndroid Build Coastguard Worker */ 4061*e1eccf28SAndroid Build Coastguard Worker void forEach_dot(const sp<Allocation>& ain); 4062*e1eccf28SAndroid Build Coastguard Worker }; 4063*e1eccf28SAndroid Build Coastguard Worker 4064*e1eccf28SAndroid Build Coastguard Worker /** 4065*e1eccf28SAndroid Build Coastguard Worker * Intrinsic for applying a per-channel lookup table. Each channel of 4066*e1eccf28SAndroid Build Coastguard Worker * the input has an independant lookup table. The tables are 256 4067*e1eccf28SAndroid Build Coastguard Worker * entries in size and can cover the full value range of U8_4. 4068*e1eccf28SAndroid Build Coastguard Worker **/ 4069*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsicLUT : public ScriptIntrinsic { 4070*e1eccf28SAndroid Build Coastguard Worker private: 4071*e1eccf28SAndroid Build Coastguard Worker sp<Allocation> LUT; 4072*e1eccf28SAndroid Build Coastguard Worker bool mDirty; 4073*e1eccf28SAndroid Build Coastguard Worker unsigned char mCache[1024]; 4074*e1eccf28SAndroid Build Coastguard Worker void setTable(unsigned int offset, unsigned char base, unsigned int length, unsigned char* lutValues); 4075*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsicLUT(sp<RS> rs, sp<const Element> e); 4076*e1eccf28SAndroid Build Coastguard Worker 4077*e1eccf28SAndroid Build Coastguard Worker public: 4078*e1eccf28SAndroid Build Coastguard Worker /** 4079*e1eccf28SAndroid Build Coastguard Worker * Supported elements types are U8_4. 4080*e1eccf28SAndroid Build Coastguard Worker * 4081*e1eccf28SAndroid Build Coastguard Worker * The defaults tables are identity. 4082*e1eccf28SAndroid Build Coastguard Worker * 4083*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs The RenderScript context 4084*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element type for intputs and outputs 4085*e1eccf28SAndroid Build Coastguard Worker * 4086*e1eccf28SAndroid Build Coastguard Worker * @return ScriptIntrinsicLUT 4087*e1eccf28SAndroid Build Coastguard Worker */ 4088*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsicLUT> create(const sp<RS>& rs, const sp<const Element>& e); 4089*e1eccf28SAndroid Build Coastguard Worker /** 4090*e1eccf28SAndroid Build Coastguard Worker * Invoke the kernel and apply the lookup to each cell of ain and 4091*e1eccf28SAndroid Build Coastguard Worker * copy to aout. 4092*e1eccf28SAndroid Build Coastguard Worker * 4093*e1eccf28SAndroid Build Coastguard Worker * @param[in] ain Input allocation 4094*e1eccf28SAndroid Build Coastguard Worker * @param[in] aout Output allocation 4095*e1eccf28SAndroid Build Coastguard Worker */ 4096*e1eccf28SAndroid Build Coastguard Worker void forEach(const sp<Allocation>& ain, const sp<Allocation>& aout); 4097*e1eccf28SAndroid Build Coastguard Worker /** 4098*e1eccf28SAndroid Build Coastguard Worker * Sets entries in LUT for the red channel. 4099*e1eccf28SAndroid Build Coastguard Worker * @param[in] base base of region to update 4100*e1eccf28SAndroid Build Coastguard Worker * @param[in] length length of region to update 4101*e1eccf28SAndroid Build Coastguard Worker * @param[in] lutValues LUT values to use 4102*e1eccf28SAndroid Build Coastguard Worker */ 4103*e1eccf28SAndroid Build Coastguard Worker void setRed(unsigned char base, unsigned int length, unsigned char* lutValues); 4104*e1eccf28SAndroid Build Coastguard Worker /** 4105*e1eccf28SAndroid Build Coastguard Worker * Sets entries in LUT for the green channel. 4106*e1eccf28SAndroid Build Coastguard Worker * @param[in] base base of region to update 4107*e1eccf28SAndroid Build Coastguard Worker * @param[in] length length of region to update 4108*e1eccf28SAndroid Build Coastguard Worker * @param[in] lutValues LUT values to use 4109*e1eccf28SAndroid Build Coastguard Worker */ 4110*e1eccf28SAndroid Build Coastguard Worker void setGreen(unsigned char base, unsigned int length, unsigned char* lutValues); 4111*e1eccf28SAndroid Build Coastguard Worker /** 4112*e1eccf28SAndroid Build Coastguard Worker * Sets entries in LUT for the blue channel. 4113*e1eccf28SAndroid Build Coastguard Worker * @param[in] base base of region to update 4114*e1eccf28SAndroid Build Coastguard Worker * @param[in] length length of region to update 4115*e1eccf28SAndroid Build Coastguard Worker * @param[in] lutValues LUT values to use 4116*e1eccf28SAndroid Build Coastguard Worker */ 4117*e1eccf28SAndroid Build Coastguard Worker void setBlue(unsigned char base, unsigned int length, unsigned char* lutValues); 4118*e1eccf28SAndroid Build Coastguard Worker /** 4119*e1eccf28SAndroid Build Coastguard Worker * Sets entries in LUT for the alpha channel. 4120*e1eccf28SAndroid Build Coastguard Worker * @param[in] base base of region to update 4121*e1eccf28SAndroid Build Coastguard Worker * @param[in] length length of region to update 4122*e1eccf28SAndroid Build Coastguard Worker * @param[in] lutValues LUT values to use 4123*e1eccf28SAndroid Build Coastguard Worker */ 4124*e1eccf28SAndroid Build Coastguard Worker void setAlpha(unsigned char base, unsigned int length, unsigned char* lutValues); 4125*e1eccf28SAndroid Build Coastguard Worker virtual ~ScriptIntrinsicLUT(); 4126*e1eccf28SAndroid Build Coastguard Worker }; 4127*e1eccf28SAndroid Build Coastguard Worker 4128*e1eccf28SAndroid Build Coastguard Worker /** 4129*e1eccf28SAndroid Build Coastguard Worker * Intrinsic for performing a resize of a 2D allocation. 4130*e1eccf28SAndroid Build Coastguard Worker */ 4131*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsicResize : public ScriptIntrinsic { 4132*e1eccf28SAndroid Build Coastguard Worker private: 4133*e1eccf28SAndroid Build Coastguard Worker sp<Allocation> mInput; 4134*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsicResize(sp<RS> rs, sp<const Element> e); 4135*e1eccf28SAndroid Build Coastguard Worker public: 4136*e1eccf28SAndroid Build Coastguard Worker /** 4137*e1eccf28SAndroid Build Coastguard Worker * Supported Element types are U8_4. Default lookup table is identity. 4138*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 4139*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element 4140*e1eccf28SAndroid Build Coastguard Worker * @return new ScriptIntrinsic 4141*e1eccf28SAndroid Build Coastguard Worker */ 4142*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsicResize> create(const sp<RS>& rs); 4143*e1eccf28SAndroid Build Coastguard Worker 4144*e1eccf28SAndroid Build Coastguard Worker /** 4145*e1eccf28SAndroid Build Coastguard Worker * Resize copy the input allocation to the output specified. The 4146*e1eccf28SAndroid Build Coastguard Worker * Allocation is rescaled if necessary using bi-cubic 4147*e1eccf28SAndroid Build Coastguard Worker * interpolation. 4148*e1eccf28SAndroid Build Coastguard Worker * @param[in] ain input Allocation 4149*e1eccf28SAndroid Build Coastguard Worker * @param[in] aout output Allocation 4150*e1eccf28SAndroid Build Coastguard Worker */ 4151*e1eccf28SAndroid Build Coastguard Worker void forEach_bicubic(const sp<Allocation>& aout); 4152*e1eccf28SAndroid Build Coastguard Worker 4153*e1eccf28SAndroid Build Coastguard Worker /** 4154*e1eccf28SAndroid Build Coastguard Worker * Set the input of the resize. 4155*e1eccf28SAndroid Build Coastguard Worker * @param[in] lut new lookup table 4156*e1eccf28SAndroid Build Coastguard Worker */ 4157*e1eccf28SAndroid Build Coastguard Worker void setInput(const sp<Allocation>& ain); 4158*e1eccf28SAndroid Build Coastguard Worker }; 4159*e1eccf28SAndroid Build Coastguard Worker 4160*e1eccf28SAndroid Build Coastguard Worker /** 4161*e1eccf28SAndroid Build Coastguard Worker * Intrinsic for converting an Android YUV buffer to RGB. 4162*e1eccf28SAndroid Build Coastguard Worker * 4163*e1eccf28SAndroid Build Coastguard Worker * The input allocation should be supplied in a supported YUV format 4164*e1eccf28SAndroid Build Coastguard Worker * as a YUV element Allocation. The output is RGBA; the alpha channel 4165*e1eccf28SAndroid Build Coastguard Worker * will be set to 255. 4166*e1eccf28SAndroid Build Coastguard Worker */ 4167*e1eccf28SAndroid Build Coastguard Worker class ScriptIntrinsicYuvToRGB : public ScriptIntrinsic { 4168*e1eccf28SAndroid Build Coastguard Worker private: 4169*e1eccf28SAndroid Build Coastguard Worker ScriptIntrinsicYuvToRGB(sp<RS> rs, sp<const Element> e); 4170*e1eccf28SAndroid Build Coastguard Worker public: 4171*e1eccf28SAndroid Build Coastguard Worker /** 4172*e1eccf28SAndroid Build Coastguard Worker * Create an intrinsic for converting YUV to RGB. 4173*e1eccf28SAndroid Build Coastguard Worker * 4174*e1eccf28SAndroid Build Coastguard Worker * Supported elements types are U8_4. 4175*e1eccf28SAndroid Build Coastguard Worker * 4176*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs The RenderScript context 4177*e1eccf28SAndroid Build Coastguard Worker * @param[in] e Element type for output 4178*e1eccf28SAndroid Build Coastguard Worker * 4179*e1eccf28SAndroid Build Coastguard Worker * @return ScriptIntrinsicYuvToRGB 4180*e1eccf28SAndroid Build Coastguard Worker */ 4181*e1eccf28SAndroid Build Coastguard Worker static sp<ScriptIntrinsicYuvToRGB> create(const sp<RS>& rs, const sp<const Element>& e); 4182*e1eccf28SAndroid Build Coastguard Worker /** 4183*e1eccf28SAndroid Build Coastguard Worker * Set the input YUV allocation. 4184*e1eccf28SAndroid Build Coastguard Worker * 4185*e1eccf28SAndroid Build Coastguard Worker * @param[in] ain The input allocation. 4186*e1eccf28SAndroid Build Coastguard Worker */ 4187*e1eccf28SAndroid Build Coastguard Worker void setInput(const sp<Allocation>& in); 4188*e1eccf28SAndroid Build Coastguard Worker 4189*e1eccf28SAndroid Build Coastguard Worker /** 4190*e1eccf28SAndroid Build Coastguard Worker * Convert the image to RGB. 4191*e1eccf28SAndroid Build Coastguard Worker * 4192*e1eccf28SAndroid Build Coastguard Worker * @param[in] aout Output allocation. Must match creation element 4193*e1eccf28SAndroid Build Coastguard Worker * type. 4194*e1eccf28SAndroid Build Coastguard Worker */ 4195*e1eccf28SAndroid Build Coastguard Worker void forEach(const sp<Allocation>& out); 4196*e1eccf28SAndroid Build Coastguard Worker 4197*e1eccf28SAndroid Build Coastguard Worker }; 4198*e1eccf28SAndroid Build Coastguard Worker 4199*e1eccf28SAndroid Build Coastguard Worker /** 4200*e1eccf28SAndroid Build Coastguard Worker * Sampler object that defines how Allocations can be read as textures 4201*e1eccf28SAndroid Build Coastguard Worker * within a kernel. Samplers are used in conjunction with the rsSample 4202*e1eccf28SAndroid Build Coastguard Worker * runtime function to return values from normalized coordinates. 4203*e1eccf28SAndroid Build Coastguard Worker * 4204*e1eccf28SAndroid Build Coastguard Worker * Any Allocation used with a Sampler must have been created with 4205*e1eccf28SAndroid Build Coastguard Worker * RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE; using a Sampler on an 4206*e1eccf28SAndroid Build Coastguard Worker * Allocation that was not created with 4207*e1eccf28SAndroid Build Coastguard Worker * RS_ALLOCATION_USAGE_GRAPHICS_TEXTURE is undefined. 4208*e1eccf28SAndroid Build Coastguard Worker **/ 4209*e1eccf28SAndroid Build Coastguard Worker class Sampler : public BaseObj { 4210*e1eccf28SAndroid Build Coastguard Worker private: 4211*e1eccf28SAndroid Build Coastguard Worker Sampler(sp<RS> rs, void* id); 4212*e1eccf28SAndroid Build Coastguard Worker Sampler(sp<RS> rs, void* id, RsSamplerValue min, RsSamplerValue mag, 4213*e1eccf28SAndroid Build Coastguard Worker RsSamplerValue wrapS, RsSamplerValue wrapT, float anisotropy); 4214*e1eccf28SAndroid Build Coastguard Worker RsSamplerValue mMin; 4215*e1eccf28SAndroid Build Coastguard Worker RsSamplerValue mMag; 4216*e1eccf28SAndroid Build Coastguard Worker RsSamplerValue mWrapS; 4217*e1eccf28SAndroid Build Coastguard Worker RsSamplerValue mWrapT; 4218*e1eccf28SAndroid Build Coastguard Worker float mAniso; 4219*e1eccf28SAndroid Build Coastguard Worker 4220*e1eccf28SAndroid Build Coastguard Worker public: 4221*e1eccf28SAndroid Build Coastguard Worker /** 4222*e1eccf28SAndroid Build Coastguard Worker * Creates a non-standard Sampler. 4223*e1eccf28SAndroid Build Coastguard Worker * @param[in] rs RenderScript context 4224*e1eccf28SAndroid Build Coastguard Worker * @param[in] min minification 4225*e1eccf28SAndroid Build Coastguard Worker * @param[in] mag magnification 4226*e1eccf28SAndroid Build Coastguard Worker * @param[in] wrapS S wrapping mode 4227*e1eccf28SAndroid Build Coastguard Worker * @param[in] wrapT T wrapping mode 4228*e1eccf28SAndroid Build Coastguard Worker * @param[in] anisotropy anisotropy setting 4229*e1eccf28SAndroid Build Coastguard Worker */ 4230*e1eccf28SAndroid Build Coastguard Worker static sp<Sampler> create(const sp<RS>& rs, RsSamplerValue min, RsSamplerValue mag, RsSamplerValue wrapS, RsSamplerValue wrapT, float anisotropy); 4231*e1eccf28SAndroid Build Coastguard Worker 4232*e1eccf28SAndroid Build Coastguard Worker /** 4233*e1eccf28SAndroid Build Coastguard Worker * @return minification setting for the sampler 4234*e1eccf28SAndroid Build Coastguard Worker */ 4235*e1eccf28SAndroid Build Coastguard Worker RsSamplerValue getMinification(); 4236*e1eccf28SAndroid Build Coastguard Worker /** 4237*e1eccf28SAndroid Build Coastguard Worker * @return magnification setting for the sampler 4238*e1eccf28SAndroid Build Coastguard Worker */ 4239*e1eccf28SAndroid Build Coastguard Worker RsSamplerValue getMagnification(); 4240*e1eccf28SAndroid Build Coastguard Worker /** 4241*e1eccf28SAndroid Build Coastguard Worker * @return S wrapping mode for the sampler 4242*e1eccf28SAndroid Build Coastguard Worker */ 4243*e1eccf28SAndroid Build Coastguard Worker RsSamplerValue getWrapS(); 4244*e1eccf28SAndroid Build Coastguard Worker /** 4245*e1eccf28SAndroid Build Coastguard Worker * @return T wrapping mode for the sampler 4246*e1eccf28SAndroid Build Coastguard Worker */ 4247*e1eccf28SAndroid Build Coastguard Worker RsSamplerValue getWrapT(); 4248*e1eccf28SAndroid Build Coastguard Worker /** 4249*e1eccf28SAndroid Build Coastguard Worker * @return anisotropy setting for the sampler 4250*e1eccf28SAndroid Build Coastguard Worker */ 4251*e1eccf28SAndroid Build Coastguard Worker float getAnisotropy(); 4252*e1eccf28SAndroid Build Coastguard Worker 4253*e1eccf28SAndroid Build Coastguard Worker /** 4254*e1eccf28SAndroid Build Coastguard Worker * Retrieve a sampler with min and mag set to nearest and wrap modes set to 4255*e1eccf28SAndroid Build Coastguard Worker * clamp. 4256*e1eccf28SAndroid Build Coastguard Worker * 4257*e1eccf28SAndroid Build Coastguard Worker * @param rs Context to which the sampler will belong. 4258*e1eccf28SAndroid Build Coastguard Worker * 4259*e1eccf28SAndroid Build Coastguard Worker * @return Sampler 4260*e1eccf28SAndroid Build Coastguard Worker */ 4261*e1eccf28SAndroid Build Coastguard Worker static sp<const Sampler> CLAMP_NEAREST(const sp<RS> &rs); 4262*e1eccf28SAndroid Build Coastguard Worker /** 4263*e1eccf28SAndroid Build Coastguard Worker * Retrieve a sampler with min and mag set to linear and wrap modes set to 4264*e1eccf28SAndroid Build Coastguard Worker * clamp. 4265*e1eccf28SAndroid Build Coastguard Worker * 4266*e1eccf28SAndroid Build Coastguard Worker * @param rs Context to which the sampler will belong. 4267*e1eccf28SAndroid Build Coastguard Worker * 4268*e1eccf28SAndroid Build Coastguard Worker * @return Sampler 4269*e1eccf28SAndroid Build Coastguard Worker */ 4270*e1eccf28SAndroid Build Coastguard Worker static sp<const Sampler> CLAMP_LINEAR(const sp<RS> &rs); 4271*e1eccf28SAndroid Build Coastguard Worker /** 4272*e1eccf28SAndroid Build Coastguard Worker * Retrieve a sampler with mag set to linear, min linear mipmap linear, and 4273*e1eccf28SAndroid Build Coastguard Worker * wrap modes set to clamp. 4274*e1eccf28SAndroid Build Coastguard Worker * 4275*e1eccf28SAndroid Build Coastguard Worker * @param rs Context to which the sampler will belong. 4276*e1eccf28SAndroid Build Coastguard Worker * 4277*e1eccf28SAndroid Build Coastguard Worker * @return Sampler 4278*e1eccf28SAndroid Build Coastguard Worker */ 4279*e1eccf28SAndroid Build Coastguard Worker static sp<const Sampler> CLAMP_LINEAR_MIP_LINEAR(const sp<RS> &rs); 4280*e1eccf28SAndroid Build Coastguard Worker /** 4281*e1eccf28SAndroid Build Coastguard Worker * Retrieve a sampler with min and mag set to nearest and wrap modes set to 4282*e1eccf28SAndroid Build Coastguard Worker * wrap. 4283*e1eccf28SAndroid Build Coastguard Worker * 4284*e1eccf28SAndroid Build Coastguard Worker * @param rs Context to which the sampler will belong. 4285*e1eccf28SAndroid Build Coastguard Worker * 4286*e1eccf28SAndroid Build Coastguard Worker * @return Sampler 4287*e1eccf28SAndroid Build Coastguard Worker */ 4288*e1eccf28SAndroid Build Coastguard Worker static sp<const Sampler> WRAP_NEAREST(const sp<RS> &rs); 4289*e1eccf28SAndroid Build Coastguard Worker /** 4290*e1eccf28SAndroid Build Coastguard Worker * Retrieve a sampler with min and mag set to linear and wrap modes set to 4291*e1eccf28SAndroid Build Coastguard Worker * wrap. 4292*e1eccf28SAndroid Build Coastguard Worker * 4293*e1eccf28SAndroid Build Coastguard Worker * @param rs Context to which the sampler will belong. 4294*e1eccf28SAndroid Build Coastguard Worker * 4295*e1eccf28SAndroid Build Coastguard Worker * @return Sampler 4296*e1eccf28SAndroid Build Coastguard Worker */ 4297*e1eccf28SAndroid Build Coastguard Worker static sp<const Sampler> WRAP_LINEAR(const sp<RS> &rs); 4298*e1eccf28SAndroid Build Coastguard Worker /** 4299*e1eccf28SAndroid Build Coastguard Worker * Retrieve a sampler with mag set to linear, min linear mipmap linear, and 4300*e1eccf28SAndroid Build Coastguard Worker * wrap modes set to wrap. 4301*e1eccf28SAndroid Build Coastguard Worker * 4302*e1eccf28SAndroid Build Coastguard Worker * @param rs Context to which the sampler will belong. 4303*e1eccf28SAndroid Build Coastguard Worker * 4304*e1eccf28SAndroid Build Coastguard Worker * @return Sampler 4305*e1eccf28SAndroid Build Coastguard Worker */ 4306*e1eccf28SAndroid Build Coastguard Worker static sp<const Sampler> WRAP_LINEAR_MIP_LINEAR(const sp<RS> &rs); 4307*e1eccf28SAndroid Build Coastguard Worker /** 4308*e1eccf28SAndroid Build Coastguard Worker * Retrieve a sampler with min and mag set to nearest and wrap modes set to 4309*e1eccf28SAndroid Build Coastguard Worker * mirrored repeat. 4310*e1eccf28SAndroid Build Coastguard Worker * 4311*e1eccf28SAndroid Build Coastguard Worker * @param rs Context to which the sampler will belong. 4312*e1eccf28SAndroid Build Coastguard Worker * 4313*e1eccf28SAndroid Build Coastguard Worker * @return Sampler 4314*e1eccf28SAndroid Build Coastguard Worker */ 4315*e1eccf28SAndroid Build Coastguard Worker static sp<const Sampler> MIRRORED_REPEAT_NEAREST(const sp<RS> &rs); 4316*e1eccf28SAndroid Build Coastguard Worker /** 4317*e1eccf28SAndroid Build Coastguard Worker * Retrieve a sampler with min and mag set to linear and wrap modes set to 4318*e1eccf28SAndroid Build Coastguard Worker * mirrored repeat. 4319*e1eccf28SAndroid Build Coastguard Worker * 4320*e1eccf28SAndroid Build Coastguard Worker * @param rs Context to which the sampler will belong. 4321*e1eccf28SAndroid Build Coastguard Worker * 4322*e1eccf28SAndroid Build Coastguard Worker * @return Sampler 4323*e1eccf28SAndroid Build Coastguard Worker */ 4324*e1eccf28SAndroid Build Coastguard Worker static sp<const Sampler> MIRRORED_REPEAT_LINEAR(const sp<RS> &rs); 4325*e1eccf28SAndroid Build Coastguard Worker /** 4326*e1eccf28SAndroid Build Coastguard Worker * Retrieve a sampler with min and mag set to linear and wrap modes set to 4327*e1eccf28SAndroid Build Coastguard Worker * mirrored repeat. 4328*e1eccf28SAndroid Build Coastguard Worker * 4329*e1eccf28SAndroid Build Coastguard Worker * @param rs Context to which the sampler will belong. 4330*e1eccf28SAndroid Build Coastguard Worker * 4331*e1eccf28SAndroid Build Coastguard Worker * @return Sampler 4332*e1eccf28SAndroid Build Coastguard Worker */ 4333*e1eccf28SAndroid Build Coastguard Worker static sp<const Sampler> MIRRORED_REPEAT_LINEAR_MIP_LINEAR(const sp<RS> &rs); 4334*e1eccf28SAndroid Build Coastguard Worker 4335*e1eccf28SAndroid Build Coastguard Worker }; 4336*e1eccf28SAndroid Build Coastguard Worker 4337*e1eccf28SAndroid Build Coastguard Worker } // namespace RSC 4338*e1eccf28SAndroid Build Coastguard Worker 4339*e1eccf28SAndroid Build Coastguard Worker } // namespace android 4340*e1eccf28SAndroid Build Coastguard Worker 4341*e1eccf28SAndroid Build Coastguard Worker #endif 4342