diff options
Diffstat (limited to 'recipes-graphics/wayland/weston/0003-Distorted-line-and-shadow-if-use-2d-com.patch')
-rw-r--r-- | recipes-graphics/wayland/weston/0003-Distorted-line-and-shadow-if-use-2d-com.patch | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/recipes-graphics/wayland/weston/0003-Distorted-line-and-shadow-if-use-2d-com.patch b/recipes-graphics/wayland/weston/0003-Distorted-line-and-shadow-if-use-2d-com.patch new file mode 100644 index 0000000..0e7ffd0 --- /dev/null +++ b/recipes-graphics/wayland/weston/0003-Distorted-line-and-shadow-if-use-2d-com.patch | |||
@@ -0,0 +1,256 @@ | |||
1 | From 1fd17db2ab978322803683a4d2d847a0b31a4c1c Mon Sep 17 00:00:00 2001 | ||
2 | From: Prabhu Sundararaj <prabhu.sundararaj@freescale.com> | ||
3 | Date: Tue, 24 Jun 2014 15:44:13 -0500 | ||
4 | Subject: [PATCH 3/3] ENGR00319247 : Distorted line and shadow if use 2d | ||
5 | compositor to run wayland apps. | ||
6 | |||
7 | Fixed blending for shadown and maintained separate surface for damage composite. | ||
8 | |||
9 | Upstream Status: N/A | ||
10 | |||
11 | Signed-off-by: Prabhu Sundararaj <prabhu.sundararaj@freescale.com> | ||
12 | --- | ||
13 | src/compositor-fbdev.c | 8 ++-- | ||
14 | src/gal2d-renderer.c | 102 +++++++++++++++++++++++++++++++++++-------------- | ||
15 | src/gal2d-renderer.h | 6 +++ | ||
16 | 3 files changed, 83 insertions(+), 33 deletions(-) | ||
17 | |||
18 | diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c | ||
19 | index a3d32e5..b27d199 100644 | ||
20 | --- a/src/compositor-fbdev.c | ||
21 | +++ b/src/compositor-fbdev.c | ||
22 | @@ -55,7 +55,7 @@ struct fbdev_compositor { | ||
23 | int use_pixman; | ||
24 | int use_gal2d; | ||
25 | struct wl_listener session_listener; | ||
26 | - EGLNativeDisplayType display; | ||
27 | + NativeDisplayType display; | ||
28 | }; | ||
29 | |||
30 | struct fbdev_screeninfo { | ||
31 | @@ -91,8 +91,8 @@ struct fbdev_output { | ||
32 | void *shadow_buf; | ||
33 | uint8_t depth; | ||
34 | |||
35 | - EGLNativeDisplayType display; | ||
36 | - EGLNativeWindowType window; | ||
37 | + NativeDisplayType display; | ||
38 | + NativeWindowType window; | ||
39 | }; | ||
40 | |||
41 | struct fbdev_parameters { | ||
42 | @@ -667,7 +667,7 @@ fbdev_output_create(struct fbdev_compositor *compositor, | ||
43 | return 0; | ||
44 | } | ||
45 | if (gl_renderer->output_create(&output->base, | ||
46 | - (EGLNativeWindowType)output->window, | ||
47 | + (NativeWindowType)output->window, | ||
48 | gl_renderer->opaque_attribs, | ||
49 | NULL) < 0) { | ||
50 | weston_log("gl_renderer_output_create failed.\n"); | ||
51 | diff --git a/src/gal2d-renderer.c b/src/gal2d-renderer.c | ||
52 | index c651573..fbe39f6 100644 | ||
53 | --- a/src/gal2d-renderer.c | ||
54 | +++ b/src/gal2d-renderer.c | ||
55 | @@ -42,7 +42,7 @@ struct gal2d_output_state { | ||
56 | |||
57 | int current_buffer; | ||
58 | pixman_region32_t buffer_damage[2]; | ||
59 | - EGLNativeDisplayType display; | ||
60 | + NativeDisplayType display; | ||
61 | gcoSURF* renderSurf; | ||
62 | gctUINT32 nNumBuffers; | ||
63 | int activebuffer; | ||
64 | @@ -423,11 +423,9 @@ gal2dBindBuffer(struct weston_surface* es) | ||
65 | gcoSURF surface = gs->gco_Surface; | ||
66 | struct weston_buffer *buffer = gs->buffer_ref.buffer; | ||
67 | gcePOOL pool = gcvPOOL_DEFAULT; | ||
68 | - gctUINT64 node = 0; | ||
69 | - gctUINT bytes; | ||
70 | - | ||
71 | - gcmVERIFY_OK(gcoSURF_QueryVidMemNode(surface, &node, | ||
72 | - &pool, &bytes)); | ||
73 | + | ||
74 | + gcmVERIFY_OK(gcoSURF_QueryVidMemNode(surface, gcvNULL, | ||
75 | + &pool, gcvNULL)); | ||
76 | |||
77 | if(pool != gcvPOOL_USER) | ||
78 | { | ||
79 | @@ -801,24 +799,26 @@ draw_view(struct weston_view *ev, struct weston_output *output, | ||
80 | ev->surface->width, ev->surface->height); | ||
81 | pixman_region32_subtract(&surface_blend, &surface_blend, &ev->surface->opaque); | ||
82 | |||
83 | + struct gal2d_renderer *gr = get_renderer(ec); | ||
84 | + | ||
85 | if (pixman_region32_not_empty(&ev->surface->opaque)) { | ||
86 | |||
87 | repaint_region(ev, output, go, &repaint, &ev->surface->opaque); | ||
88 | } | ||
89 | |||
90 | if (pixman_region32_not_empty(&surface_blend)) { | ||
91 | - struct gal2d_renderer *gr = get_renderer(ec); | ||
92 | - | ||
93 | + | ||
94 | gco2D_EnableAlphaBlend(gr->gcoEngine2d, | ||
95 | - ev->alpha * 0xFF, ev->alpha * 0xFF, | ||
96 | - gcvSURF_PIXEL_ALPHA_STRAIGHT, gcvSURF_PIXEL_ALPHA_STRAIGHT, | ||
97 | - gcvSURF_GLOBAL_ALPHA_OFF, gcvSURF_GLOBAL_ALPHA_OFF, | ||
98 | - gcvSURF_BLEND_ONE, gcvSURF_BLEND_INVERSED, | ||
99 | - gcvSURF_COLOR_STRAIGHT, gcvSURF_COLOR_STRAIGHT); | ||
100 | + ev->alpha * 0xFF, ev->alpha * 0xFF, | ||
101 | + gcvSURF_PIXEL_ALPHA_STRAIGHT, gcvSURF_PIXEL_ALPHA_STRAIGHT, | ||
102 | + gcvSURF_GLOBAL_ALPHA_SCALE, gcvSURF_GLOBAL_ALPHA_SCALE, | ||
103 | + gcvSURF_BLEND_STRAIGHT, gcvSURF_BLEND_INVERSED, | ||
104 | + gcvSURF_COLOR_STRAIGHT, gcvSURF_COLOR_STRAIGHT); | ||
105 | |||
106 | repaint_region(ev, output, go, &repaint, &surface_blend); | ||
107 | } | ||
108 | |||
109 | + gco2D_DisableAlphaBlend(gr->gcoEngine2d); | ||
110 | pixman_region32_fini(&surface_blend); | ||
111 | |||
112 | out: | ||
113 | @@ -866,6 +866,48 @@ gal2d_renderer_repaint_output(struct weston_output *output, | ||
114 | } | ||
115 | |||
116 | static void | ||
117 | +gal2d_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer) | ||
118 | +{ | ||
119 | + gcsWL_VIV_BUFFER *vivBuffer = wl_resource_get_user_data(buffer->resource); | ||
120 | + gctUINT width = 0; | ||
121 | + gctUINT height = 0; | ||
122 | + gctINT stride = 0; | ||
123 | + gceSURF_FORMAT format; | ||
124 | + gcoSURF srcSurf = vivBuffer->surface; | ||
125 | + gctUINT32 physical; | ||
126 | + gctPOINTER va =0; | ||
127 | + gceSTATUS status = gcvSTATUS_OK; | ||
128 | + struct gal2d_surface_state *gs = get_surface_state(es); | ||
129 | + | ||
130 | + if(gs->gco_Surface == gcvNULL) | ||
131 | + { | ||
132 | + /** Construct a wrapper. */ | ||
133 | + gcmONERROR(gcoSURF_ConstructWrapper(gcvNULL, &gs->gco_Surface)); | ||
134 | + } | ||
135 | + | ||
136 | + gcmONERROR(gcoSURF_GetAlignedSize(srcSurf, &width, &height, &stride)); | ||
137 | + gcmONERROR(gcoSURF_GetFormat(srcSurf, gcvNULL, &format)); | ||
138 | + gcmONERROR(gcoSURF_Lock(srcSurf, &physical, (gctPOINTER *)&va)); | ||
139 | + | ||
140 | + /* Set the buffer. */ | ||
141 | + gcmONERROR(gcoSURF_SetBuffer(gs->gco_Surface, | ||
142 | + gcvSURF_BITMAP_NO_VIDMEM, | ||
143 | + format, | ||
144 | + stride, | ||
145 | + (gctPOINTER) va, | ||
146 | + (gctUINT32) physical)); | ||
147 | + | ||
148 | + /* Set the window. */ | ||
149 | + gcmONERROR(gcoSURF_SetWindow(gs->gco_Surface, 0, 0, width, height)); | ||
150 | + | ||
151 | + buffer->width = vivBuffer->width; | ||
152 | + buffer->height = vivBuffer->height; | ||
153 | + | ||
154 | + OnError: | ||
155 | + galONERROR(status); | ||
156 | +} | ||
157 | + | ||
158 | +static void | ||
159 | gal2d_renderer_flush_damage(struct weston_surface *surface) | ||
160 | { | ||
161 | struct gal2d_surface_state *gs = get_surface_state(surface); | ||
162 | @@ -900,10 +942,7 @@ gal2d_renderer_flush_damage(struct weston_surface *surface) | ||
163 | gal2dBindBuffer(surface); | ||
164 | } | ||
165 | else | ||
166 | - { | ||
167 | - gcsWL_VIV_BUFFER *vivBuffer = (gcsWL_VIV_BUFFER *)buffer; | ||
168 | - gs->gco_Surface = vivBuffer->surface; | ||
169 | - } | ||
170 | + gal2d_renderer_attach_egl(surface, buffer); | ||
171 | |||
172 | done: | ||
173 | pixman_region32_fini(&gs->texture_damage); | ||
174 | @@ -937,19 +976,17 @@ gal2d_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer) | ||
175 | } | ||
176 | } | ||
177 | else | ||
178 | - { | ||
179 | - gcsWL_VIV_BUFFER *vivBuffer = wl_resource_get_user_data(buffer->resource); | ||
180 | - gs->gco_Surface = vivBuffer->surface; | ||
181 | - | ||
182 | - buffer->width = vivBuffer->width; | ||
183 | - buffer->height = vivBuffer->height; | ||
184 | - } | ||
185 | + gal2d_renderer_attach_egl(es, buffer); | ||
186 | } | ||
187 | |||
188 | static void | ||
189 | surface_state_destroy(struct gal2d_surface_state *gs, struct gal2d_renderer *gr) | ||
190 | { | ||
191 | - wl_list_remove(&gs->surface_destroy_listener.link); | ||
192 | + if(gs->gco_Surface) | ||
193 | + { | ||
194 | + gcoSURF_Destroy(gs->gco_Surface); | ||
195 | + } | ||
196 | + wl_list_remove(&gs->surface_destroy_listener.link); | ||
197 | wl_list_remove(&gs->renderer_destroy_listener.link); | ||
198 | if(gs->surface) | ||
199 | gs->surface->renderer_state = NULL; | ||
200 | @@ -1043,8 +1080,12 @@ gal2d_renderer_output_destroy(struct weston_output *output) | ||
201 | { | ||
202 | struct gal2d_output_state *go = get_output_state(output); | ||
203 | gctUINT32 i; | ||
204 | - | ||
205 | - if(go->nNumBuffers <= 1 ) | ||
206 | + | ||
207 | + for (i = 0; i < 2; i++) | ||
208 | + { | ||
209 | + pixman_region32_fini(&go->buffer_damage[i]); | ||
210 | + } | ||
211 | + if(go->nNumBuffers <= 1 ) | ||
212 | { | ||
213 | if(go->offscreenSurface) | ||
214 | gcmVERIFY_OK(gcoSURF_Destroy(go->offscreenSurface)); | ||
215 | @@ -1107,8 +1148,8 @@ OnError: | ||
216 | } | ||
217 | |||
218 | static int | ||
219 | -gal2d_renderer_output_create(struct weston_output *output, EGLNativeDisplayType display, | ||
220 | - EGLNativeWindowType window) | ||
221 | +gal2d_renderer_output_create(struct weston_output *output, NativeDisplayType display, | ||
222 | + NativeWindowType window) | ||
223 | |||
224 | { | ||
225 | struct gal2d_renderer *gr = get_renderer(output->compositor); | ||
226 | @@ -1174,6 +1215,9 @@ gal2d_renderer_output_create(struct weston_output *output, EGLNativeDisplayType | ||
227 | gal2d_clear(output); | ||
228 | gal2d_flip_surface(output); | ||
229 | } | ||
230 | + | ||
231 | + for (i = 0; i < 2; i++) | ||
232 | + pixman_region32_init(&go->buffer_damage[i]); | ||
233 | OnError: | ||
234 | galONERROR(status); | ||
235 | /* Return the status. */ | ||
236 | diff --git a/src/gal2d-renderer.h b/src/gal2d-renderer.h | ||
237 | index 3b89f73..1322a7d 100644 | ||
238 | --- a/src/gal2d-renderer.h | ||
239 | +++ b/src/gal2d-renderer.h | ||
240 | @@ -24,7 +24,13 @@ | ||
241 | #define __gal_2d_renderer_h_ | ||
242 | |||
243 | #include "compositor.h" | ||
244 | +#ifdef ENABLE_EGL | ||
245 | #include <EGL/egl.h> | ||
246 | +#else | ||
247 | +#include <HAL/gc_hal_eglplatform.h> | ||
248 | +typedef HALNativeDisplayType NativeDisplayType; | ||
249 | +typedef HALNativeWindowType NativeWindowType; | ||
250 | +#endif | ||
251 | |||
252 | |||
253 | struct gal2d_renderer_interface { | ||
254 | -- | ||
255 | 2.0.0 | ||
256 | |||