hwc_copybit.h revision 503386673b68e63ee15b576703e9b0a140cc5401
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 24866120c90c620c405591947ab905c17e62cfd0a2Xiaoming Zhou#define NUM_RENDER_BUFFERS 3 25503386673b68e63ee15b576703e9b0a140cc5401Terence Hampson//These scaling factors are specific for MDP3. Normally scaling factor 26503386673b68e63ee15b576703e9b0a140cc5401Terence Hampson//is only 4, but copybit will create temp buffer to let it run through 27503386673b68e63ee15b576703e9b0a140cc5401Terence Hampson//twice 28503386673b68e63ee15b576703e9b0a140cc5401Terence Hampson#define MAX_SCALE_FACTOR 16 29503386673b68e63ee15b576703e9b0a140cc5401Terence Hampson#define MIN_SCALE_FACTOR 0.0625 30bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed 31bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmednamespace qhwc { 321589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed 33bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmedclass CopyBit { 34bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmedpublic: 354019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R CopyBit(); 364019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R ~CopyBit(); 374019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R // API to get copybit engine(non static) 384019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R struct copybit_device_t *getCopyBitDevice(); 39bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed //Sets up members and prepares copybit if conditions are met 404019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R bool prepare(hwc_context_t *ctx, hwc_display_contents_1_t *list, 414019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R int dpy); 42bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed //Draws layer if the layer is set for copybit in prepare 434019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list, 444019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R int dpy, int* fd); 454019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R // resets the values 464019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R void reset(); 4704a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed 4804a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed private_handle_t * getCurrentRenderBuffer(); 4904a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed 5004a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed void setReleaseFd(int fd); 5104a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed 52bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmedprivate: 534019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R // holds the copybit device 544019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R struct copybit_device_t *mEngine; 554019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R // Helper functions for copybit composition 564019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R int drawLayerUsingCopybit(hwc_context_t *dev, hwc_layer_1_t *layer, 5706e7446984f4e8c752a918f60331b99c1ff55b2bShivaraj Shetty private_handle_t *renderBuffer, int dpy, bool isFG); 58905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan int fillColorUsingCopybit(hwc_layer_1_t *layer, 59905042d4ea8c4c736ea248b694d93ef2f59866d5Sushil Chauhan private_handle_t *renderBuffer); 604019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R bool canUseCopybitForYUV (hwc_context_t *ctx); 614019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R bool canUseCopybitForRGB (hwc_context_t *ctx, 624019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R hwc_display_contents_1_t *list, int dpy); 634019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R bool validateParams (hwc_context_t *ctx, 644019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R const hwc_display_contents_1_t *list); 65bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed //Flags if this feature is on. 664019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R bool mIsModeOn; 674019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R // flag that indicates whether CopyBit composition is enabled for this cycle 684019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R bool mCopyBitDraw; 69bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed 704019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R unsigned int getRGBRenderingArea 714019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R (const hwc_display_contents_1_t *list); 72bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed 734019c64ad8721cd9f3dc5c4e7be260a5f0706e34Arun Kumar K.R void getLayerResolution(const hwc_layer_1_t* layer, 74e2cb361a1ac1df575a6316b691f49b6bad177a2eNaseer Ahmed unsigned int &width, unsigned int& height); 7504a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed 7604a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed int allocRenderBuffers(int w, int h, int f); 7704a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed 7804a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed void freeRenderBuffers(); 7904a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed 80347ca48efbcf8055f1ae733d9c0126bb5a9db8c6Naseer Ahmed int clear (private_handle_t* hnd, hwc_rect_t& rect); 81347ca48efbcf8055f1ae733d9c0126bb5a9db8c6Naseer Ahmed 8204a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed private_handle_t* mRenderBuffer[NUM_RENDER_BUFFERS]; 8304a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed 8404a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed // Index of the current intermediate render buffer 8504a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed int mCurRenderBufferIndex; 8604a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed 8704a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed //These are the the release FDs of the T-2 and T-1 round 8804a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed //We wait on the T-2 fence 8904a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed int mRelFd[2]; 9080d8a5cb55d1036b37c88924db1ea1298a3e4287Prabhanjan Kandula 9180d8a5cb55d1036b37c88924db1ea1298a3e4287Prabhanjan Kandula //Dynamic composition threshold for deciding copybit usage. 9280d8a5cb55d1036b37c88924db1ea1298a3e4287Prabhanjan Kandula double mDynThreshold; 93bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed}; 94bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed 95bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed}; //namespace qhwc 96bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed 97bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed#endif //HWC_COPYBIT_H 98