1202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/*
2202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Copyright (C) 2008 The Android Open Source Project
3ccce8eb92266908162dbf92ef1e901204a2b8354Naseer Ahmed * Copyright (c) 2011-2013, 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 GRALLOC_GPU_H_
19202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define GRALLOC_GPU_H_
20202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
21202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <errno.h>
22202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <pthread.h>
23202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <stdlib.h>
24202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <string.h>
25202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
26202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <cutils/log.h>
27202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include <cutils/ashmem.h>
28202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
29202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include "gralloc_priv.h"
30ccce8eb92266908162dbf92ef1e901204a2b8354Naseer Ahmed#include "fb_priv.h"
31202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
32202a77d28ac251545f6f998a974690212309b927Iliyan Malchevnamespace gralloc {
3329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass IAllocController;
3429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass gpu_context_t : public alloc_device_t {
3529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    public:
3629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    gpu_context_t(const private_module_t* module,
3701d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed                  IAllocController* alloc_ctrl);
38202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
3929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int gralloc_alloc_buffer(size_t size, int usage,
4029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                             buffer_handle_t* pHandle,
4129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                             int bufferType, int format,
4229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                             int width, int height);
43202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
4429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int free_impl(private_handle_t const* hnd);
45202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
4629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int alloc_impl(int w, int h, int format, int usage,
4729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                   buffer_handle_t* pHandle, int* pStride,
4829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                   size_t bufferSize = 0);
49202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
5029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    static int gralloc_alloc(alloc_device_t* dev, int w, int h,
5129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                             int format, int usage,
5229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                             buffer_handle_t* pHandle,
5329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                             int* pStride);
545aa3a5f06ddae46951851fec19ee2e7e20d914cfNaseer Ahmed    int gralloc_alloc_framebuffer_locked(size_t size, int usage,
555aa3a5f06ddae46951851fec19ee2e7e20d914cfNaseer Ahmed                                         buffer_handle_t* pHandle);
565aa3a5f06ddae46951851fec19ee2e7e20d914cfNaseer Ahmed
575aa3a5f06ddae46951851fec19ee2e7e20d914cfNaseer Ahmed    int gralloc_alloc_framebuffer(size_t size, int usage,
585aa3a5f06ddae46951851fec19ee2e7e20d914cfNaseer Ahmed                                  buffer_handle_t* pHandle);
59202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    static int gralloc_free(alloc_device_t* dev, buffer_handle_t handle);
61202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    static int gralloc_alloc_size(alloc_device_t* dev,
6329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                                  int w, int h, int format,
6429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                                  int usage, buffer_handle_t* pHandle,
6529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                                  int* pStride, int bufferSize);
66202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    static int gralloc_close(struct hw_device_t *dev);
68202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    private:
7001d3fd3318a767e6ba75492ed08d57896df95d63Naseer Ahmed   IAllocController* mAllocCtrl;
7129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void getGrallocInformationFromFormat(int inputFormat,
7229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                                         int *bufferType);
7329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
74202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}
75202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#endif  // GRALLOC_GPU_H
76