1876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 2876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Copyright (C) Texas Instruments - http://www.ti.com/ 3876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 4876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Licensed under the Apache License, Version 2.0 (the "License"); 5876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * you may not use this file except in compliance with the License. 6876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * You may obtain a copy of the License at 7876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 8876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * http://www.apache.org/licenses/LICENSE-2.0 9876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 10876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Unless required by applicable law or agreed to in writing, software 11876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * distributed under the License is distributed on an "AS IS" BASIS, 12876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * See the License for the specific language governing permissions and 14876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * limitations under the License. 15876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 16876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#ifndef __RGZ_2D__ 17876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define __RGZ_2D__ 18876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 19876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#include <linux/bltsville.h> 20876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 21876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 22876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Maximum number of layers used to generate subregion rectangles in a 23876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * horizontal region. 24876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 25876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_MAXLAYERS 13 26876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 27876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 28876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Maximum number of layers the regionizer will accept as input. Account for an 29876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * additional 'background layer' to generate empty subregion rectangles. 30876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 31876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_INPUT_MAXLAYERS (RGZ_MAXLAYERS - 1) 32876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 33876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 34876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Regionizer data 35876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 36876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * This is an oqaque structure passed in by the client 37876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 38876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenstruct rgz; 39876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chentypedef struct rgz rgz_t; 40876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 41876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 42876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * With an open framebuffer file descriptor get the geometry of 43876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * the device 44876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 45876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenint rgz_get_screengeometry(int fd, struct bvsurfgeom *geom, int fmt); 46876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 47876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 48876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Regionizer input parameters 49876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 50876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenstruct rgz_in_hwc { 51876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int flags; 52876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int layerno; 53284005c3a0e0b21f28febca5ad1dd647f912d9feJason Simmons hwc_layer_1_t *layers; 54876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen struct bvsurfgeom *dstgeom; 55876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen}; 56876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 57876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chentypedef struct rgz_in_params { 58876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int op; /* See RGZ_IN_* */ 59876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen union { 60876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen struct rgz_in_hwc hwc; 61876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen } data; 62876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen} rgz_in_params_t; 63876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 64876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 65876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Validate whether the HWC layers can be rendered 66876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 67876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Arguments (rgz_in_params_t): 68876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * op RGZ_IN_HWCCHK 69876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.hwc.layers HWC layer array 70876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.hwc.layerno HWC layer array size 71876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 72876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Returns: 73876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * rv = RGZ_ALL, -1 failure 74876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 75876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_IN_HWCCHK 1 76876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 77876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 78876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Regionize the HWC layers 79876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 80876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * This generates region data which can be used with regionizer 81876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * output function. This call will validate whether all or some of the 82876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * layers can be rendered. 83876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 84876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * The caller must use rgz_release when done with the region data 85876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 86876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Arguments (rgz_in_params_t): 87876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * op RGZ_IN_HWC 88876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.hwc.layers HWC layer array 89876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.hwc.layerno HWC layer array size 90876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 91876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Returns: 92876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * rv = RGZ_ALL, -1 failure 93876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 94876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_IN_HWC 2 95876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 96876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenint rgz_in(rgz_in_params_t *param, rgz_t *rgz); 97876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 98876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* This means all layers can be blitted */ 99876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_ALL 1 100876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 101876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 102876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Free regionizer resources 103876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 104876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenvoid rgz_release(rgz_t *rgz); 105876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 106876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 107876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Regionizer output operations 108876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 109876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenstruct rgz_out_bvcmd { 110876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen void *cmdp; 111876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int cmdlen; 112876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen struct bvsurfgeom *dstgeom; 113876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int noblend; 114876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen buffer_handle_t out_hndls[RGZ_INPUT_MAXLAYERS]; /* OUTPUT */ 115876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int out_nhndls; /* OUTPUT */ 116876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int out_blits; /* OUTPUT */ 117876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen}; 118876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 119876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenstruct rgz_out_svg { 120876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int dispw; 121876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int disph; 122876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int htmlw; 123876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int htmlh; 124876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen}; 125876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 126876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenstruct rgz_out_bvdirect { 127876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen struct bvbuffdesc *dstdesc; 128876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen struct bvsurfgeom *dstgeom; 129876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int noblend; 130876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen}; 131876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 132876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chentypedef struct rgz_out_params { 133876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int op; /* See RGZ_OUT_* */ 134876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen union { 135876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen struct rgz_out_bvcmd bvc; 136876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen struct rgz_out_bvdirect bv; 137876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen struct rgz_out_svg svg; 138876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen } data; 139876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen} rgz_out_params_t; 140876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 141876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 142876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Regionizer output commands 143876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 144876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 145876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 146876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Output SVG from regionizer 147876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 148876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * rgz_out_params_t: 149876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 150876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * op RGZ_OUT_SVG 151876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.svg.dispw 152876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.svg.disph Display width and height these values will be the 153876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * viewport dimensions i.e. the logical coordinate space 154876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * rather than the physical size 155876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.svg.htmlw 156876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.svg.htmlh HTML output dimensions 157876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 158876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_OUT_SVG 0 159876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 160876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 161876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * This commands generates bltsville command data structures for HWC which will 162876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * paint layer by layer 163876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 164876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * rgz_out_params_t: 165876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 166876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * op RGZ_OUT_BVCMD_PAINT 167876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bvc.cmdp Pointer to buffer with cmd data 168876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bvc.cmdlen length of cmdp 169876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bvc.dstgeom bltsville struct describing the destination geometry 170876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bvc.noblend Test option to disable blending 171876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bvc.out_hndls Array of buffer handles (OUTPUT) 172876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bvc.out_nhndls Number of buffer handles (OUTPUT) 173876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bvc.out_blits Number of blits (OUTPUT) 174876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 175876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_OUT_BVCMD_PAINT 1 176876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 177876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 178876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * This commands generates bltsville command data structures for HWC which will 179876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * render via regions. This will involve a complete redraw of the screen. 180876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 181876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * See RGZ_OUT_BVCMD_PAINT 182876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 183876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_OUT_BVCMD_REGION 2 184876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 185876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 186876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Perform actual blits painting each layer from back to front - this is a test 187876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * command 188876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 189876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * rgz_out_params_t: 190876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 191876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * op RGZ_OUT_BVDIRECT_PAINT 192876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bv.dstdesc bltsville struct describing the destination buffer 193876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bv.dstgeom bltsville struct describing the destination geometry 194876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bv.list List of HWC layers to blit, only HWC_OVERLAY layers 195876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * will be rendered 196876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * data.bv.noblend Test option to disable blending 197876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 198876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_OUT_BVDIRECT_PAINT 3 199876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 200876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Perform actual blits where each blit is a subregion - this is a test mode 201876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 202876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_OUT_BVDIRECT_REGION 5 203876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 204876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenint rgz_out(rgz_t *rgz, rgz_out_params_t* params); 205876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 206876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 207876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Produce instrumented logging of layer data 208876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 209284005c3a0e0b21f28febca5ad1dd647f912d9feJason Simmonsvoid rgz_profile_hwc(hwc_display_contents_1_t* list, int dispw, int disph); 210876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 211876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 212876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * ---------------------------------- 213876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * IMPLEMENTATION DETAILS FOLLOW HERE 214876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * ---------------------------------- 215876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 216876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 217876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 218876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Regionizer blit data structures 219876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 220876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chentypedef struct blit_rect { 221876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int left, top, right, bottom; 222876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen} blit_rect_t; 223876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 224876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen/* 225876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * A hregion is a horizontal area generated from the intersection of layers 226876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * for a given composition. 227876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 228876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * ---------------------------------------- 229876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | layer 0 | 230876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | xxxxxxxxxxxxxxxxxx | 231876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | x layer 1 x | 232876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | x x | 233876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | x xxxxxxxxxxxxxxxxxxx 234876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | x x layer 2 x 235876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | x x x 236876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | xxxxxxxxxx x 237876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | x x 238876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | x x 239876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * ---------------------xxxxxxxxxxxxxxxxxxx 240876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 241876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * This can be broken up into a number of horizontal regions: 242876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 243876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * ---------------------------------------- 244876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | H1 l0 | 245876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * |-----------xxxxxxxxxxxxxxxxxx---------| 246876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | H2 x x | 247876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | l0 x l01 x l0 | 248876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * |-----------x--------xxxxxxxxxxxxxxxxxxx 249876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | H3 x x x x 250876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | l0 x l01 x l012 x l02 x 251876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * |-----------xxxxxxxxxxxxxxxxxx---------x 252876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | H4 x x 253876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * | l0 x l02 x 254876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * ---------------------xxxxxxxxxxxxxxxxxxx 255876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * 256876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * Each hregion is just an array of rectangles. By accounting for the layers 257876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * at different z-order, and hregion becomes a multi-dimensional array e.g. in 258876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * the diagram above H4 has 2 sub-regions, layer 0 intersects with the first 259876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen * region and layers 0 and 2 intersect with the second region. 260876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen */ 261876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_SUBREGIONMAX ((RGZ_MAXLAYERS << 1) - 1) 262876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#define RGZ_MAX_BLITS (RGZ_SUBREGIONMAX * RGZ_SUBREGIONMAX) 263876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 264876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chentypedef struct rgz_layer { 265284005c3a0e0b21f28febca5ad1dd647f912d9feJason Simmons hwc_layer_1_t *hwc_layer; 266876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int buffidx; 267876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int dirty_count; 268876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen void* dirty_hndl; 269876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen} rgz_layer_t; 270876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 271876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chentypedef struct blit_hregion { 272876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen blit_rect_t rect; 273876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen rgz_layer_t *rgz_layers[RGZ_MAXLAYERS]; 274876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int nlayers; 275876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int nsubregions; 276876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen blit_rect_t blitrects[RGZ_MAXLAYERS][RGZ_SUBREGIONMAX]; /* z-order | rectangle */ 277876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen} blit_hregion_t; 278876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 279876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenenum { RGZ_STATE_INIT = 1, RGZ_REGION_DATA = 2} ; 280876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 281876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chenstruct rgz { 282876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen /* All fields here are opaque to the caller */ 283876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen blit_hregion_t *hregions; 284876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int nhregions; 285876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen int state; 286876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen unsigned int rgz_layerno; 287876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen rgz_layer_t rgz_layers[RGZ_MAXLAYERS]; 288876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen}; 289876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen 290876331fc77f6763c8c390d1289ead00f89f8d9feMike J. Chen#endif /* __RGZ_2D__ */ 291