1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef RSD_ALLOCATION_H 18 #define RSD_ALLOCATION_H 19 20 #include <rs_hal.h> 21 #include <rsRuntime.h> 22 #include <rsAllocation.h> 23 24 #include "../cpu_ref/rsd_cpu.h" 25 26 #include <GLES/gl.h> 27 #include <GLES2/gl2.h> 28 29 30 class RsdFrameBufferObj; 31 struct ANativeWindow; 32 struct ANativeWindowBuffer; 33 struct ANativeWindow_Buffer; 34 35 struct DrvAllocation { 36 // Is this a legal structure to be used as a texture source. 37 // Initially this will require 1D or 2D and color data 38 uint32_t textureID; 39 40 // Is this a legal structure to be used as a vertex source. 41 // Initially this will require 1D and x(yzw). Additional per element data 42 // is allowed. 43 uint32_t bufferID; 44 45 // Is this a legal structure to be used as an FBO render target 46 uint32_t renderTargetID; 47 48 #if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) 49 GLenum glTarget; 50 GLenum glType; 51 GLenum glFormat; 52 #else 53 int glTarget; 54 int glType; 55 int glFormat; 56 #endif 57 58 #if !defined(RS_COMPATIBILITY_LIB) 59 ANativeWindowBuffer *wndBuffer; 60 #else 61 ANativeWindow_Buffer *wndBuffer; 62 #endif 63 64 bool useUserProvidedPtr; 65 bool uploadDeferred; 66 67 #if !defined(RS_VENDOR_LIB) && !defined(RS_COMPATIBILITY_LIB) 68 RsdFrameBufferObj * readBackFBO; 69 #endif 70 ANativeWindow *wnd; 71 ANativeWindow *wndSurface; 72 }; 73 74 #ifndef RS_COMPATIBILITY_LIB 75 GLenum rsdTypeToGLType(RsDataType t); 76 GLenum rsdKindToGLFormat(RsDataKind k); 77 #endif 78 79 80 uint32_t rsdAllocationGrallocBits(const android::renderscript::Context *rsc, 81 android::renderscript::Allocation *alloc); 82 bool rsdAllocationInit(const android::renderscript::Context *rsc, 83 android::renderscript::Allocation *alloc, 84 bool forceZero); 85 #ifdef RS_COMPATIBILITY_LIB 86 bool rsdAllocationInitStrided(const android::renderscript::Context *rsc, 87 android::renderscript::Allocation *alloc, 88 bool forceZero, size_t requiredAlignment); 89 #endif 90 bool rsdAllocationAdapterInit(const android::renderscript::Context *rsc, 91 android::renderscript::Allocation *alloc); 92 void rsdAllocationDestroy(const android::renderscript::Context *rsc, 93 android::renderscript::Allocation *alloc); 94 95 void rsdAllocationResize(const android::renderscript::Context *rsc, 96 const android::renderscript::Allocation *alloc, 97 const android::renderscript::Type *newType, bool zeroNew); 98 void rsdAllocationSyncAll(const android::renderscript::Context *rsc, 99 const android::renderscript::Allocation *alloc, 100 RsAllocationUsageType src); 101 void rsdAllocationMarkDirty(const android::renderscript::Context *rsc, 102 const android::renderscript::Allocation *alloc); 103 void rsdAllocationSetSurface(const android::renderscript::Context *rsc, 104 android::renderscript::Allocation *alloc, ANativeWindow *nw); 105 void rsdAllocationIoSend(const android::renderscript::Context *rsc, 106 android::renderscript::Allocation *alloc); 107 void rsdAllocationIoReceive(const android::renderscript::Context *rsc, 108 android::renderscript::Allocation *alloc); 109 110 void rsdAllocationData1D(const android::renderscript::Context *rsc, 111 const android::renderscript::Allocation *alloc, 112 uint32_t xoff, uint32_t lod, size_t count, 113 const void *data, size_t sizeBytes); 114 void rsdAllocationData2D(const android::renderscript::Context *rsc, 115 const android::renderscript::Allocation *alloc, 116 uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face, 117 uint32_t w, uint32_t h, 118 const void *data, size_t sizeBytes, size_t stride); 119 void rsdAllocationData3D(const android::renderscript::Context *rsc, 120 const android::renderscript::Allocation *alloc, 121 uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, 122 uint32_t w, uint32_t h, uint32_t d, const void *data, size_t sizeBytes, 123 size_t stride); 124 125 void rsdAllocationRead1D(const android::renderscript::Context *rsc, 126 const android::renderscript::Allocation *alloc, 127 uint32_t xoff, uint32_t lod, size_t count, 128 void *data, size_t sizeBytes); 129 void rsdAllocationRead2D(const android::renderscript::Context *rsc, 130 const android::renderscript::Allocation *alloc, 131 uint32_t xoff, uint32_t yoff, uint32_t lod, RsAllocationCubemapFace face, 132 uint32_t w, uint32_t h, 133 void *data, size_t sizeBytes, size_t stride); 134 void rsdAllocationRead3D(const android::renderscript::Context *rsc, 135 const android::renderscript::Allocation *alloc, 136 uint32_t xoff, uint32_t yoff, uint32_t zoff, uint32_t lod, 137 uint32_t w, uint32_t h, uint32_t d, void *data, size_t sizeBytes, 138 size_t stride); 139 140 void * rsdAllocationLock1D(const android::renderscript::Context *rsc, 141 const android::renderscript::Allocation *alloc); 142 void rsdAllocationUnlock1D(const android::renderscript::Context *rsc, 143 const android::renderscript::Allocation *alloc); 144 145 146 void rsdAllocationData1D_alloc(const android::renderscript::Context *rsc, 147 const android::renderscript::Allocation *dstAlloc, 148 uint32_t dstXoff, uint32_t dstLod, size_t count, 149 const android::renderscript::Allocation *srcAlloc, 150 uint32_t srcXoff, uint32_t srcLod); 151 void rsdAllocationData2D_alloc(const android::renderscript::Context *rsc, 152 const android::renderscript::Allocation *dstAlloc, 153 uint32_t dstXoff, uint32_t dstYoff, uint32_t dstLod, 154 RsAllocationCubemapFace dstFace, uint32_t w, uint32_t h, 155 const android::renderscript::Allocation *srcAlloc, 156 uint32_t srcXoff, uint32_t srcYoff, uint32_t srcLod, 157 RsAllocationCubemapFace srcFace); 158 void rsdAllocationData3D_alloc(const android::renderscript::Context *rsc, 159 const android::renderscript::Allocation *dstAlloc, 160 uint32_t dstXoff, uint32_t dstYoff, uint32_t dstZoff, 161 uint32_t dstLod, 162 uint32_t w, uint32_t h, uint32_t d, 163 const android::renderscript::Allocation *srcAlloc, 164 uint32_t srcXoff, uint32_t srcYoff, uint32_t srcZoff, 165 uint32_t srcLod); 166 167 void rsdAllocationElementData(const android::renderscript::Context *rsc, 168 const android::renderscript::Allocation *alloc, 169 uint32_t x, uint32_t y, uint32_t z, 170 const void *data, uint32_t elementOff, size_t sizeBytes); 171 172 void rsdAllocationElementRead(const android::renderscript::Context *rsc, 173 const android::renderscript::Allocation *alloc, 174 uint32_t x, uint32_t y, uint32_t z, 175 void *data, uint32_t elementOff, size_t sizeBytes); 176 177 void rsdAllocationGenerateMipmaps(const android::renderscript::Context *rsc, 178 const android::renderscript::Allocation *alloc); 179 180 void rsdAllocationUpdateCachedObject(const android::renderscript::Context *rsc, 181 const android::renderscript::Allocation *alloc, 182 android::renderscript::rs_allocation *obj); 183 184 void rsdAllocationAdapterOffset(const android::renderscript::Context *rsc, 185 const android::renderscript::Allocation *alloc); 186 187 188 #endif 189