hwc_copybit.h revision 04a2afbd65e9f8bc580a637bf44bfc4e627edce0
1bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed/*
2bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * Copyright (C) 2010 The Android Open Source Project
34019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved.
4bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed *
5bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * Not a Contribution, Apache license notifications and license are retained
6bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * for attribution purposes only.
7bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed *
8bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License");
9bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * you may not use this file except in compliance with the License.
10bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * You may obtain a copy of the License at
11bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed *
12bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed *      http://www.apache.org/licenses/LICENSE-2.0
13bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed *
14bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * Unless required by applicable law or agreed to in writing, software
15bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS,
16bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * See the License for the specific language governing permissions and
18bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed * limitations under the License.
19bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed */
20bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed#ifndef HWC_COPYBIT_H
21bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed#define HWC_COPYBIT_H
22bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed#include "hwc_utils.h"
23bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
2404a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed#define NUM_RENDER_BUFFERS 2
25bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
26bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmednamespace qhwc {
271589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed
28bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmedclass CopyBit {
29bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmedpublic:
304019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    CopyBit();
314019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    ~CopyBit();
324019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    // API to get copybit engine(non static)
334019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    struct copybit_device_t *getCopyBitDevice();
34bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed    //Sets up members and prepares copybit if conditions are met
354019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list,
364019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R                                                                   int dpy);
37bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed    //Draws layer if the layer is set for copybit in prepare
384019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list,
394019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R                                                        int dpy, int* fd);
404019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    // resets the values
414019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    void reset();
4204a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed
4304a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    private_handle_t * getCurrentRenderBuffer();
4404a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed
4504a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    void setReleaseFd(int fd);
4604a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed
47bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmedprivate:
484019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    // holds the copybit device
494019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    struct copybit_device_t *mEngine;
504019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    // Helper functions for copybit composition
514019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    int  drawLayerUsingCopybit(hwc_context_t *dev, hwc_layer_1_t *layer,
524019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R                                       private_handle_t *renderBuffer, int dpy);
534019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    bool canUseCopybitForYUV (hwc_context_t *ctx);
544019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    bool canUseCopybitForRGB (hwc_context_t *ctx,
554019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R                                     hwc_display_contents_1_t *list, int dpy);
564019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    bool validateParams (hwc_context_t *ctx,
574019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R                                const hwc_display_contents_1_t *list);
58bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed    //Flags if this feature is on.
594019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    bool mIsModeOn;
604019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    // flag that indicates whether CopyBit composition is enabled for this cycle
614019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    bool mCopyBitDraw;
62bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
634019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    unsigned int getRGBRenderingArea
644019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R                            (const hwc_display_contents_1_t *list);
65bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
664019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R    void getLayerResolution(const hwc_layer_1_t* layer,
67e2cb361a1ac1df575a6316b691f49b6bad177a2eNaseer Ahmed                                   unsigned int &width, unsigned int& height);
6804a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed
6904a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    int allocRenderBuffers(int w, int h, int f);
7004a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed
7104a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    void freeRenderBuffers();
7204a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed
7304a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    private_handle_t* mRenderBuffer[NUM_RENDER_BUFFERS];
7404a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed
7504a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    // Index of the current intermediate render buffer
7604a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    int mCurRenderBufferIndex;
7704a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed
7804a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    //These are the the release FDs of the T-2 and T-1 round
7904a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    //We wait on the T-2 fence
8004a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed    int mRelFd[2];
81bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed};
82bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
83bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed}; //namespace qhwc
84bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
85bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed#endif //HWC_COPYBIT_H
86