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
24709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "../cpu_ref/rsd_cpu.h"
250b575de8ed0b628d84d256f5846500b0385979bdTim Murray
260b575de8ed0b628d84d256f5846500b0385979bdTim Murray#ifndef RS_SERVER
27eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#include <GLES/gl.h>
28eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#include <GLES2/gl2.h>
290b575de8ed0b628d84d256f5846500b0385979bdTim Murray#endif
30eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
31b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hines#if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB)
32b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hines#include "gui/GLConsumer.h"
33b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hines#endif
34b0934b67b95cc27e2358c2aa4db5f7c1067c8f9bStephen Hines
35a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchoukclass RsdFrameBufferObj;
363a25fdd3786c1a08b783d8a83ef94b756347ff5cTim Murraystruct ANativeWindow;
377ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsstruct ANativeWindowBuffer;
382bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wangstruct ANativeWindow_Buffer;
39a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
40eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsstruct DrvAllocation {
41eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Is this a legal structure to be used as a texture source.
42eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Initially this will require 1D or 2D and color data
43eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    uint32_t textureID;
44eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
45eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Is this a legal structure to be used as a vertex source.
46eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Initially this will require 1D and x(yzw).  Additional per element data
47eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // is allowed.
48eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    uint32_t bufferID;
49eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
50eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    // Is this a legal structure to be used as an FBO render target
51eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    uint32_t renderTargetID;
52eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
5393eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#ifndef RS_COMPATIBILITY_LIB
54eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    GLenum glTarget;
55a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams    GLenum glType;
56a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams    GLenum glFormat;
573a25fdd3786c1a08b783d8a83ef94b756347ff5cTim Murray
582bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang    ANativeWindowBuffer *wndBuffer;
593a25fdd3786c1a08b783d8a83ef94b756347ff5cTim Murray    android::GLConsumer *surfaceTexture;
6093eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#else
6193eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams    int glTarget;
6293eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams    int glType;
6393eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams    int glFormat;
642bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang
652bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang    ANativeWindow_Buffer *wndBuffer;
6693eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#endif
67a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams
68c2cfe6abfc74befbaa4d2ca09024a27fbfb1f515Tim Murray    bool useUserProvidedPtr;
69eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams    bool uploadDeferred;
70a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
71a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    RsdFrameBufferObj * readBackFBO;
72b322033c13487a174bb9c26466e9684d1ff4de8dJason Sams    ANativeWindow *wnd;
732bd78f2d3e0a94a98dc03502decadfd2e17a70c8Miao Wang    ANativeWindow *wndSurface;
74eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams};
75eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
7693eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#ifndef RS_COMPATIBILITY_LIB
77a614ae175bbf97201b5e18984d814a1d3e86faa8Jason SamsGLenum rsdTypeToGLType(RsDataType t);
78a614ae175bbf97201b5e18984d814a1d3e86faa8Jason SamsGLenum rsdKindToGLFormat(RsDataKind k);
7993eacc7ce0aad4314b4cb41a281f59ce54bb3286Jason Sams#endif
80a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams
81a614ae175bbf97201b5e18984d814a1d3e86faa8Jason Sams
82ddceab9a001f07a3395226c5e06e3b420720af0fJason Samsuint32_t rsdAllocationGrallocBits(const android::renderscript::Context *rsc,
83ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams                                  android::renderscript::Allocation *alloc);
84eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsbool rsdAllocationInit(const android::renderscript::Context *rsc,
85eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       android::renderscript::Allocation *alloc,
86eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                       bool forceZero);
8747a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#ifdef RS_COMPATIBILITY_LIB
8847a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wangbool rsdAllocationInitStrided(const android::renderscript::Context *rsc,
8947a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang                              android::renderscript::Allocation *alloc,
9047a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang                              bool forceZero, size_t requiredAlignment);
9147a5881b8f85d65c74f2471fe6261d4cdb3dce5eMiao Wang#endif
92bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Samsbool rsdAllocationAdapterInit(const android::renderscript::Context *rsc,
93bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Sams                              android::renderscript::Allocation *alloc);
94eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationDestroy(const android::renderscript::Context *rsc,
95eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          android::renderscript::Allocation *alloc);
96eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
97eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationResize(const android::renderscript::Context *rsc,
98eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
99eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Type *newType, bool zeroNew);
100eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationSyncAll(const android::renderscript::Context *rsc,
101eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          const android::renderscript::Allocation *alloc,
102eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                          RsAllocationUsageType src);
103eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationMarkDirty(const android::renderscript::Context *rsc,
104eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                            const android::renderscript::Allocation *alloc);
105733396b67724162844ea2785c7495115dc5ee8d8Jason Samsvoid rsdAllocationSetSurface(const android::renderscript::Context *rsc,
106733396b67724162844ea2785c7495115dc5ee8d8Jason Sams                            android::renderscript::Allocation *alloc, ANativeWindow *nw);
1077ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsvoid rsdAllocationIoSend(const android::renderscript::Context *rsc,
1087ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams                         android::renderscript::Allocation *alloc);
1097ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Samsvoid rsdAllocationIoReceive(const android::renderscript::Context *rsc,
1107ac2a4dda4d20ca1f1b714e129a3a08f63178c18Jason Sams                            android::renderscript::Allocation *alloc);
111eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
112eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationData1D(const android::renderscript::Context *rsc,
113eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
114099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                         uint32_t xoff, uint32_t lod, size_t count,
115099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                         const void *data, size_t sizeBytes);
116eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationData2D(const android::renderscript::Context *rsc,
117eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
118eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face,
119eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         uint32_t w, uint32_t h,
120099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                         const void *data, size_t sizeBytes, size_t stride);
121eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Samsvoid rsdAllocationData3D(const android::renderscript::Context *rsc,
122eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams                         const android::renderscript::Allocation *alloc,
1233bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                         uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod,
1243bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                         uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes,
1253bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                         size_t stride);
126eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
127807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsvoid rsdAllocationRead1D(const android::renderscript::Context *rsc,
128807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         const android::renderscript::Allocation *alloc,
129099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                         uint32_t xoff, uint32_t lod, size_t count,
130099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                         void *data, size_t sizeBytes);
131807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsvoid rsdAllocationRead2D(const android::renderscript::Context *rsc,
132807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         const android::renderscript::Allocation *alloc,
133807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face,
134807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         uint32_t w, uint32_t h,
135099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                         void *data, size_t sizeBytes, size_t stride);
136807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsvoid rsdAllocationRead3D(const android::renderscript::Context *rsc,
137807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                         const android::renderscript::Allocation *alloc,
1383bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                         uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod,
1393bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                         uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes,
1403bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                         size_t stride);
141807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
142807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsvoid * rsdAllocationLock1D(const android::renderscript::Context *rsc,
143807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                          const android::renderscript::Allocation *alloc);
144807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Samsvoid rsdAllocationUnlock1D(const android::renderscript::Context *rsc,
145807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams                          const android::renderscript::Allocation *alloc);
146807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
147807fdc4b6f3fb893015ee136565d6151bb2332d3Jason Sams
14874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsdAllocationData1D_alloc(const android::renderscript::Context *rsc,
14974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *dstAlloc,
150099bc262f862cdeb547cf8a78fe9e0e92560f437Tim Murray                               uint32_t dstXoff, uint32_t dstLod, size_t count,
15174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *srcAlloc,
15274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcXoff, uint32_t srcLod);
15374a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsdAllocationData2D_alloc(const android::renderscript::Context *rsc,
15474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *dstAlloc,
15574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod,
15674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h,
15774a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *srcAlloc,
15874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod,
15974a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               RsAllocationCubemapFace srcFace);
16074a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchoukvoid rsdAllocationData3D_alloc(const android::renderscript::Context *rsc,
16174a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *dstAlloc,
16274a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff,
1633bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                               uint32_t dstLod,
16474a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t w, uint32_t h, uint32_t d,
16574a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               const android::renderscript::Allocation *srcAlloc,
16674a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk                               uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff,
1673bbc0fd40264ddae1592706d9023865b7b3e3195Jason Sams                               uint32_t srcLod);
16874a827988567a9d65954bb0d825a3ba4a97e2947Alex Sakhartchouk
169cc8cea7477352898921044483a6c803e25d02665Miao Wangvoid rsdAllocationElementData(const android::renderscript::Context *rsc,
170cc8cea7477352898921044483a6c803e25d02665Miao Wang                              const android::renderscript::Allocation *alloc,
171cc8cea7477352898921044483a6c803e25d02665Miao Wang                              uint32_t x, uint32_t y, uint32_t z,
172cc8cea7477352898921044483a6c803e25d02665Miao Wang                              const void *data, uint32_t elementOff, size_t sizeBytes);
173cc8cea7477352898921044483a6c803e25d02665Miao Wang
174cc8cea7477352898921044483a6c803e25d02665Miao Wangvoid rsdAllocationElementRead(const android::renderscript::Context *rsc,
175cc8cea7477352898921044483a6c803e25d02665Miao Wang                              const android::renderscript::Allocation *alloc,
176cc8cea7477352898921044483a6c803e25d02665Miao Wang                              uint32_t x, uint32_t y, uint32_t z,
177cc8cea7477352898921044483a6c803e25d02665Miao Wang                              void *data, uint32_t elementOff, size_t sizeBytes);
178eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
179a6dd823b9dcbd7ce7dfc34eda52a1e4104771f79Jason Samsvoid rsdAllocationGenerateMipmaps(const android::renderscript::Context *rsc,
180a6dd823b9dcbd7ce7dfc34eda52a1e4104771f79Jason Sams                                  const android::renderscript::Allocation *alloc);
181eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
182a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Samsvoid rsdAllocationUpdateCachedObject(const android::renderscript::Context *rsc,
183a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams                                     const android::renderscript::Allocation *alloc,
184a36c50a6ab87f4c9049318d4c6c8ec7b0a1e6e12Jason Sams                                     android::renderscript::rs_allocation *obj);
185eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
186bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Samsvoid rsdAllocationAdapterOffset(const android::renderscript::Context *rsc,
187bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Sams                                const android::renderscript::Allocation *alloc);
188bc9dc27b84f4e5c72d4dbe8a8e01af87dd780f79Jason Sams
189eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams
190eb4fe18dd88634330f9566cbb9e785d8c7ec5813Jason Sams#endif
191