hwcTestLib.h revision b685c542836b93c99cd85053e07696406ea37adb
1734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller/* 2734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * Copyright (C) 2011 The Android Open Source Project 3734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * 4734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * Licensed under the Apache License, Version 2.0 (the "License"); 5734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * you may not use this file except in compliance with the License. 6734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * You may obtain a copy of the License at 7734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * 8734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * http://www.apache.org/licenses/LICENSE-2.0 9734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * 10734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * Unless required by applicable law or agreed to in writing, software 11734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * distributed under the License is distributed on an "AS IS" BASIS, 12734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * See the License for the specific language governing permissions and 14734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * limitations under the License. 15734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * 16734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller */ 17734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 18734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller/* 19734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller * Hardware Composer Test Library Header 20734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller */ 21734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 22734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <sstream> 23734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <string> 24734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 25734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <EGL/egl.h> 26734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <EGL/eglext.h> 27734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <GLES2/gl2.h> 28734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <GLES2/gl2ext.h> 29734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 30734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <ui/FramebufferNativeWindow.h> 31734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <ui/GraphicBuffer.h> 32734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 33734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <utils/Log.h> 34734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <testUtil.h> 35734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 36734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller#include <hardware/hwcomposer.h> 37734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 38734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller// Characteristics of known graphic formats 39734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillerconst struct hwcTestGraphicFormat { 40734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller uint32_t format; 41734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller const char *desc; 42734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller uint32_t wMod, hMod; // Width/height mod this value must equal zero 43734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller} hwcTestGraphicFormat[] = { 44734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller {HAL_PIXEL_FORMAT_RGBA_8888, "RGBA8888", 1, 1}, 45734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller {HAL_PIXEL_FORMAT_RGBX_8888, "RGBX8888", 1, 1}, 46734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller {HAL_PIXEL_FORMAT_RGB_888, "RGB888", 1, 1}, 47734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller {HAL_PIXEL_FORMAT_RGB_565, "RGB565", 1, 1}, 48734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller {HAL_PIXEL_FORMAT_BGRA_8888, "BGRA8888", 1, 1}, 49734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller {HAL_PIXEL_FORMAT_RGBA_5551, "RGBA5551", 1, 1}, 50734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller {HAL_PIXEL_FORMAT_RGBA_4444, "RGBA4444", 1, 1}, 51734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller {HAL_PIXEL_FORMAT_YV12, "YV12", 2, 2}, 52734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller}; 53734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 54734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller// Represent RGB color as fraction of color components. 55734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller// Each of the color components are expected in the range [0.0, 1.0] 56734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillerclass ColorFract { 57734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller public: 58734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller ColorFract(): _c1(0.0), _c2(0.0), _c3(0.0) {}; 59734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller ColorFract(float c1, float c2, float c3): _c1(c1), _c2(c2), _c3(c3) {}; 60734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float c1(void) const { return _c1; } 61734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float c2(void) const { return _c2; } 62734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float c3(void) const { return _c3; } 63734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 64734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller operator std::string(); 65734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 66734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller private: 67734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float _c1; 68734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float _c2; 69734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float _c3; 70734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller}; 71734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 72734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller// Represent RGB color as fraction of color components. 73734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller// Each of the color components are expected in the range [0.0, 1.0] 74734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillerclass ColorRGB { 75734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller public: 76734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller ColorRGB(): _r(0.0), _g(0.0), _b(0.0) {}; 77734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller ColorRGB(float f): _r(f), _g(f), _b(f) {}; // Gray 78734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller ColorRGB(float r, float g, float b): _r(r), _g(g), _b(b) {}; 79734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float r(void) const { return _r; } 80734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float g(void) const { return _g; } 81734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float b(void) const { return _b; } 82734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 83734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller private: 84734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float _r; 85734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float _g; 86734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float _b; 87734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller}; 88734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 89734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller// Dimension - width and height of a rectanguler area 90734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillerclass HwcTestDim { 91734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller public: 92734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller HwcTestDim(): _w(0), _h(0) {}; 93734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller HwcTestDim(uint32_t w, uint32_t h) : _w(w), _h(h) {} 94734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller uint32_t width(void) const { return _w; } 95734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller uint32_t height(void) const { return _h; } 96734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller void setWidth(uint32_t w) { _w = w; } 97734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller void setHeight(uint32_t h) { _h = h; } 98734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 99734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller operator std::string(); 100653f81087920d479d8916a6ae6d2575dd80ed665Louis Huemiller operator hwc_rect() const; 101734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 102734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller private: 103734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller uint32_t _w; 104734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller uint32_t _h; 105734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller}; 106734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 107734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller// Function Prototypes 108734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillervoid hwcTestInitDisplay(bool verbose, EGLDisplay *dpy, EGLSurface *surface, 109734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller EGLint *width, EGLint *height); 1105880cc573823148237eac9ab7bc586b8e4eb7160Jesse Hallvoid hwcTestOpenHwc(hwc_composer_device_1_t **hwcDevicePtr); 111734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillerconst struct hwcTestGraphicFormat *hwcTestGraphicFormatLookup(const char *desc); 112653f81087920d479d8916a6ae6d2575dd80ed665Louis Huemillerconst struct hwcTestGraphicFormat *hwcTestGraphicFormatLookup(uint32_t id); 113734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillerconst char *hwcTestGraphicFormat2str(uint32_t format); 114734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillerstd::string hwcTestRect2str(const struct hwc_rect& rect); 115734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 116b685c542836b93c99cd85053e07696406ea37adbJesse Hallhwc_display_contents_1_t *hwcTestCreateLayerList(size_t numLayers); 117b685c542836b93c99cd85053e07696406ea37adbJesse Hallvoid hwcTestFreeLayerList(hwc_display_contents_1_t *list); 118b685c542836b93c99cd85053e07696406ea37adbJesse Hallvoid hwcTestDisplayList(hwc_display_contents_1_t *list); 119b685c542836b93c99cd85053e07696406ea37adbJesse Hallvoid hwcTestDisplayListPrepareModifiable(hwc_display_contents_1_t *list); 120b685c542836b93c99cd85053e07696406ea37adbJesse Hallvoid hwcTestDisplayListHandles(hwc_display_contents_1_t *list); 121734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller 122734d8d898c6b0b315e431b231cc6759514da361bLouis Huemilleruint32_t hwcTestColor2Pixel(uint32_t format, ColorFract color, float alpha); 123734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillervoid hwcTestColorConvert(uint32_t fromFormat, uint32_t toFormat, 124734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller ColorFract& color); 125734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillervoid hwcTestSetPixel(android::GraphicBuffer *gBuf, unsigned char *buf, 126734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller uint32_t x, uint32_t y, uint32_t pixel); 127734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillervoid hwcTestFillColor(android::GraphicBuffer *gBuf, ColorFract color, 128734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller float alpha); 129734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillervoid hwcTestFillColorHBlend(android::GraphicBuffer *gBuf, 130734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller uint32_t colorFormat, 131734d8d898c6b0b315e431b231cc6759514da361bLouis Huemiller ColorFract startColor, ColorFract endColor); 132734d8d898c6b0b315e431b231cc6759514da361bLouis HuemillerColorFract hwcTestParseColor(std::istringstream& in, bool& error); 133734d8d898c6b0b315e431b231cc6759514da361bLouis Huemillerstruct hwc_rect hwcTestParseHwcRect(std::istringstream& in, bool& error); 134734d8d898c6b0b315e431b231cc6759514da361bLouis HuemillerHwcTestDim hwcTestParseDim(std::istringstream& in, bool& error); 135