18b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol/* 28b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Copyright (c) 2014 Intel Corporation 38b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 48b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Licensed under the Apache License, Version 2.0 (the "License"); 58b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// you may not use this file except in compliance with the License. 68b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// You may obtain a copy of the License at 78b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 88b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// http://www.apache.org/licenses/LICENSE-2.0 98b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Unless required by applicable law or agreed to in writing, software 118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// distributed under the License is distributed on an "AS IS" BASIS, 128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// See the License for the specific language governing permissions and 148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// limitations under the License. 158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol*/ 168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#ifndef HWC_LAYER_LIST_H 178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#define HWC_LAYER_LIST_H 188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <Dump.h> 208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <hardware/hwcomposer.h> 218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <utils/SortedVector.h> 228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <DataBuffer.h> 238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <DisplayPlane.h> 248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <DisplayPlaneManager.h> 258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <HwcLayer.h> 268b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace android { 288b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace intel { 298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolclass HwcLayerList { 328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolpublic: 338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol HwcLayerList(hwc_display_contents_1_t *list, int disp); 348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual ~HwcLayerList(); 358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolpublic: 378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool initialize(); 388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void deinitialize(); 398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 408b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool update(hwc_display_contents_1_t *list); 418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual DisplayPlane* getPlane(uint32_t index) const; 428b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 438b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void postFlip(); 448b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // dump interface 468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void dump(Dump& d); 478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprivate: 498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool checkSupported(int planeType, HwcLayer *hwcLayer); 508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool checkCursorSupported(HwcLayer *hwcLayer); 518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool allocatePlanes(); 528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool assignCursorPlanes(); 538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool assignCursorPlanes(int index, int planeNumber); 548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool assignOverlayPlanes(); 558b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool assignOverlayPlanes(int index, int planeNumber); 568b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool assignSpritePlanes(); 578b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool assignSpritePlanes(int index, int planeNumber); 588b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool assignPrimaryPlane(); 598b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool assignPrimaryPlaneHelper(HwcLayer *hwcLayer, int zorder = -1); 608b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool attachPlanes(); 618b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool useAsFrameBufferTarget(HwcLayer *target); 628b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool hasIntersection(HwcLayer *la, HwcLayer *lb); 638b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void addStaticLayerSize(HwcLayer *hwcLayer); 648b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool checkStaticLayerSize(); 658b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ZOrderLayer* addZOrderLayer(int type, HwcLayer *hwcLayer, int zorder = -1); 668b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void removeZOrderLayer(ZOrderLayer *layer); 678b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void setupSmartComposition(); 688b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool setupSmartComposition2(); 698b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void dump(); 708b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 718b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprivate: 728b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol class HwcLayerVector : public SortedVector<HwcLayer*> { 738b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol public: 748b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol HwcLayerVector() {} 758b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual int do_compare(const void* lhs, const void* rhs) const { 768b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol const HwcLayer* l = *(HwcLayer**)lhs; 778b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol const HwcLayer* r = *(HwcLayer**)rhs; 788b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // sorted from index 0 to n 798b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return l->getIndex() - r->getIndex(); 808b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 818b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol }; 828b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 838b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol class PriorityVector : public SortedVector<HwcLayer*> { 848b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol public: 858b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PriorityVector() {} 868b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual int do_compare(const void* lhs, const void* rhs) const { 878b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol const HwcLayer* l = *(HwcLayer**)lhs; 888b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol const HwcLayer* r = *(HwcLayer**)rhs; 898b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol return r->getPriority() - l->getPriority(); 908b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 918b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol }; 928b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 938b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol hwc_display_contents_1_t *mList; 948b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mLayerCount; 958b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 968b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol HwcLayerVector mLayers; 978b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol HwcLayerVector mFBLayers; 988b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Vector<int> mStaticLayersIndex; 998b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PriorityVector mSpriteCandidates; 1008b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PriorityVector mOverlayCandidates; 1018b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PriorityVector mCursorCandidates; 1028b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ZOrderConfig mZOrderConfig; 1038b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol HwcLayer *mFrameBufferTarget; 1048b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mDisplayIndex; 1058b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mLayerSize; 1068b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol}; 1078b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1088b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} // namespace intel 1098b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} // namespace android 1108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#endif /* HWC_LAYER_LIST_H */ 113