DisplayDevice.h revision a350ff98692b3a50cad5cc93f9f83221242ca86a
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 Projectstruct overlay_control_device_t; 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 40076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianclass FramebufferNativeWindow; 41a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopianclass HWComposer; 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass DisplayHardware : public DisplayHardwareBase 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enum { 471f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian COPY_BITS_EXTENSION = 0x00000008, 481f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian BUFFER_PRESERVED = 0x00010000, 491f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian PARTIAL_UPDATES = 0x00020000, // video driver feature 501f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian SLOW_CONFIG = 0x00040000, // software 511f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian SWAP_RECTANGLE = 0x00080000, 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project DisplayHardware( 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const sp<SurfaceFlinger>& flinger, 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t displayIndex); 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ~DisplayHardware(); 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void releaseScreen() const; 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void acquireScreen() const; 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Flip the front and back buffers if the back buffer is "dirty". Might 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // be instantaneous, might involve copying the frame buffer around. 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void flip(const Region& dirty) const; 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getDpiX() const; 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getDpiY() const; 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getRefreshRate() const; 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float getDensity() const; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int getWidth() const; 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int getHeight() const; 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat getFormat() const; 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t getFlags() const; 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void makeCurrent() const; 76ca99fb8f65f3ea249c56fb6dccefffb54e87696eMathias Agopian uint32_t getMaxTextureSize() const; 77ca99fb8f65f3ea249c56fb6dccefffb54e87696eMathias Agopian uint32_t getMaxViewportDims() const; 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t getPageFlipCount() const; 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLDisplay getEGLDisplay() const { return mDisplay; } 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project overlay_control_device_t* getOverlayEngine() const { return mOverlayEngine; } 82a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian 83a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian // Hardware Composer 84a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian HWComposer& getHwComposer() const; 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 8674faca212e2675aa55a30235c77cb6403471a4b9Mathias Agopian status_t compositionComplete() const; 8774faca212e2675aa55a30235c77cb6403471a4b9Mathias Agopian 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Rect bounds() const { 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return Rect(mWidth, mHeight); 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void init(uint32_t displayIndex) __attribute__((noinline)); 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void fini() __attribute__((noinline)); 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLDisplay mDisplay; 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLSurface mSurface; 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLContext mContext; 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLConfig mConfig; 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mDpiX; 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mDpiY; 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mRefreshRate; 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project float mDensity; 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int mWidth; 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int mHeight; 106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project PixelFormat mFormat; 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mFlags; 108076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian mutable uint32_t mPageFlipCount; 109ca99fb8f65f3ea249c56fb6dccefffb54e87696eMathias Agopian GLint mMaxViewportDims; 110ca99fb8f65f3ea249c56fb6dccefffb54e87696eMathias Agopian GLint mMaxTextureSize; 111076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 112a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian HWComposer* mHwc; 113a350ff98692b3a50cad5cc93f9f83221242ca86aMathias Agopian 114076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian sp<FramebufferNativeWindow> mNativeWindow; 115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project overlay_control_device_t* mOverlayEngine; 116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_DISPLAY_HARDWARE_H 121