DisplayDevice.h revision 9c6e297271ec9af9d974242d89cfa08cb6ceaa0a
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_DISPLAY_HARDWARE_H 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_DISPLAY_HARDWARE_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdlib.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h> 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/Region.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 25076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <GLES/gl.h> 26076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <GLES/glext.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <EGL/egl.h> 28076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <EGL/eglext.h> 29076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 30076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian#include <pixelflinger/pixelflinger.h> 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 321f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian#include "GLExtensions.h" 331f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "DisplayHardware/DisplayHardwareBase.h" 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 38076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianclass FramebufferNativeWindow; 39a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopianclass HWComposer; 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass DisplayHardware : public DisplayHardwareBase 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enum { 451f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian COPY_BITS_EXTENSION = 0x00000008, 461f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian BUFFER_PRESERVED = 0x00010000, 471f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian PARTIAL_UPDATES = 0x00020000, // video driver feature 481f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian SLOW_CONFIG = 0x00040000, // software 491f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian SWAP_RECTANGLE = 0x00080000, 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project DisplayHardware( 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const sp<SurfaceFlinger>& flinger, 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t displayIndex); 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ~DisplayHardware(); 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void releaseScreen() const; 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void acquireScreen() const; 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Flip the front and back buffers if the back buffer is "dirty". Might 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // be instantaneous, might involve copying the frame buffer around. 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void flip(const Region& dirty) const; 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getDpiX() const; 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getDpiY() const; 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getRefreshRate() const; 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getDensity() const; 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int getWidth() const; 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int getHeight() const; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat getFormat() const; 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t getFlags() const; 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void makeCurrent() const; 74ca99fb8f65f3ea249c56fb6dccefffb54e87696eMathias Agopian uint32_t getMaxTextureSize() const; 75ca99fb8f65f3ea249c56fb6dccefffb54e87696eMathias Agopian uint32_t getMaxViewportDims() const; 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t getPageFlipCount() const; 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLDisplay getEGLDisplay() const { return mDisplay; } 79a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian 801d21a9cafc534c34a2f28c985c4c7aa176d0e67bErik Gilling void dump(String8& res) const; 811d21a9cafc534c34a2f28c985c4c7aa176d0e67bErik Gilling 82a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian // Hardware Composer 83a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian HWComposer& getHwComposer() const; 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 8574faca212e2675aa55a30235c77cb6403471a4b9Mathias Agopian status_t compositionComplete() const; 8674faca212e2675aa55a30235c77cb6403471a4b9Mathias Agopian 879c6e297271ec9af9d974242d89cfa08cb6ceaa0aMathias Agopian Rect getBounds() const { 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return Rect(mWidth, mHeight); 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 909c6e297271ec9af9d974242d89cfa08cb6ceaa0aMathias Agopian inline Rect bounds() const { return getBounds(); } 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 9235b48d10bc9e064201d3d54d2d476314684a7a05Mathias Agopian // only for debugging 9335b48d10bc9e064201d3d54d2d476314684a7a05Mathias Agopian int getCurrentBufferIndex() const; 9435b48d10bc9e064201d3d54d2d476314684a7a05Mathias Agopian 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void init(uint32_t displayIndex) __attribute__((noinline)); 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void fini() __attribute__((noinline)); 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 99c7d14e247117392fbd44aa454622778a25c076aeMathias Agopian sp<SurfaceFlinger> mFlinger; 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLDisplay mDisplay; 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLSurface mSurface; 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLContext mContext; 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLConfig mConfig; 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mDpiX; 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mDpiY; 106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mRefreshRate; 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mDensity; 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int mWidth; 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int mHeight; 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat mFormat; 111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mFlags; 112076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian mutable uint32_t mPageFlipCount; 1133d64e738b91b2a4a9d81fae1991e6f6eae9ac8c8Mathias Agopian GLint mMaxViewportDims[2]; 114ca99fb8f65f3ea249c56fb6dccefffb54e87696eMathias Agopian GLint mMaxTextureSize; 115076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 116a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian HWComposer* mHwc; 117a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian 118076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian sp<FramebufferNativeWindow> mNativeWindow; 119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_DISPLAY_HARDWARE_H 124