xref: /aosp_15_r20/frameworks/rs/cpp/rsCppStructs.h (revision e1eccf28f96817838ad6867f7f39d2351ec11f56)
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