rsAllocation.h revision cf4c7c9b2f513be77a5b9853319ca82ac2b128ed
1/* 2 * Copyright (C) 2009 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 ANDROID_STRUCTURED_ALLOCATION_H 18#define ANDROID_STRUCTURED_ALLOCATION_H 19 20#include "rsType.h" 21 22// --------------------------------------------------------------------------- 23namespace android { 24namespace renderscript { 25 26class Program; 27 28class Allocation : public ObjectBase 29{ 30 // The graphics equilivent of malloc. The allocation contains a structure of elements. 31 32 33public: 34 // By policy this allocation will hold a pointer to the type 35 // but will not destroy it on destruction. 36 Allocation(Context *rsc, const Type *); 37 virtual ~Allocation(); 38 39 void setCpuWritable(bool); 40 void setGpuWritable(bool); 41 void setCpuReadable(bool); 42 void setGpuReadable(bool); 43 44 bool fixAllocation(); 45 46 void * getPtr() const {return mPtr;} 47 const Type * getType() const {return mType.get();} 48 49 void deferedUploadToTexture(const Context *rsc, uint32_t lodOffset); 50 void uploadToTexture(const Context *rsc); 51 uint32_t getTextureID() const {return mTextureID;} 52 53 void deferedUploadToBufferObject(const Context *rsc); 54 void uploadToBufferObject(const Context *rsc); 55 uint32_t getBufferObjectID() const {return mBufferID;} 56 57 58 void data(const void *data, uint32_t sizeBytes); 59 void subData(uint32_t xoff, uint32_t count, const void *data, uint32_t sizeBytes); 60 void subData(uint32_t xoff, uint32_t yoff, 61 uint32_t w, uint32_t h, const void *data, uint32_t sizeBytes); 62 void subData(uint32_t xoff, uint32_t yoff, uint32_t zoff, 63 uint32_t w, uint32_t h, uint32_t d, const void *data, uint32_t sizeBytes); 64 65 void read(void *data); 66 67 void enableGLVertexBuffers() const; 68 void setupGLIndexBuffers() const; 69 70 void addProgramToDirty(const Program *); 71 void removeProgramToDirty(const Program *); 72 73 virtual void dumpLOGV(const char *prefix) const; 74 75 virtual void uploadCheck(const Context *rsc); 76 77protected: 78 void sendDirty() const; 79 80 ObjectBaseRef<const Type> mType; 81 void * mPtr; 82 83 Vector<const Program *> mToDirtyList; 84 85 // Usage restrictions 86 bool mCpuWrite; 87 bool mCpuRead; 88 bool mGpuWrite; 89 bool mGpuRead; 90 91 // more usage hint data from the application 92 // which can be used by a driver to pick the best memory type. 93 // Likely ignored for now 94 float mReadWriteRatio; 95 float mUpdateSize; 96 97 98 // Is this a legal structure to be used as a texture source. 99 // Initially this will require 1D or 2D and color data 100 bool mIsTexture; 101 uint32_t mTextureLOD; 102 uint32_t mTextureID; 103 104 // Is this a legal structure to be used as a vertex source. 105 // Initially this will require 1D and x(yzw). Additional per element data 106 // is allowed. 107 bool mIsVertexBuffer; 108 uint32_t mBufferID; 109 110 bool mUploadDefered; 111}; 112 113} 114} 115#endif 116 117