1054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin/* 2054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Copyright (C) 2008 The Android Open Source Project 3054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Copyright (c) 2011-2014, The Linux Foundation. All rights reserved. 4054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * 5054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Licensed under the Apache License, Version 2.0 (the "License"); 6054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * you may not use this file except in compliance with the License. 7054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * You may obtain a copy of the License at 8054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * 9054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * http://www.apache.org/licenses/LICENSE-2.0 10054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * 11054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * Unless required by applicable law or agreed to in writing, software 12054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * distributed under the License is distributed on an "AS IS" BASIS, 13054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * See the License for the specific language governing permissions and 15054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin * limitations under the License. 16054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin */ 17054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 18054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#ifndef GRALLOC_GPU_H_ 19054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#define GRALLOC_GPU_H_ 20054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 21054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <errno.h> 22054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <pthread.h> 23054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <stdlib.h> 24054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <string.h> 25054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 26054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include <cutils/log.h> 27054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 28054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include "gralloc_priv.h" 29054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#include "fb_priv.h" 30054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 31054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinnamespace gralloc { 32054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinclass IAllocController; 33054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjinclass gpu_context_t : public alloc_device_t { 34054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin public: 35054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin gpu_context_t(const private_module_t* module, 36054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin IAllocController* alloc_ctrl); 37054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 38054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int gralloc_alloc_buffer(unsigned int size, int usage, 39054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin buffer_handle_t* pHandle, 40054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int bufferType, int format, 41054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int width, int height); 42054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 43054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int free_impl(private_handle_t const* hnd); 44054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 45054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int alloc_impl(int w, int h, int format, int usage, 46054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin buffer_handle_t* pHandle, int* pStride, 47054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin unsigned int bufferSize = 0); 48054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 49054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin static int gralloc_alloc(alloc_device_t* dev, int w, int h, 50054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int format, int usage, 51054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin buffer_handle_t* pHandle, 52054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int* pStride); 53054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int gralloc_alloc_framebuffer_locked(int usage, 54054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin buffer_handle_t* pHandle); 55054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 56054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int gralloc_alloc_framebuffer(int usage, 57054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin buffer_handle_t* pHandle); 58054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 59054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin static int gralloc_free(alloc_device_t* dev, buffer_handle_t handle); 60054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 61054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin static int gralloc_alloc_size(alloc_device_t* dev, 62054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int w, int h, int format, 63054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int usage, buffer_handle_t* pHandle, 64054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int* pStride, int bufferSize); 65054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 66054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin static int gralloc_close(struct hw_device_t *dev); 67054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin 68054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin private: 69054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin IAllocController* mAllocCtrl; 70054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin void getGrallocInformationFromFormat(int inputFormat, 71054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin int *bufferType); 72054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin}; 73054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin} 74054df959aef7dce630a7f41d4aba6626c130756bPatrick Tjin#endif // GRALLOC_GPU_H 75