131da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed/* 231da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * Copyright (C) 2010 The Android Open Source Project 36c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved. 431da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * 531da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * Not a Contribution, Apache license notifications and license are retained 631da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * for attribution purposes only. 731da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * 831da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 931da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * you may not use this file except in compliance with the License. 1031da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * You may obtain a copy of the License at 1131da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * 1231da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 1331da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * 1431da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * Unless required by applicable law or agreed to in writing, software 1531da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 1631da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1731da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * See the License for the specific language governing permissions and 1831da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed * limitations under the License. 1931da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed */ 2031da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed#ifndef HWC_COPYBIT_H 2131da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed#define HWC_COPYBIT_H 2231da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed#include "hwc_utils.h" 2331da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 246195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed#define NUM_RENDER_BUFFERS 2 2531da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 2631da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmednamespace qhwc { 2772cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed 2831da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmedclass CopyBit { 2931da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmedpublic: 306c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R CopyBit(); 316c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R ~CopyBit(); 326c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R // API to get copybit engine(non static) 336c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R struct copybit_device_t *getCopyBitDevice(); 3431da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed //Sets up members and prepares copybit if conditions are met 356c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list, 366c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R int dpy); 3731da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed //Draws layer if the layer is set for copybit in prepare 386c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list, 396c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R int dpy, int* fd); 406c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R // resets the values 416c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R void reset(); 426195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed 436195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed private_handle_t * getCurrentRenderBuffer(); 446195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed 456195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed void setReleaseFd(int fd); 466195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed 4731da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmedprivate: 486c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R // holds the copybit device 496c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R struct copybit_device_t *mEngine; 506c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R // Helper functions for copybit composition 516c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R int drawLayerUsingCopybit(hwc_context_t *dev, hwc_layer_1_t *layer, 526c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R private_handle_t *renderBuffer, int dpy); 536c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R bool canUseCopybitForYUV (hwc_context_t *ctx); 546c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R bool canUseCopybitForRGB (hwc_context_t *ctx, 556c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R hwc_display_contents_1_t *list, int dpy); 566c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R bool validateParams (hwc_context_t *ctx, 576c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R const hwc_display_contents_1_t *list); 5831da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed //Flags if this feature is on. 596c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R bool mIsModeOn; 606c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R // flag that indicates whether CopyBit composition is enabled for this cycle 616c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R bool mCopyBitDraw; 6231da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 636c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R unsigned int getRGBRenderingArea 646c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R (const hwc_display_contents_1_t *list); 6531da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 666c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R void getLayerResolution(const hwc_layer_1_t* layer, 6745a9960377b09b1f72fe0c7ed662f1e0110e2d68Naseer Ahmed unsigned int &width, unsigned int& height); 686195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed 696195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed int allocRenderBuffers(int w, int h, int f); 706195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed 716195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed void freeRenderBuffers(); 726195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed 736f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed int clear (private_handle_t* hnd, hwc_rect_t& rect); 746f51cecb2be306aef008773d61fea4ce7b896fc9Naseer Ahmed 756195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed private_handle_t* mRenderBuffer[NUM_RENDER_BUFFERS]; 766195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed 776195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed // Index of the current intermediate render buffer 786195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed int mCurRenderBufferIndex; 796195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed 806195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed //These are the the release FDs of the T-2 and T-1 round 816195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed //We wait on the T-2 fence 826195b7af4c83ba34d713d8e2dd5b075a8896f61eNaseer Ahmed int mRelFd[2]; 83145e666f55a9df786bb0d8b1df5b72809a40a9e7Prabhanjan Kandula 84145e666f55a9df786bb0d8b1df5b72809a40a9e7Prabhanjan Kandula //Dynamic composition threshold for deciding copybit usage. 85145e666f55a9df786bb0d8b1df5b72809a40a9e7Prabhanjan Kandula double mDynThreshold; 8631da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed}; 8731da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 8831da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed}; //namespace qhwc 8931da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 9031da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed#endif //HWC_COPYBIT_H 91