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