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>
22eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
23eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#include <GLES/gl.h>
24eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#include <GLES2/gl2.h>
25eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
26a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchoukclass RsdFrameBufferObj;
277ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsstruct ANativeWindowBuffer;
28a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
29eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsstruct DrvAllocation {
30eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Is this a legal structure to be used as a texture source.
31eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Initially this will require 1D or 2D and color data
32eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    uint32_t textureID;
33eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
34eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Is this a legal structure to be used as a vertex source.
35eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Initially this will require 1D and x(yzw).  Additional per element data
36eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // is allowed.
37eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    uint32_t bufferID;
38eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
39eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Is this a legal structure to be used as an FBO render target
40eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    uint32_t renderTargetID;
41eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
42b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    uint32_t width;
43b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    uint32_t height;
44eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
45eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    GLenum glTarget;
46a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams    GLenum glType;
47a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams    GLenum glFormat;
48a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams
49eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    bool uploadDeferred;
50a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
51a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    RsdFrameBufferObj * readBackFBO;
52b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    ANativeWindow *wnd;
537ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams    ANativeWindowBuffer *wndBuffer;
54eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams};
55eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
56a614ae175bbf97201b5e18984d814a1d3e86faa8Jason SamsGLenum rsdTypeToGLType(RsDataType t);
57a614ae175bbf97201b5e18984d814a1d3e86faa8Jason SamsGLenum rsdKindToGLFormat(RsDataKind k);
58a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams
59a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams
60eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsbool rsdAllocationInit(const android::renderscript::Context *rsc,
61eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       android::renderscript::Allocation *alloc,
62eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       bool forceZero);
63eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationDestroy(const android::renderscript::Context *rsc,
64eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          android::renderscript::Allocation *alloc);
65eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
66eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationResize(const android::renderscript::Context *rsc,
67eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
68eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Type *newType, bool zeroNew);
69eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationSyncAll(const android::renderscript::Context *rsc,
70eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          const android::renderscript::Allocation *alloc,
71eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          RsAllocationUsageType src);
72eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationMarkDirty(const android::renderscript::Context *rsc,
73eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                            const android::renderscript::Allocation *alloc);
7441e373d91a60043afa0f9abd026218b49cbc1201Jason Samsint32_t rsdAllocationInitSurfaceTexture(const android::renderscript::Context *rsc,
7541e373d91a60043afa0f9abd026218b49cbc1201Jason Sams                                        const android::renderscript::Allocation *alloc);
767ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsvoid rsdAllocationSetSurfaceTexture(const android::renderscript::Context *rsc,
777ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams                                    android::renderscript::Allocation *alloc, ANativeWindow *nw);
787ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsvoid rsdAllocationIoSend(const android::renderscript::Context *rsc,
797ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams                         android::renderscript::Allocation *alloc);
807ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsvoid rsdAllocationIoReceive(const android::renderscript::Context *rsc,
817ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams                            android::renderscript::Allocation *alloc);
82eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
83eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationData1D(const android::renderscript::Context *rsc,
84eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
85eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t xoff, uint32_t lod, uint32_t count,
86eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const void *data, uint32_t sizeBytes);
87eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationData2D(const android::renderscript::Context *rsc,
88eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
89eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face,
90eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t w, uint32_t h,
91eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const void *data, uint32_t sizeBytes);
92eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationData3D(const android::renderscript::Context *rsc,
93eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
94eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t xoff, uint32_t yoff, uint32_t zoff,
95eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t lod, RsAllocationCubemapFace face,
96eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t w, uint32_t h, uint32_t d, const void *data, uint32_t sizeBytes);
97eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
9874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsdAllocationData1D_alloc(const android::renderscript::Context *rsc,
9974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *dstAlloc,
10074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t dstXoff, uint32_t dstLod, uint32_t count,
10174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *srcAlloc,
10274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcXoff, uint32_t srcLod);
10374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsdAllocationData2D_alloc(const android::renderscript::Context *rsc,
10474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *dstAlloc,
10574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod,
10674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h,
10774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *srcAlloc,
10874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
10974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               RsAllocationCubemapFace srcFace);
11074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsdAllocationData3D_alloc(const android::renderscript::Context *rsc,
11174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *dstAlloc,
11274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff,
11374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t dstLod, RsAllocationCubemapFace dstFace,
11474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t w, uint32_t h, uint32_t d,
11574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *srcAlloc,
11674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff,
11774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcLod, RsAllocationCubemapFace srcFace);
11874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
119eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationElementData1D(const android::renderscript::Context *rsc,
120eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                const android::renderscript::Allocation *alloc,
121eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                uint32_t x,
122eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                const void *data, uint32_t elementOff, uint32_t sizeBytes);
123eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationElementData2D(const android::renderscript::Context *rsc,
124eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                const android::renderscript::Allocation *alloc,
125eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                uint32_t x, uint32_t y,
126eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                                const void *data, uint32_t elementOff, uint32_t sizeBytes);
127eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
128eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
129eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
130eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
131eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#endif
132