1/* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.support.v8.renderscript; 18 19import android.support.v8.renderscript.RenderScript; 20 21/** 22 * Utility class for packing arguments and structures from Android system objects to 23 * RenderScript objects. 24 * 25 * This class is only intended to be used to support the 26 * reflected code generated by the RS tool chain. It should not 27 * be called directly. 28 * 29 **/ 30public class FieldPackerThunker { 31 private android.renderscript.FieldPacker mN; 32 private int mPos; 33 34 public FieldPackerThunker(int len) { 35 mN = new android.renderscript.FieldPacker(len); 36 mPos = 0; 37 } 38 39 void align(int v) { 40 mN.align(v); 41 while ((mPos & (v - 1)) != 0) { 42 mPos++; 43 } 44 } 45 46 void reset() { 47 mN.reset(); 48 mPos = 0; 49 } 50 51 void reset(int i) { 52 mN.reset(i); 53 mPos = i; 54 } 55 56 public void skip(int i) { 57 mN.skip(i); 58 mPos += i; 59 } 60 61 public void addI8(byte v) { 62 mN.addI8(v); 63 mPos++; 64 } 65 66 public void addI16(short v) { 67 mN.addI16(v); 68 mPos += 2; 69 } 70 71 public void addI32(int v) { 72 mN.addI32(v); 73 mPos += 4; 74 } 75 76 public void addI64(long v) { 77 mN.addI64(v); 78 mPos += 8; 79 } 80 81 public void addU8(short v) { 82 mN.addU8(v); 83 mPos++; 84 } 85 86 public void addU16(int v) { 87 mN.addU16(v); 88 mPos += 2; 89 } 90 91 public void addU32(long v) { 92 mN.addU32(v); 93 mPos += 4; 94 } 95 96 public void addU64(long v) { 97 mN.addU64(v); 98 mPos += 8; 99 } 100 101 public void addF32(float v) { 102 mN.addF32(v); 103 mPos += 4; 104 } 105 106 public void addF64(double v) { 107 mN.addF64(v); 108 mPos += 8; 109 } 110 111 public void addObj(BaseObj obj) { 112 if (obj != null) { 113 mN.addObj(obj.getNObj()); 114 } else { 115 mN.addObj(null); 116 } 117 mPos += 4; // Compat lib only works in 32-bit mode, so objects are 4 bytes. 118 } 119 120 public void addF32(Float2 v) { 121 mN.addF32(new android.renderscript.Float2(v.x, v.y)); 122 mPos += 8; 123 } 124 public void addF32(Float3 v) { 125 mN.addF32(new android.renderscript.Float3(v.x, v.y, v.z)); 126 mPos += 12; 127 } 128 public void addF32(Float4 v) { 129 mN.addF32(new android.renderscript.Float4(v.x, v.y, v.z, v.w)); 130 mPos += 16; 131 } 132 133 public void addF64(Double2 v) { 134 mN.addF64(new android.renderscript.Double2(v.x, v.y)); 135 mPos += 16; 136 } 137 public void addF64(Double3 v) { 138 mN.addF64(new android.renderscript.Double3(v.x, v.y, v.z)); 139 mPos += 24; 140 } 141 public void addF64(Double4 v) { 142 mN.addF64(new android.renderscript.Double4(v.x, v.y, v.z, v.w)); 143 mPos += 32; 144 } 145 146 public void addI8(Byte2 v) { 147 mN.addI8(new android.renderscript.Byte2(v.x, v.y)); 148 mPos += 2; 149 } 150 public void addI8(Byte3 v) { 151 mN.addI8(new android.renderscript.Byte3(v.x, v.y, v.z)); 152 mPos += 3; 153 } 154 public void addI8(Byte4 v) { 155 mN.addI8(new android.renderscript.Byte4(v.x, v.y, v.z, v.w)); 156 mPos += 4; 157 } 158 159 public void addU8(Short2 v) { 160 mN.addU8(new android.renderscript.Short2(v.x, v.y)); 161 mPos += 2; 162 } 163 public void addU8(Short3 v) { 164 mN.addU8(new android.renderscript.Short3(v.x, v.y, v.z)); 165 mPos += 3; 166 } 167 public void addU8(Short4 v) { 168 mN.addU8(new android.renderscript.Short4(v.x, v.y, v.z, v.w)); 169 mPos += 4; 170 } 171 172 public void addI16(Short2 v) { 173 mN.addI16(new android.renderscript.Short2(v.x, v.y)); 174 mPos += 4; 175 } 176 public void addI16(Short3 v) { 177 mN.addI16(new android.renderscript.Short3(v.x, v.y, v.z)); 178 mPos += 6; 179 } 180 public void addI16(Short4 v) { 181 mN.addI16(new android.renderscript.Short4(v.x, v.y, v.z, v.w)); 182 mPos += 8; 183 } 184 185 public void addU16(Int2 v) { 186 mN.addU16(new android.renderscript.Int2(v.x, v.y)); 187 mPos += 4; 188 } 189 public void addU16(Int3 v) { 190 mN.addU16(new android.renderscript.Int3(v.x, v.y, v.z)); 191 mPos += 6; 192 } 193 public void addU16(Int4 v) { 194 mN.addU16(new android.renderscript.Int4(v.x, v.y, v.z, v.w)); 195 mPos += 8; 196 } 197 198 public void addI32(Int2 v) { 199 mN.addI32(new android.renderscript.Int2(v.x, v.y)); 200 mPos += 8; 201 } 202 public void addI32(Int3 v) { 203 mN.addI32(new android.renderscript.Int3(v.x, v.y, v.z)); 204 mPos += 12; 205 } 206 public void addI32(Int4 v) { 207 mN.addI32(new android.renderscript.Int4(v.x, v.y, v.z, v.w)); 208 mPos += 16; 209 } 210 211 public void addU32(Long2 v) { 212 mN.addU32(new android.renderscript.Long2(v.x, v.y)); 213 mPos += 8; 214 } 215 public void addU32(Long3 v) { 216 mN.addU32(new android.renderscript.Long3(v.x, v.y, v.z)); 217 mPos += 12; 218 } 219 public void addU32(Long4 v) { 220 mN.addU32(new android.renderscript.Long4(v.x, v.y, v.z, v.w)); 221 mPos += 16; 222 } 223 224 public void addI64(Long2 v) { 225 mN.addI64(new android.renderscript.Long2(v.x, v.y)); 226 mPos += 16; 227 } 228 public void addI64(Long3 v) { 229 mN.addI64(new android.renderscript.Long3(v.x, v.y, v.z)); 230 mPos += 24; 231 } 232 public void addI64(Long4 v) { 233 mN.addI64(new android.renderscript.Long4(v.x, v.y, v.z, v.w)); 234 mPos += 32; 235 } 236 237 public void addU64(Long2 v) { 238 mN.addU64(new android.renderscript.Long2(v.x, v.y)); 239 mPos += 16; 240 } 241 public void addU64(Long3 v) { 242 mN.addU64(new android.renderscript.Long3(v.x, v.y, v.z)); 243 mPos += 24; 244 } 245 public void addU64(Long4 v) { 246 mN.addU64(new android.renderscript.Long4(v.x, v.y, v.z, v.w)); 247 mPos += 32; 248 } 249 250 public void addMatrix(Matrix4f v) { 251 mN.addMatrix(new android.renderscript.Matrix4f(v.getArray())); 252 mPos += (4 * 4 * 4); 253 } 254 255 public void addMatrix(Matrix3f v) { 256 mN.addMatrix(new android.renderscript.Matrix3f(v.getArray())); 257 mPos += (3 * 3 * 4); 258 } 259 260 public void addMatrix(Matrix2f v) { 261 mN.addMatrix(new android.renderscript.Matrix2f(v.getArray())); 262 mPos += (2 * 2 * 4); 263 } 264 265 public void addBoolean(boolean v) { 266 mN.addBoolean(v); 267 mPos++; 268 } 269 270 public final byte[] getData() { 271 return mN.getData(); 272 } 273 274 // We must compute our own mPos, since this API is not available in older target APIs. 275 public int getPos() { 276 return mPos; 277 } 278} 279 280 281