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