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