1b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/* 2b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Copyright (C) 2010 The Android Open Source Project 3b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved. 4b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 5b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Not a Contribution, Apache license notifications and license are retained 6b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * for attribution purposes only. 7b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 8b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Licensed under the Apache License, Version 2.0 (the "License"); 9b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * you may not use this file except in compliance with the License. 10b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * You may obtain a copy of the License at 11b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 12b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * http://www.apache.org/licenses/LICENSE-2.0 13b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * 14b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Unless required by applicable law or agreed to in writing, software 15b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * distributed under the License is distributed on an "AS IS" BASIS, 16b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * See the License for the specific language governing permissions and 18b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * limitations under the License. 19b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */ 20b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#ifndef HWC_COPYBIT_H 21b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#define HWC_COPYBIT_H 22b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include "hwc_utils.h" 23b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 24b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#define NUM_RENDER_BUFFERS 2 25b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 26b166940edca6e312463461438e2aa66e9852c26aBenoit Gobynamespace qhwc { 27b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 28b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyclass CopyBit { 29b166940edca6e312463461438e2aa66e9852c26aBenoit Gobypublic: 30b166940edca6e312463461438e2aa66e9852c26aBenoit Goby CopyBit(); 31b166940edca6e312463461438e2aa66e9852c26aBenoit Goby ~CopyBit(); 32b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // API to get copybit engine(non static) 33b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_device_t *getCopyBitDevice(); 34b166940edca6e312463461438e2aa66e9852c26aBenoit Goby //Sets up members and prepares copybit if conditions are met 35b166940edca6e312463461438e2aa66e9852c26aBenoit Goby bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list, 36b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int dpy); 37b166940edca6e312463461438e2aa66e9852c26aBenoit Goby //Draws layer if the layer is set for copybit in prepare 38b166940edca6e312463461438e2aa66e9852c26aBenoit Goby bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list, 39b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int dpy, int* fd); 40b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // resets the values 41b166940edca6e312463461438e2aa66e9852c26aBenoit Goby void reset(); 42b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 43b166940edca6e312463461438e2aa66e9852c26aBenoit Goby private_handle_t * getCurrentRenderBuffer(); 44b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 45b166940edca6e312463461438e2aa66e9852c26aBenoit Goby void setReleaseFd(int fd); 46b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 47b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyprivate: 48b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // holds the copybit device 49b166940edca6e312463461438e2aa66e9852c26aBenoit Goby struct copybit_device_t *mEngine; 50b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // Helper functions for copybit composition 51b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int drawLayerUsingCopybit(hwc_context_t *dev, hwc_layer_1_t *layer, 52b166940edca6e312463461438e2aa66e9852c26aBenoit Goby private_handle_t *renderBuffer, int dpy); 53b166940edca6e312463461438e2aa66e9852c26aBenoit Goby bool canUseCopybitForYUV (hwc_context_t *ctx); 54b166940edca6e312463461438e2aa66e9852c26aBenoit Goby bool canUseCopybitForRGB (hwc_context_t *ctx, 55b166940edca6e312463461438e2aa66e9852c26aBenoit Goby hwc_display_contents_1_t *list, int dpy); 56b166940edca6e312463461438e2aa66e9852c26aBenoit Goby bool validateParams (hwc_context_t *ctx, 57b166940edca6e312463461438e2aa66e9852c26aBenoit Goby const hwc_display_contents_1_t *list); 58b166940edca6e312463461438e2aa66e9852c26aBenoit Goby //Flags if this feature is on. 59b166940edca6e312463461438e2aa66e9852c26aBenoit Goby bool mIsModeOn; 60b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // flag that indicates whether CopyBit composition is enabled for this cycle 61b166940edca6e312463461438e2aa66e9852c26aBenoit Goby bool mCopyBitDraw; 62b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 63b166940edca6e312463461438e2aa66e9852c26aBenoit Goby unsigned int getRGBRenderingArea 64b166940edca6e312463461438e2aa66e9852c26aBenoit Goby (const hwc_display_contents_1_t *list); 65b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 66b166940edca6e312463461438e2aa66e9852c26aBenoit Goby void getLayerResolution(const hwc_layer_1_t* layer, 67b166940edca6e312463461438e2aa66e9852c26aBenoit Goby unsigned int &width, unsigned int& height); 68b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 69b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int allocRenderBuffers(int w, int h, int f); 70b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 71b166940edca6e312463461438e2aa66e9852c26aBenoit Goby void freeRenderBuffers(); 72b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 73b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int clear (private_handle_t* hnd, hwc_rect_t& rect); 74b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 75b166940edca6e312463461438e2aa66e9852c26aBenoit Goby private_handle_t* mRenderBuffer[NUM_RENDER_BUFFERS]; 76b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 77b166940edca6e312463461438e2aa66e9852c26aBenoit Goby // Index of the current intermediate render buffer 78b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int mCurRenderBufferIndex; 79b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 80b166940edca6e312463461438e2aa66e9852c26aBenoit Goby //These are the the release FDs of the T-2 and T-1 round 81b166940edca6e312463461438e2aa66e9852c26aBenoit Goby //We wait on the T-2 fence 82b166940edca6e312463461438e2aa66e9852c26aBenoit Goby int mRelFd[2]; 83b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 84b166940edca6e312463461438e2aa66e9852c26aBenoit Goby //Dynamic composition threshold for deciding copybit usage. 85b166940edca6e312463461438e2aa66e9852c26aBenoit Goby double mDynThreshold; 86b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; 87b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 88b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; //namespace qhwc 89b166940edca6e312463461438e2aa66e9852c26aBenoit Goby 90b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#endif //HWC_COPYBIT_H 91