1221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams/*
269cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams * Copyright (C) 2012 The Android Open Source Project
3221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *
4221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * you may not use this file except in compliance with the License.
6221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * You may obtain a copy of the License at
7221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *
8221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *
10221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * Unless required by applicable law or agreed to in writing, software
11221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * See the License for the specific language governing permissions and
14221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * limitations under the License.
15221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams */
16221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
17b2e3dc51dcbbe52b5e72d9c6a16de7000de70edfJason Sams#ifndef __ANDROID_ALLOCATION_H__
18b2e3dc51dcbbe52b5e72d9c6a16de7000de70edfJason Sams#define __ANDROID_ALLOCATION_H__
19221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
20221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include <pthread.h>
21221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include <rs.h>
22221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
23221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include "RenderScript.h"
24221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include "Type.h"
25221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include "Element.h"
26221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
2769cccdf0659a193d6a75420ec745421fb5c436e6Jason Samsnamespace android {
2869cccdf0659a193d6a75420ec745421fb5c436e6Jason Samsnamespace renderscriptCpp {
2969cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams
30b2e3dc51dcbbe52b5e72d9c6a16de7000de70edfJason Samsclass Allocation : public BaseObj {
31221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsprotected:
3269cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    android::sp<const Type> mType;
33221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mUsage;
3469cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    android::sp<Allocation> mAdaptedAllocation;
35221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
36221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool mConstrainedLOD;
37221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool mConstrainedFace;
38221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool mConstrainedY;
39221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool mConstrainedZ;
40221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool mReadAllowed;
41221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool mWriteAllowed;
42221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mSelectedY;
43221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mSelectedZ;
44221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mSelectedLOD;
45221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    RsAllocationCubemapFace mSelectedFace;
46221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
47221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mCurrentDimX;
48221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mCurrentDimY;
49221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mCurrentDimZ;
50221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mCurrentCount;
51221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
52221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
53221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void * getIDSafe() const;
5469cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    void updateCacheInfo(sp<const Type> t);
55221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
5669cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    Allocation(void *id, RenderScript *rs, sp<const Type> t, uint32_t usage);
57221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
58221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void validateIsInt32();
59221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void validateIsInt16();
60221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void validateIsInt8();
61221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void validateIsFloat32();
62221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void validateIsObject();
63221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
64221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    virtual void updateFromNative();
65221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
66221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void validate2DRange(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h);
67221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
68221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samspublic:
6969cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    android::sp<const Type> getType() {
70221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        return mType;
71221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
72221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
73221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void syncAll(RsAllocationUsageType srcLocation);
74221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void ioSendOutput();
75221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void ioGetInput();
76221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
77221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyFrom(BaseObj[] d);
78221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyFromUnchecked(int[] d);
79221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyFromUnchecked(short[] d);
80221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyFromUnchecked(byte[] d);
81221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyFromUnchecked(float[] d);
82221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyFrom(int[] d);
83221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyFrom(short[] d);
84221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyFrom(byte[] d);
85221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyFrom(float[] d);
86221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void setFromFieldPacker(int xoff, FieldPacker fp);
87221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void setFromFieldPacker(int xoff, int component_number, FieldPacker fp);
88221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void generateMipmaps();
89221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy1DRangeFromUnchecked(uint32_t off, size_t count, const void *data, size_t dataLen);
90221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy1DRangeFrom(uint32_t off, size_t count, const int32_t* d, size_t dataLen);
91221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy1DRangeFrom(uint32_t off, size_t count, const int16_t* d, size_t dataLen);
92221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy1DRangeFrom(uint32_t off, size_t count, const int8_t* d, size_t dataLen);
93221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy1DRangeFrom(uint32_t off, size_t count, const float* d, size_t dataLen);
94221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy1DRangeFrom(uint32_t off, size_t count, const Allocation *data, uint32_t dataOff);
95221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
96221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
97221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams                         const int32_t *data, size_t dataLen);
98221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
99221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams                         const int16_t *data, size_t dataLen);
100221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
101221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams                         const int8_t *data, size_t dataLen);
102221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
103221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams                         const float *data, size_t dataLen);
104221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
105221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams                         const Allocation *data, size_t dataLen,
106221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams                         uint32_t dataXoff, uint32_t dataYoff);
107221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
108221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyTo(byte[] d);
109221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyTo(short[] d);
110221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyTo(int[] d);
111221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void copyTo(float[] d);
112221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void resize(int dimX);
113221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void resize(int dimX, int dimY);
114221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
11569cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    static sp<Allocation> createTyped(RenderScript *rs, sp<const Type> type,
116221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams                                   RsAllocationMipmapControl mips, uint32_t usage);
11769cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    static sp<Allocation> createTyped(RenderScript *rs, sp<const Type> type,
118221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams                                   RsAllocationMipmapControl mips, uint32_t usage, void * pointer);
119221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
12069cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    static sp<Allocation> createTyped(RenderScript *rs, sp<const Type> type,
121221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams                                   uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT);
12269cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    static sp<Allocation> createSized(RenderScript *rs, sp<const Element> e, size_t count,
123221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams                                   uint32_t usage = RS_ALLOCATION_USAGE_SCRIPT);
124221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //SurfaceTexture *getSurfaceTexture();
125221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    //void setSurfaceTexture(SurfaceTexture *sur);
126221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
127221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams};
128221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
12969cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams}
13069cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams}
13169cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams
132b2e3dc51dcbbe52b5e72d9c6a16de7000de70edfJason Sams#endif
133