19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_DISPLAY_HARDWARE_H 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_DISPLAY_HARDWARE_H 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/PixelFormat.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/Region.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 251473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian#include <GLES/gl.h> 261473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian#include <GLES/glext.h> 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <EGL/egl.h> 281473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian#include <EGL/eglext.h> 291473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 301473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian#include <pixelflinger/pixelflinger.h> 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32781953d62dc17d761e39540f0480e5ca7451cdbeMathias Agopian#include "GLExtensions.h" 33781953d62dc17d761e39540f0480e5ca7451cdbeMathias Agopian 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "DisplayHardware/DisplayHardwareBase.h" 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 381473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopianclass FramebufferNativeWindow; 39e0d5f5bcf5a8b26f4ad75f549cbf380b2c9faf20Mathias Agopianclass HWComposer; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass DisplayHardware : public DisplayHardwareBase 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 45781953d62dc17d761e39540f0480e5ca7451cdbeMathias Agopian COPY_BITS_EXTENSION = 0x00000008, 46781953d62dc17d761e39540f0480e5ca7451cdbeMathias Agopian BUFFER_PRESERVED = 0x00010000, 47781953d62dc17d761e39540f0480e5ca7451cdbeMathias Agopian PARTIAL_UPDATES = 0x00020000, // video driver feature 48781953d62dc17d761e39540f0480e5ca7451cdbeMathias Agopian SLOW_CONFIG = 0x00040000, // software 49781953d62dc17d761e39540f0480e5ca7451cdbeMathias Agopian SWAP_RECTANGLE = 0x00080000, 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DisplayHardware( 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const sp<SurfaceFlinger>& flinger, 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t displayIndex); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ~DisplayHardware(); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void releaseScreen() const; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void acquireScreen() const; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Flip the front and back buffers if the back buffer is "dirty". Might 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // be instantaneous, might involve copying the frame buffer around. 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void flip(const Region& dirty) const; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float getDpiX() const; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float getDpiY() const; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float getRefreshRate() const; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float getDensity() const; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int getWidth() const; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int getHeight() const; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PixelFormat getFormat() const; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getFlags() const; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void makeCurrent() const; 74967dce306267109a6e8aec408b65609ac5642a03Mathias Agopian uint32_t getMaxTextureSize() const; 75967dce306267109a6e8aec408b65609ac5642a03Mathias Agopian uint32_t getMaxViewportDims() const; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t getPageFlipCount() const; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLDisplay getEGLDisplay() const { return mDisplay; } 79e0d5f5bcf5a8b26f4ad75f549cbf380b2c9faf20Mathias Agopian 8094720d7ec40d2b5ee200d95a46588cdb0fb30e66Erik Gilling void dump(String8& res) const; 8194720d7ec40d2b5ee200d95a46588cdb0fb30e66Erik Gilling 82e0d5f5bcf5a8b26f4ad75f549cbf380b2c9faf20Mathias Agopian // Hardware Composer 83e0d5f5bcf5a8b26f4ad75f549cbf380b2c9faf20Mathias Agopian HWComposer& getHwComposer() const; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 85b1a1874625a6aca967601fcda53a82d8d712df45Mathias Agopian status_t compositionComplete() const; 86b1a1874625a6aca967601fcda53a82d8d712df45Mathias Agopian 8788cde07df05c275da4e6d5746d79847eea723855Mathias Agopian Rect getBounds() const { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Rect(mWidth, mHeight); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9088cde07df05c275da4e6d5746d79847eea723855Mathias Agopian inline Rect bounds() const { return getBounds(); } 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9204262e9f842edf20168399b6a70f0d67e518fe69Mathias Agopian // only for debugging 9304262e9f842edf20168399b6a70f0d67e518fe69Mathias Agopian int getCurrentBufferIndex() const; 9404262e9f842edf20168399b6a70f0d67e518fe69Mathias Agopian 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void init(uint32_t displayIndex) __attribute__((noinline)); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void fini() __attribute__((noinline)); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 99a0bd0d84555c8e503e05b60cd959406a47d76f70Mathias Agopian sp<SurfaceFlinger> mFlinger; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLDisplay mDisplay; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLSurface mSurface; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLContext mContext; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLConfig mConfig; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mDpiX; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mDpiY; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mRefreshRate; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float mDensity; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mWidth; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mHeight; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PixelFormat mFormat; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t mFlags; 1121473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian mutable uint32_t mPageFlipCount; 113c94dce521b57763c6ace6cee206214fd476fe8f9Mathias Agopian GLint mMaxViewportDims[2]; 114967dce306267109a6e8aec408b65609ac5642a03Mathias Agopian GLint mMaxTextureSize; 1151473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 116e0d5f5bcf5a8b26f4ad75f549cbf380b2c9faf20Mathias Agopian HWComposer* mHwc; 117e0d5f5bcf5a8b26f4ad75f549cbf380b2c9faf20Mathias Agopian 1181473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian sp<FramebufferNativeWindow> mNativeWindow; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // ANDROID_DISPLAY_HARDWARE_H 124