1a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev/*
2a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev * Copyright (C) 2008 The Android Open Source Project
37a09f5d1465b17a920bbc877ce1b8c63a754aa67Arun Kumar K.R * Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
4a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev *
5a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev * Licensed under the Apache License, Version 2.0 (the "License");
6a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev * you may not use this file except in compliance with the License.
7a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev * You may obtain a copy of the License at
8a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev *
9a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev *      http://www.apache.org/licenses/LICENSE-2.0
10a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev *
11a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev * Unless required by applicable law or agreed to in writing, software
12a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev * distributed under the License is distributed on an "AS IS" BASIS,
13a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev * See the License for the specific language governing permissions and
15a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev * limitations under the License.
16a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev */
17a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
18a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev#ifndef GRALLOC_GPU_H_
19a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev#define GRALLOC_GPU_H_
20a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
21a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev#include <errno.h>
22a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev#include <pthread.h>
23a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev#include <stdlib.h>
24a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev#include <string.h>
25a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
26a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev#include <cutils/log.h>
27a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
28a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev#include "gralloc_priv.h"
29c567a93cd9ff7079ac03024d4fdb1ddc5683e748Jeykumar Sankaran#include "fb_priv.h"
30a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
31a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchevnamespace gralloc {
32befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedclass IAllocController;
33befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedclass gpu_context_t : public alloc_device_t {
34befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    public:
35befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    gpu_context_t(const private_module_t* module,
36be2e1bb9057c8d0666de057743eeb898c78f34b0Naseer Ahmed                  IAllocController* alloc_ctrl);
37a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
38befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    int gralloc_alloc_buffer(size_t size, int usage,
39befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                             buffer_handle_t* pHandle,
40befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                             int bufferType, int format,
41befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                             int width, int height);
42a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
43befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    int free_impl(private_handle_t const* hnd);
44a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
45befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    int alloc_impl(int w, int h, int format, int usage,
46befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                   buffer_handle_t* pHandle, int* pStride,
47befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                   size_t bufferSize = 0);
48a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
49befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    static int gralloc_alloc(alloc_device_t* dev, int w, int h,
50befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                             int format, int usage,
51befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                             buffer_handle_t* pHandle,
52befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                             int* pStride);
537a09f5d1465b17a920bbc877ce1b8c63a754aa67Arun Kumar K.R    int gralloc_alloc_framebuffer_locked(int usage,
546397c8bb267d7d93c7ebdaa7662cb90ab63e3913Naseer Ahmed                                         buffer_handle_t* pHandle);
556397c8bb267d7d93c7ebdaa7662cb90ab63e3913Naseer Ahmed
567a09f5d1465b17a920bbc877ce1b8c63a754aa67Arun Kumar K.R    int gralloc_alloc_framebuffer(int usage,
576397c8bb267d7d93c7ebdaa7662cb90ab63e3913Naseer Ahmed                                  buffer_handle_t* pHandle);
58a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
59befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    static int gralloc_free(alloc_device_t* dev, buffer_handle_t handle);
60a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
61befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    static int gralloc_alloc_size(alloc_device_t* dev,
62befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                                  int w, int h, int format,
63befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                                  int usage, buffer_handle_t* pHandle,
64befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                                  int* pStride, int bufferSize);
65a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
66befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    static int gralloc_close(struct hw_device_t *dev);
67a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev
68befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    private:
69be2e1bb9057c8d0666de057743eeb898c78f34b0Naseer Ahmed   IAllocController* mAllocCtrl;
70befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    void getGrallocInformationFromFormat(int inputFormat,
71befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed                                         int *bufferType);
72befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
73a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev}
74a19f21d925628239ef52c8ce392fa4ada91df6fcIliyan Malchev#endif  // GRALLOC_GPU_H
75