1202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/* 2202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Copyright (C) 2008 The Android Open Source Project 3a43fb8fce6d9be5577de1e0f49c99bd4fe2f6d44Duy Truong * Copyright (c) 2011-2012, The Linux Foundation. All rights reserved. 4202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * 5202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Licensed under the Apache License, Version 2.0 (the "License"); 6202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * you may not use this file except in compliance with the License. 7202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * You may obtain a copy of the License at 8202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * 9202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * http://www.apache.org/licenses/LICENSE-2.0 10202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * 11202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Unless required by applicable law or agreed to in writing, software 12202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * distributed under the License is distributed on an "AS IS" BASIS, 13202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * See the License for the specific language governing permissions and 15202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * limitations under the License. 16202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */ 17202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 18202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#ifndef GR_H_ 19202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define GR_H_ 20202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 21202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <stdint.h> 22bec6017f76872b4ef63e8afeafcdad137519cd03Elliott Hughes#include <sys/user.h> 23202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <limits.h> 24202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <sys/cdefs.h> 25202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <hardware/gralloc.h> 26202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <pthread.h> 27202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <errno.h> 28202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 29202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <cutils/native_handle.h> 30bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis#include <utils/Singleton.h> 31202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 32202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/*****************************************************************************/ 33202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 34202a77d28ac251545f6f998a974690212309b927Iliyan Malchevstruct private_module_t; 35202a77d28ac251545f6f998a974690212309b927Iliyan Malchevstruct private_handle_t; 36202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 37202a77d28ac251545f6f998a974690212309b927Iliyan Malchevinline size_t roundUpToPageSize(size_t x) { 38202a77d28ac251545f6f998a974690212309b927Iliyan Malchev return (x + (PAGE_SIZE-1)) & ~(PAGE_SIZE-1); 39202a77d28ac251545f6f998a974690212309b927Iliyan Malchev} 40202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 41202a77d28ac251545f6f998a974690212309b927Iliyan Malchevinline size_t ALIGN(size_t x, size_t align) { 42202a77d28ac251545f6f998a974690212309b927Iliyan Malchev return (x + align-1) & ~(align-1); 43202a77d28ac251545f6f998a974690212309b927Iliyan Malchev} 44202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 45202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define FALSE 0 46202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define TRUE 1 47202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 48202a77d28ac251545f6f998a974690212309b927Iliyan Malchevint mapFrameBufferLocked(struct private_module_t* module); 49202a77d28ac251545f6f998a974690212309b927Iliyan Malchevint terminateBuffer(gralloc_module_t const* module, private_handle_t* hnd); 50202a77d28ac251545f6f998a974690212309b927Iliyan Malchevsize_t getBufferSizeAndDimensions(int width, int height, int format, 5129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int& alignedw, int &alignedh); 52202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 53202a77d28ac251545f6f998a974690212309b927Iliyan Malchevint decideBufferHandlingMechanism(int format, const char *compositionUsed, 5429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int hasBlitEngine, int *needConversion, 5529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed int *useBufferDirectly); 56202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 57202a77d28ac251545f6f998a974690212309b927Iliyan Malchev// Allocate buffer from width, height, format into a private_handle_t 58202a77d28ac251545f6f998a974690212309b927Iliyan Malchev// It is the responsibility of the caller to free the buffer 59202a77d28ac251545f6f998a974690212309b927Iliyan Malchevint alloc_buffer(private_handle_t **pHnd, int w, int h, int format, int usage); 60202a77d28ac251545f6f998a974690212309b927Iliyan Malchevvoid free_buffer(private_handle_t *hnd); 61202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 62202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/*****************************************************************************/ 63202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 64202a77d28ac251545f6f998a974690212309b927Iliyan Malchevclass Locker { 65202a77d28ac251545f6f998a974690212309b927Iliyan Malchev pthread_mutex_t mutex; 6629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed public: 67202a77d28ac251545f6f998a974690212309b927Iliyan Malchev class Autolock { 68202a77d28ac251545f6f998a974690212309b927Iliyan Malchev Locker& locker; 6929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed public: 70202a77d28ac251545f6f998a974690212309b927Iliyan Malchev inline Autolock(Locker& locker) : locker(locker) { locker.lock(); } 71202a77d28ac251545f6f998a974690212309b927Iliyan Malchev inline ~Autolock() { locker.unlock(); } 72202a77d28ac251545f6f998a974690212309b927Iliyan Malchev }; 73202a77d28ac251545f6f998a974690212309b927Iliyan Malchev inline Locker() { pthread_mutex_init(&mutex, 0); } 74202a77d28ac251545f6f998a974690212309b927Iliyan Malchev inline ~Locker() { pthread_mutex_destroy(&mutex); } 75202a77d28ac251545f6f998a974690212309b927Iliyan Malchev inline void lock() { pthread_mutex_lock(&mutex); } 76202a77d28ac251545f6f998a974690212309b927Iliyan Malchev inline void unlock() { pthread_mutex_unlock(&mutex); } 77202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}; 78202a77d28ac251545f6f998a974690212309b927Iliyan Malchev 79bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis 80bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luisclass AdrenoMemInfo : public android::Singleton <AdrenoMemInfo> 81bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis{ 82bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis public: 8331d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis AdrenoMemInfo(); 84bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis 8531d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis ~AdrenoMemInfo(); 86bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis 8731d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis /* 8831d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis * Function to compute the adreno stride based on the width and format. 8931d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis * 9031d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis * @return stride. 9131d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis */ 92bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis int getStride(int width, int format); 93bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis 94bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis private: 9531d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis // Pointer to the padding library. 9631d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis void *libadreno_utils; 9731d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis 9831d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis // link to the surface padding library. 9931d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis int (*LINK_adreno_compute_padding) (int width, int bpp, 10031d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis int surface_tile_height, 10131d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis int screen_tile_height, 10231d8eebf849f5ccce6d6f4fa7b349713d4b1d73dNaomi Luis int padding_threshold); 103bb0862a8db32349e2c1fc14f8287e815dde4d9a7Naomi Luis}; 104202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#endif /* GR_H_ */ 105