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 DISPLAYPLANE_H_ 178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#define DISPLAYPLANE_H_ 188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <utils/KeyedVector.h> 208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <BufferMapper.h> 218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <Drm.h> 228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace android { 248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace intel { 258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 268b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujoltypedef struct { 278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // align with android, using 'int' here 288b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int x; 298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int y; 308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int w; 318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int h; 328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} PlanePosition; 338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolenum { 358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // support up to 4 overlays 368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol MAX_OVERLAY_COUNT = 4, 378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol MAX_SPRITE_COUNT = 4, 388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol}; 398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 408b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolenum { 418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // in version 1.3, HWC_FRAMEBUFFER_TARGET is defined as 3 428b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol HWC_FORCE_FRAMEBUFFER = 255, 438b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol}; 448b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolclass ZOrderConfig; 468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolclass DisplayPlane { 488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolpublic: 498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // plane type 508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol enum { 518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PLANE_SPRITE = 0, 528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PLANE_OVERLAY, 538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PLANE_PRIMARY, 548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PLANE_CURSOR, 558b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PLANE_MAX, 568b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol }; 578b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 588b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol enum { 598b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // one more than android's back buffer count to allow more space 608b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // to do map/unmap, as plane reallocation may unmap on-screen layer. 618b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // each plane will cache the latest MIN_DATA_BUFFER_COUNT buffers 628b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // in case that these buffers are still in-using by display device 638b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // other buffers will be released on cache invalidation 648b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol MIN_DATA_BUFFER_COUNT = 4, 658b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol }; 668b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 678b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprotected: 688b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol enum { 698b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PLANE_POSITION_CHANGED = 0x00000001UL, 708b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PLANE_BUFFER_CHANGED = 0x00000002UL, 718b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PLANE_SOURCE_CROP_CHANGED = 0x00000004UL, 728b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PLANE_TRANSFORM_CHANGED = 0x00000008UL, 738b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol }; 748b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolpublic: 758b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol DisplayPlane(int index, int type, int disp); 768b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual ~DisplayPlane(); 778b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolpublic: 788b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual int getIndex() const { return mIndex; } 798b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual int getType() const { return mType; } 808b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool initCheck() const { return mInitialized; } 818b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 828b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // data destination 838b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void setPosition(int x, int y, int w, int h); 848b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void setSourceCrop(int x, int y, int w, int h); 858b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void setTransform(int transform); 868b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void setPlaneAlpha(uint8_t alpha, uint32_t blending); 878b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 888b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // data source 898b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool setDataBuffer(buffer_handle_t handle); 908b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 918b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void invalidateBufferCache(); 928b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 938b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // display device 948b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool assignToDevice(int disp); 958b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 968b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // hardware operations 978b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool flip(void *ctx); 988b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void postFlip(); 998b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1008b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool reset(); 1018b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool enable() = 0; 1028b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool disable() = 0; 1038b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool isDisabled() = 0; 1048b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1058b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // set z order config 1068b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void setZOrderConfig(ZOrderConfig& config, 1078b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void *nativeConfig) = 0; 1088b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1098b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void setZOrder(int zorder); 1108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual int getZOrder() const; 1118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void* getContext() const = 0; 1138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool initialize(uint32_t bufferCount); 1158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void deinitialize(); 1168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprotected: 1188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void checkPosition(int& x, int& y, int& w, int& h); 1198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool setDataBuffer(BufferMapper& mapper) = 0; 1208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprivate: 1218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol inline BufferMapper* mapBuffer(DataBuffer *buffer); 1228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol inline int findActiveBuffer(BufferMapper *mapper); 1248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void updateActiveBuffers(BufferMapper *mapper); 1258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void invalidateActiveBuffers(); 1268b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprotected: 1278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mIndex; 1288b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mType; 1298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mZOrder; 1308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mDevice; 1318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mInitialized; 1328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // cached data buffers 1348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol KeyedVector<uint64_t, BufferMapper*> mDataBuffers; 1358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // holding the most recent buffers 1368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Vector<BufferMapper*> mActiveBuffers; 1378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mCacheCapacity; 1388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol PlanePosition mPosition; 1408b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol crop_t mSrcCrop; 1418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mIsProtectedBuffer; 1428b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mTransform; 1438b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint8_t mPlaneAlpha; 1448b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mBlending; 1458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol buffer_handle_t mCurrentDataBuffer; 1468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mUpdateMasks; 1478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol drmModeModeInfo mModeInfo; 1488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mPanelOrientation; 1498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol}; 1508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} // namespace intel 1528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} // namespace android 1538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#endif /* DISPLAYPLANE_H_ */ 155