1eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams/*
2eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams * Copyright (C) 2011 The Android Open Source Project
3eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams *
4eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams * you may not use this file except in compliance with the License.
6eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams * You may obtain a copy of the License at
7eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams *
8eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams *
10eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams * Unless required by applicable law or agreed to in writing, software
11eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams * See the License for the specific language governing permissions and
14eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams * limitations under the License.
15eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams */
16eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
17eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#ifndef RSD_ALLOCATION_H
18eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#define RSD_ALLOCATION_H
19eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
20eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#include <rs_hal.h>
21eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#include <rsRuntime.h>
22807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams#include <rsAllocation.h>
23eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
24eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#include <GLES/gl.h>
25eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#include <GLES2/gl2.h>
26eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
27a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchoukclass RsdFrameBufferObj;
287ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsstruct ANativeWindowBuffer;
29a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
30eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsstruct DrvAllocation {
31eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Is this a legal structure to be used as a texture source.
32eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Initially this will require 1D or 2D and color data
33eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    uint32_t textureID;
34eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
35eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Is this a legal structure to be used as a vertex source.
36eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Initially this will require 1D and x(yzw).  Additional per element data
37eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // is allowed.
38eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    uint32_t bufferID;
39eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
40eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Is this a legal structure to be used as an FBO render target
41eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    uint32_t renderTargetID;
42eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
43eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    GLenum glTarget;
44a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams    GLenum glType;
45a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams    GLenum glFormat;
46a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams
47eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    bool uploadDeferred;
48a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
49a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    RsdFrameBufferObj * readBackFBO;
50b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    ANativeWindow *wnd;
517ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams    ANativeWindowBuffer *wndBuffer;
52807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
53807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams    struct LodState {
54807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        void * mallocPtr;
55807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        size_t stride;
56807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        uint32_t dimX;
57807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        uint32_t dimY;
58807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams        uint32_t dimZ;
59807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams    } lod[android::renderscript::Allocation::MAX_LOD];
60807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams    size_t faceOffset;
61807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams    uint32_t lodCount;
62807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams    uint32_t faceCount;
63807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
64807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
65eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams};
66eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
67a614ae175bbf97201b5e18984d814a1d3e86faa8Jason SamsGLenum rsdTypeToGLType(RsDataType t);
68a614ae175bbf97201b5e18984d814a1d3e86faa8Jason SamsGLenum rsdKindToGLFormat(RsDataKind k);
69a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams
70a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams
71eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsbool rsdAllocationInit(const android::renderscript::Context *rsc,
72eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       android::renderscript::Allocation *alloc,
73eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       bool forceZero);
74eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationDestroy(const android::renderscript::Context *rsc,
75eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          android::renderscript::Allocation *alloc);
76eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
77eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationResize(const android::renderscript::Context *rsc,
78eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
79eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Type *newType, bool zeroNew);
80eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationSyncAll(const android::renderscript::Context *rsc,
81eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          const android::renderscript::Allocation *alloc,
82eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          RsAllocationUsageType src);
83eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationMarkDirty(const android::renderscript::Context *rsc,
84eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                            const android::renderscript::Allocation *alloc);
8541e373d91a60043afa0f9abd026218b49cbc1201Jason Samsint32_t rsdAllocationInitSurfaceTexture(const android::renderscript::Context *rsc,
8641e373d91a60043afa0f9abd026218b49cbc1201Jason Sams                                        const android::renderscript::Allocation *alloc);
877ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsvoid rsdAllocationSetSurfaceTexture(const android::renderscript::Context *rsc,
887ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams                                    android::renderscript::Allocation *alloc, ANativeWindow *nw);
897ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsvoid rsdAllocationIoSend(const android::renderscript::Context *rsc,
907ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams                         android::renderscript::Allocation *alloc);
917ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsvoid rsdAllocationIoReceive(const android::renderscript::Context *rsc,
927ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams                            android::renderscript::Allocation *alloc);
93eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
94eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationData1D(const android::renderscript::Context *rsc,
95eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
96eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t xoff, uint32_t lod, uint32_t count,
97eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const void *data, uint32_t sizeBytes);
98eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationData2D(const android::renderscript::Context *rsc,
99eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
100eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face,
101eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t w, uint32_t h,
102eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const void *data, uint32_t sizeBytes);
103eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationData3D(const android::renderscript::Context *rsc,
104eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
105eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t xoff, uint32_t yoff, uint32_t zoff,
106eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t lod, RsAllocationCubemapFace face,
107eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t w, uint32_t h, uint32_t d, const void *data, uint32_t sizeBytes);
108eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
109807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsvoid rsdAllocationRead1D(const android::renderscript::Context *rsc,
110807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         const android::renderscript::Allocation *alloc,
111807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         uint32_t xoff, uint32_t lod, uint32_t count,
112807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         void *data, uint32_t sizeBytes);
113807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsvoid rsdAllocationRead2D(const android::renderscript::Context *rsc,
114807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         const android::renderscript::Allocation *alloc,
115807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face,
116807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         uint32_t w, uint32_t h,
117807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         void *data, uint32_t sizeBytes);
118807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsvoid rsdAllocationRead3D(const android::renderscript::Context *rsc,
119807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         const android::renderscript::Allocation *alloc,
120807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         uint32_t xoff, uint32_t yoff, uint32_t zoff,
121807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         uint32_t lod, RsAllocationCubemapFace face,
122807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         uint32_t w, uint32_t h, uint32_t d, void *data, uint32_t sizeBytes);
123807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
124807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsvoid * rsdAllocationLock1D(const android::renderscript::Context *rsc,
125807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                          const android::renderscript::Allocation *alloc);
126807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsvoid rsdAllocationUnlock1D(const android::renderscript::Context *rsc,
127807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                          const android::renderscript::Allocation *alloc);
128807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
129807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
13074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsdAllocationData1D_alloc(const android::renderscript::Context *rsc,
13174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *dstAlloc,
13274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t dstXoff, uint32_t dstLod, uint32_t count,
13374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *srcAlloc,
13474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcXoff, uint32_t srcLod);
13574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsdAllocationData2D_alloc(const android::renderscript::Context *rsc,
13674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *dstAlloc,
13774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod,
13874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h,
13974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *srcAlloc,
14074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
14174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               RsAllocationCubemapFace srcFace);
14274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsdAllocationData3D_alloc(const android::renderscript::Context *rsc,
14374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *dstAlloc,
14474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff,
14574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t dstLod, RsAllocationCubemapFace dstFace,
14674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t w, uint32_t h, uint32_t d,
14774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *srcAlloc,
14874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff,
14974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcLod, RsAllocationCubemapFace srcFace);
15074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
151eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationElementData1D(const android::renderscript::Context *rsc,
152eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                const android::renderscript::Allocation *alloc,
153eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                uint32_t x,
154eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                const void *data, uint32_t elementOff, uint32_t sizeBytes);
155eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationElementData2D(const android::renderscript::Context *rsc,
156eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                const android::renderscript::Allocation *alloc,
157eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                uint32_t x, uint32_t y,
158eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                const void *data, uint32_t elementOff, uint32_t sizeBytes);
159eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
16061a4bb734b91ced09fbfee4214c6f253cb66e5f0Jason Samsvoid rsdAllocationGenerateMipmaps(const android::renderscript::Context *rsc,
16161a4bb734b91ced09fbfee4214c6f253cb66e5f0Jason Sams                                  const android::renderscript::Allocation *alloc);
162eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
163eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
164eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
165eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#endif
166