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