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