DisplayDevice.h revision edbf3b6af777b721cd2a1ef461947e51e88241e1
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
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <EGL/egl.h>
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "DisplayHardware/DisplayHardwareBase.h"
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct overlay_control_device_t;
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct copybit_device_t;
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct copybit_image_t;
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct copybit_t;
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass EGLDisplaySurface;
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass DisplayHardware : public DisplayHardwareBase
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    enum {
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        DIRECT_TEXTURE          = 0x00000002,
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        SWAP_RECTANGLE_EXTENSION= 0x00000004,
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        COPY_BITS_EXTENSION     = 0x00000008,
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        NPOT_EXTENSION          = 0x00000100,
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        DRAW_TEXTURE_EXTENSION  = 0x00000200,
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        BUFFER_PRESERVED        = 0x00010000,
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        UPDATE_ON_DEMAND        = 0x00020000,   // video driver feature
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        SLOW_CONFIG             = 0x00040000,   // software
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;
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    uint32_t getPageFlipCount() const;
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void getDisplaySurface(copybit_image_t* img) const;
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void getDisplaySurface(GGLSurface* fb) const;
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    EGLDisplay getEGLDisplay() const { return mDisplay; }
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    copybit_device_t* getBlitEngine() const { return mBlitEngine; }
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    overlay_control_device_t* getOverlayEngine() const { return mOverlayEngine; }
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void copyFrontToImage(const copybit_image_t& front) const;
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void copyBackToImage(const copybit_image_t& front) const;
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    Rect bounds() const {
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        return Rect(mWidth, mHeight);
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void init(uint32_t displayIndex) __attribute__((noinline));
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void fini() __attribute__((noinline));
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    EGLDisplay      mDisplay;
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    EGLSurface      mSurface;
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    EGLContext      mContext;
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    EGLConfig       mConfig;
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    float           mDpiX;
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    float           mDpiY;
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    float           mRefreshRate;
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    float           mDensity;
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int             mWidth;
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int             mHeight;
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    PixelFormat     mFormat;
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    uint32_t        mFlags;
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mutable Region  mDirty;
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<EGLDisplaySurface> mDisplaySurface;
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    copybit_device_t*     mBlitEngine;
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    overlay_control_device_t* mOverlayEngine;
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_DISPLAY_HARDWARE_H
114