aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-graphics/wayland/weston/0003-Distorted-line-and-shadow-if-use-2d-com.patch
diff options
context:
space:
mode:
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.patch256
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 @@
+From 1fd17db2ab978322803683a4d2d847a0b31a4c1c Mon Sep 17 00:00:00 2001
+From: Prabhu Sundararaj <prabhu.sundararaj@freescale.com>
+Date: Tue, 24 Jun 2014 15:44:13 -0500
+Subject: [PATCH 3/3] ENGR00319247 : Distorted line and shadow if use 2d
+ compositor to run wayland apps.
+
+Fixed blending for shadown and maintained separate surface for damage composite.
+
+Upstream Status: N/A
+
+Signed-off-by: Prabhu Sundararaj <prabhu.sundararaj@freescale.com>
+---
+ src/compositor-fbdev.c | 8 ++--
+ src/gal2d-renderer.c | 102 +++++++++++++++++++++++++++++++++++--------------
+ src/gal2d-renderer.h | 6 +++
+ 3 files changed, 83 insertions(+), 33 deletions(-)
+
+diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
+index a3d32e5..b27d199 100644
+--- a/src/compositor-fbdev.c
++++ b/src/compositor-fbdev.c
+@@ -55,7 +55,7 @@ struct fbdev_compositor {
+ int use_pixman;
+ int use_gal2d;
+ struct wl_listener session_listener;
+- EGLNativeDisplayType display;
++ NativeDisplayType display;
+ };
+
+ struct fbdev_screeninfo {
+@@ -91,8 +91,8 @@ struct fbdev_output {
+ void *shadow_buf;
+ uint8_t depth;
+
+- EGLNativeDisplayType display;
+- EGLNativeWindowType window;
++ NativeDisplayType display;
++ NativeWindowType window;
+ };
+
+ struct fbdev_parameters {
+@@ -667,7 +667,7 @@ fbdev_output_create(struct fbdev_compositor *compositor,
+ return 0;
+ }
+ if (gl_renderer->output_create(&output->base,
+- (EGLNativeWindowType)output->window,
++ (NativeWindowType)output->window,
+ gl_renderer->opaque_attribs,
+ NULL) < 0) {
+ weston_log("gl_renderer_output_create failed.\n");
+diff --git a/src/gal2d-renderer.c b/src/gal2d-renderer.c
+index c651573..fbe39f6 100644
+--- a/src/gal2d-renderer.c
++++ b/src/gal2d-renderer.c
+@@ -42,7 +42,7 @@ struct gal2d_output_state {
+
+ int current_buffer;
+ pixman_region32_t buffer_damage[2];
+- EGLNativeDisplayType display;
++ NativeDisplayType display;
+ gcoSURF* renderSurf;
+ gctUINT32 nNumBuffers;
+ int activebuffer;
+@@ -423,11 +423,9 @@ gal2dBindBuffer(struct weston_surface* es)
+ gcoSURF surface = gs->gco_Surface;
+ struct weston_buffer *buffer = gs->buffer_ref.buffer;
+ gcePOOL pool = gcvPOOL_DEFAULT;
+- gctUINT64 node = 0;
+- gctUINT bytes;
+-
+- gcmVERIFY_OK(gcoSURF_QueryVidMemNode(surface, &node,
+- &pool, &bytes));
++
++ gcmVERIFY_OK(gcoSURF_QueryVidMemNode(surface, gcvNULL,
++ &pool, gcvNULL));
+
+ if(pool != gcvPOOL_USER)
+ {
+@@ -801,24 +799,26 @@ draw_view(struct weston_view *ev, struct weston_output *output,
+ ev->surface->width, ev->surface->height);
+ pixman_region32_subtract(&surface_blend, &surface_blend, &ev->surface->opaque);
+
++ struct gal2d_renderer *gr = get_renderer(ec);
++
+ if (pixman_region32_not_empty(&ev->surface->opaque)) {
+
+ repaint_region(ev, output, go, &repaint, &ev->surface->opaque);
+ }
+
+ if (pixman_region32_not_empty(&surface_blend)) {
+- struct gal2d_renderer *gr = get_renderer(ec);
+-
++
+ gco2D_EnableAlphaBlend(gr->gcoEngine2d,
+- ev->alpha * 0xFF, ev->alpha * 0xFF,
+- gcvSURF_PIXEL_ALPHA_STRAIGHT, gcvSURF_PIXEL_ALPHA_STRAIGHT,
+- gcvSURF_GLOBAL_ALPHA_OFF, gcvSURF_GLOBAL_ALPHA_OFF,
+- gcvSURF_BLEND_ONE, gcvSURF_BLEND_INVERSED,
+- gcvSURF_COLOR_STRAIGHT, gcvSURF_COLOR_STRAIGHT);
++ ev->alpha * 0xFF, ev->alpha * 0xFF,
++ gcvSURF_PIXEL_ALPHA_STRAIGHT, gcvSURF_PIXEL_ALPHA_STRAIGHT,
++ gcvSURF_GLOBAL_ALPHA_SCALE, gcvSURF_GLOBAL_ALPHA_SCALE,
++ gcvSURF_BLEND_STRAIGHT, gcvSURF_BLEND_INVERSED,
++ gcvSURF_COLOR_STRAIGHT, gcvSURF_COLOR_STRAIGHT);
+
+ repaint_region(ev, output, go, &repaint, &surface_blend);
+ }
+
++ gco2D_DisableAlphaBlend(gr->gcoEngine2d);
+ pixman_region32_fini(&surface_blend);
+
+ out:
+@@ -866,6 +866,48 @@ gal2d_renderer_repaint_output(struct weston_output *output,
+ }
+
+ static void
++gal2d_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer)
++{
++ gcsWL_VIV_BUFFER *vivBuffer = wl_resource_get_user_data(buffer->resource);
++ gctUINT width = 0;
++ gctUINT height = 0;
++ gctINT stride = 0;
++ gceSURF_FORMAT format;
++ gcoSURF srcSurf = vivBuffer->surface;
++ gctUINT32 physical;
++ gctPOINTER va =0;
++ gceSTATUS status = gcvSTATUS_OK;
++ struct gal2d_surface_state *gs = get_surface_state(es);
++
++ if(gs->gco_Surface == gcvNULL)
++ {
++ /** Construct a wrapper. */
++ gcmONERROR(gcoSURF_ConstructWrapper(gcvNULL, &gs->gco_Surface));
++ }
++
++ gcmONERROR(gcoSURF_GetAlignedSize(srcSurf, &width, &height, &stride));
++ gcmONERROR(gcoSURF_GetFormat(srcSurf, gcvNULL, &format));
++ gcmONERROR(gcoSURF_Lock(srcSurf, &physical, (gctPOINTER *)&va));
++
++ /* Set the buffer. */
++ gcmONERROR(gcoSURF_SetBuffer(gs->gco_Surface,
++ gcvSURF_BITMAP_NO_VIDMEM,
++ format,
++ stride,
++ (gctPOINTER) va,
++ (gctUINT32) physical));
++
++ /* Set the window. */
++ gcmONERROR(gcoSURF_SetWindow(gs->gco_Surface, 0, 0, width, height));
++
++ buffer->width = vivBuffer->width;
++ buffer->height = vivBuffer->height;
++
++ OnError:
++ galONERROR(status);
++}
++
++static void
+ gal2d_renderer_flush_damage(struct weston_surface *surface)
+ {
+ struct gal2d_surface_state *gs = get_surface_state(surface);
+@@ -900,10 +942,7 @@ gal2d_renderer_flush_damage(struct weston_surface *surface)
+ gal2dBindBuffer(surface);
+ }
+ else
+- {
+- gcsWL_VIV_BUFFER *vivBuffer = (gcsWL_VIV_BUFFER *)buffer;
+- gs->gco_Surface = vivBuffer->surface;
+- }
++ gal2d_renderer_attach_egl(surface, buffer);
+
+ done:
+ pixman_region32_fini(&gs->texture_damage);
+@@ -937,19 +976,17 @@ gal2d_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
+ }
+ }
+ else
+- {
+- gcsWL_VIV_BUFFER *vivBuffer = wl_resource_get_user_data(buffer->resource);
+- gs->gco_Surface = vivBuffer->surface;
+-
+- buffer->width = vivBuffer->width;
+- buffer->height = vivBuffer->height;
+- }
++ gal2d_renderer_attach_egl(es, buffer);
+ }
+
+ static void
+ surface_state_destroy(struct gal2d_surface_state *gs, struct gal2d_renderer *gr)
+ {
+- wl_list_remove(&gs->surface_destroy_listener.link);
++ if(gs->gco_Surface)
++ {
++ gcoSURF_Destroy(gs->gco_Surface);
++ }
++ wl_list_remove(&gs->surface_destroy_listener.link);
+ wl_list_remove(&gs->renderer_destroy_listener.link);
+ if(gs->surface)
+ gs->surface->renderer_state = NULL;
+@@ -1043,8 +1080,12 @@ gal2d_renderer_output_destroy(struct weston_output *output)
+ {
+ struct gal2d_output_state *go = get_output_state(output);
+ gctUINT32 i;
+-
+- if(go->nNumBuffers <= 1 )
++
++ for (i = 0; i < 2; i++)
++ {
++ pixman_region32_fini(&go->buffer_damage[i]);
++ }
++ if(go->nNumBuffers <= 1 )
+ {
+ if(go->offscreenSurface)
+ gcmVERIFY_OK(gcoSURF_Destroy(go->offscreenSurface));
+@@ -1107,8 +1148,8 @@ OnError:
+ }
+
+ static int
+-gal2d_renderer_output_create(struct weston_output *output, EGLNativeDisplayType display,
+- EGLNativeWindowType window)
++gal2d_renderer_output_create(struct weston_output *output, NativeDisplayType display,
++ NativeWindowType window)
+
+ {
+ struct gal2d_renderer *gr = get_renderer(output->compositor);
+@@ -1174,6 +1215,9 @@ gal2d_renderer_output_create(struct weston_output *output, EGLNativeDisplayType
+ gal2d_clear(output);
+ gal2d_flip_surface(output);
+ }
++
++ for (i = 0; i < 2; i++)
++ pixman_region32_init(&go->buffer_damage[i]);
+ OnError:
+ galONERROR(status);
+ /* Return the status. */
+diff --git a/src/gal2d-renderer.h b/src/gal2d-renderer.h
+index 3b89f73..1322a7d 100644
+--- a/src/gal2d-renderer.h
++++ b/src/gal2d-renderer.h
+@@ -24,7 +24,13 @@
+ #define __gal_2d_renderer_h_
+
+ #include "compositor.h"
++#ifdef ENABLE_EGL
+ #include <EGL/egl.h>
++#else
++#include <HAL/gc_hal_eglplatform.h>
++typedef HALNativeDisplayType NativeDisplayType;
++typedef HALNativeWindowType NativeWindowType;
++#endif
+
+
+ struct gal2d_renderer_interface {
+--
+2.0.0
+