/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.support.v8.renderscript;
import android.support.v8.renderscript.RenderScript;
/**
* Utility class for packing arguments and structures from Android system objects to
* RenderScript objects.
*
* This class is only intended to be used to support the
* reflected code generated by the RS tool chain. It should not
* be called directly.
*
**/
public class FieldPackerThunker {
private android.renderscript.FieldPacker mN;
private int mPos;
public FieldPackerThunker(int len) {
mN = new android.renderscript.FieldPacker(len);
mPos = 0;
}
void align(int v) {
mN.align(v);
while ((mPos & (v - 1)) != 0) {
mPos++;
}
}
void reset() {
mN.reset();
mPos = 0;
}
void reset(int i) {
mN.reset(i);
mPos = i;
}
public void skip(int i) {
mN.skip(i);
mPos += i;
}
public void addI8(byte v) {
mN.addI8(v);
mPos++;
}
public void addI16(short v) {
mN.addI16(v);
mPos += 2;
}
public void addI32(int v) {
mN.addI32(v);
mPos += 4;
}
public void addI64(long v) {
mN.addI64(v);
mPos += 8;
}
public void addU8(short v) {
mN.addU8(v);
mPos++;
}
public void addU16(int v) {
mN.addU16(v);
mPos += 2;
}
public void addU32(long v) {
mN.addU32(v);
mPos += 4;
}
public void addU64(long v) {
mN.addU64(v);
mPos += 8;
}
public void addF32(float v) {
mN.addF32(v);
mPos += 4;
}
public void addF64(double v) {
mN.addF64(v);
mPos += 8;
}
public void addObj(BaseObj obj) {
if (obj != null) {
mN.addObj(obj.getNObj());
} else {
mN.addObj(null);
}
mPos += 4; // Compat lib only works in 32-bit mode, so objects are 4 bytes.
}
public void addF32(Float2 v) {
mN.addF32(new android.renderscript.Float2(v.x, v.y));
mPos += 8;
}
public void addF32(Float3 v) {
mN.addF32(new android.renderscript.Float3(v.x, v.y, v.z));
mPos += 12;
}
public void addF32(Float4 v) {
mN.addF32(new android.renderscript.Float4(v.x, v.y, v.z, v.w));
mPos += 16;
}
public void addF64(Double2 v) {
mN.addF64(new android.renderscript.Double2(v.x, v.y));
mPos += 16;
}
public void addF64(Double3 v) {
mN.addF64(new android.renderscript.Double3(v.x, v.y, v.z));
mPos += 24;
}
public void addF64(Double4 v) {
mN.addF64(new android.renderscript.Double4(v.x, v.y, v.z, v.w));
mPos += 32;
}
public void addI8(Byte2 v) {
mN.addI8(new android.renderscript.Byte2(v.x, v.y));
mPos += 2;
}
public void addI8(Byte3 v) {
mN.addI8(new android.renderscript.Byte3(v.x, v.y, v.z));
mPos += 3;
}
public void addI8(Byte4 v) {
mN.addI8(new android.renderscript.Byte4(v.x, v.y, v.z, v.w));
mPos += 4;
}
public void addU8(Short2 v) {
mN.addU8(new android.renderscript.Short2(v.x, v.y));
mPos += 2;
}
public void addU8(Short3 v) {
mN.addU8(new android.renderscript.Short3(v.x, v.y, v.z));
mPos += 3;
}
public void addU8(Short4 v) {
mN.addU8(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
mPos += 4;
}
public void addI16(Short2 v) {
mN.addI16(new android.renderscript.Short2(v.x, v.y));
mPos += 4;
}
public void addI16(Short3 v) {
mN.addI16(new android.renderscript.Short3(v.x, v.y, v.z));
mPos += 6;
}
public void addI16(Short4 v) {
mN.addI16(new android.renderscript.Short4(v.x, v.y, v.z, v.w));
mPos += 8;
}
public void addU16(Int2 v) {
mN.addU16(new android.renderscript.Int2(v.x, v.y));
mPos += 4;
}
public void addU16(Int3 v) {
mN.addU16(new android.renderscript.Int3(v.x, v.y, v.z));
mPos += 6;
}
public void addU16(Int4 v) {
mN.addU16(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
mPos += 8;
}
public void addI32(Int2 v) {
mN.addI32(new android.renderscript.Int2(v.x, v.y));
mPos += 8;
}
public void addI32(Int3 v) {
mN.addI32(new android.renderscript.Int3(v.x, v.y, v.z));
mPos += 12;
}
public void addI32(Int4 v) {
mN.addI32(new android.renderscript.Int4(v.x, v.y, v.z, v.w));
mPos += 16;
}
public void addU32(Long2 v) {
mN.addU32(new android.renderscript.Long2(v.x, v.y));
mPos += 8;
}
public void addU32(Long3 v) {
mN.addU32(new android.renderscript.Long3(v.x, v.y, v.z));
mPos += 12;
}
public void addU32(Long4 v) {
mN.addU32(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
mPos += 16;
}
public void addI64(Long2 v) {
mN.addI64(new android.renderscript.Long2(v.x, v.y));
mPos += 16;
}
public void addI64(Long3 v) {
mN.addI64(new android.renderscript.Long3(v.x, v.y, v.z));
mPos += 24;
}
public void addI64(Long4 v) {
mN.addI64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
mPos += 32;
}
public void addU64(Long2 v) {
mN.addU64(new android.renderscript.Long2(v.x, v.y));
mPos += 16;
}
public void addU64(Long3 v) {
mN.addU64(new android.renderscript.Long3(v.x, v.y, v.z));
mPos += 24;
}
public void addU64(Long4 v) {
mN.addU64(new android.renderscript.Long4(v.x, v.y, v.z, v.w));
mPos += 32;
}
public void addMatrix(Matrix4f v) {
mN.addMatrix(new android.renderscript.Matrix4f(v.getArray()));
mPos += (4 * 4 * 4);
}
public void addMatrix(Matrix3f v) {
mN.addMatrix(new android.renderscript.Matrix3f(v.getArray()));
mPos += (3 * 3 * 4);
}
public void addMatrix(Matrix2f v) {
mN.addMatrix(new android.renderscript.Matrix2f(v.getArray()));
mPos += (2 * 2 * 4);
}
public void addBoolean(boolean v) {
mN.addBoolean(v);
mPos++;
}
public final byte[] getData() {
return mN.getData();
}
// We must compute our own mPos, since this API is not available in older target APIs.
public int getPos() {
return mPos;
}
}
|