Merge lp://qastaging/~linaro-graphics-wg/compiz-core/linaro-gles2 into lp://qastaging/compiz-core/0.9.5

Proposed by Sam Spilsbury
Status: Superseded
Proposed branch: lp://qastaging/~linaro-graphics-wg/compiz-core/linaro-gles2
Merge into: lp://qastaging/compiz-core/0.9.5
Diff against target: 41667 lines (+29201/-5352) (has conflicts)
161 files modified
CMakeLists.txt (+26/-0)
VERSION (+4/-0)
cmake/CMakeLists.txt (+2/-0)
cmake/CompizCommon.cmake (+67/-0)
cmake/CompizGSettings.cmake (+76/-0)
cmake/CompizPlugin.cmake (+14/-10)
cmake/FindOpenGLES2.cmake (+51/-0)
cmake/base.cmake (+3/-1)
cmake/plugin_extensions/CompizGenGSettings.cmake (+0/-104)
cmake/plugin_extensions/CompizOpenGLFixups.cmake (+22/-0)
gtk/CMakeLists.txt (+1/-1)
gtk/config.h.gtk.in (+0/-25)
gtk/gnome/CMakeLists.txt (+74/-0)
gtk/gnome/compiz.desktop.in (+1/-1)
gtk/window-decorator/actionmenu.c (+0/-133)
gtk/window-decorator/blurprops.c (+0/-89)
gtk/window-decorator/cairo.c (+915/-0)
gtk/window-decorator/decorator.c (+1301/-0)
gtk/window-decorator/decorprops.c (+161/-0)
gtk/window-decorator/events.c (+1177/-0)
gtk/window-decorator/forcequit.c (+0/-201)
gtk/window-decorator/frames.c (+316/-0)
gtk/window-decorator/gdk.c (+0/-106)
gtk/window-decorator/gtk-window-decorator.c (+453/-0)
gtk/window-decorator/gtk-window-decorator.h (+1140/-0)
gtk/window-decorator/gwd.schemas.in (+81/-0)
gtk/window-decorator/metacity.c (+1634/-0)
gtk/window-decorator/settings.c (+546/-0)
gtk/window-decorator/style.c (+0/-66)
gtk/window-decorator/switcher.c (+512/-0)
gtk/window-decorator/util.c (+0/-299)
gtk/window-decorator/wnck.c (+709/-0)
include/core/core.h (+4/-0)
include/core/rect.h.OTHER (+229/-0)
include/core/screen.h (+3/-1)
include/core/window.h (+28/-1)
include/decoration.h (+50/-59)
kde/window-decorator-kde4/decorator.cpp (+6/-17)
kde/window-decorator-kde4/decorator.h (+2/-19)
kde/window-decorator-kde4/switcher.cpp (+5/-10)
kde/window-decorator-kde4/utils.cpp (+2/-0)
kde/window-decorator-kde4/window.cpp (+14/-110)
kde/window-decorator-kde4/window.h (+1/-1)
libdecoration/decoration.c (+88/-112)
metadata/core.xml.in (+3/-3)
plugins/annotate/src/annotate.cpp (+160/-86)
plugins/bailer/CMakeLists.txt (+5/-0)
plugins/bailer/bailer.xml.in (+82/-0)
plugins/bailer/src/bailer.cpp (+277/-0)
plugins/bailer/src/bailer.h (+86/-0)
plugins/blur/CMakeLists.txt (+12/-12)
plugins/clone/src/clone.cpp (+4/-9)
plugins/compiztoolbox/include/compiztoolbox/compiztoolbox.h (+1/-1)
plugins/compiztoolbox/src/compiztoolbox.cpp (+14/-28)
plugins/composite/include/composite/composite.h (+26/-13)
plugins/composite/src/privates.h (+12/-0)
plugins/composite/src/screen.cpp (+77/-0)
plugins/copytex/src/copytex.cpp (+9/-0)
plugins/cube/CMakeLists.txt (+1/-1)
plugins/cube/cube.xml.in (+7/-6)
plugins/cube/src/cube.cpp (+40/-39)
plugins/debugspew/CMakeLists.txt (+5/-0)
plugins/debugspew/debugspew.xml.in (+24/-0)
plugins/debugspew/src/debugspew.cpp (+622/-0)
plugins/debugspew/src/debugspew.h (+55/-0)
plugins/decor/decor.xml.in (+38/-0)
plugins/decor/src/decor.cpp (+338/-885)
plugins/decor/src/decor.h (+14/-36)
plugins/detection/CMakeLists.txt (+5/-0)
plugins/detection/detection.xml.in (+28/-0)
plugins/detection/src/detection.cpp (+74/-0)
plugins/detection/src/detection.h (+52/-0)
plugins/fade/fade.xml.in (+2/-1)
plugins/imgsvg/src/imgsvg.cpp (+12/-9)
plugins/imgsvg/src/imgsvg.h (+2/-1)
plugins/kde/src/dispatcher.cpp (+18/-18)
plugins/kde/src/dispatcher.h (+8/-8)
plugins/kde/src/socket.cpp (+1/-1)
plugins/kde/src/timer.cpp (+1/-1)
plugins/move/src/move.cpp (+41/-0)
plugins/move/src/move.h (+7/-1)
plugins/obs/src/obs.cpp (+10/-9)
plugins/obs/src/obs.h (+1/-1)
plugins/opengl/CMakeLists.txt (+9/-4)
plugins/opengl/compiz-opengl.pc.in (+2/-2)
plugins/opengl/include/opengl/framebufferobject.h (+107/-0)
plugins/opengl/include/opengl/matrix.h (+2/-0)
plugins/opengl/include/opengl/opengl.h (+275/-65)
plugins/opengl/include/opengl/program.h (+75/-0)
plugins/opengl/include/opengl/programcache.h (+51/-0)
plugins/opengl/include/opengl/texture.h (+9/-0)
plugins/opengl/include/opengl/vector.h (+1/-1)
plugins/opengl/include/opengl/vertexbuffer.h (+100/-0)
plugins/opengl/opengl.xml.in (+1/-1)
plugins/opengl/src/framebufferobject.cpp (+191/-0)
plugins/opengl/src/matrix.cpp (+54/-0)
plugins/opengl/src/paint.cpp (+446/-360)
plugins/opengl/src/privatefragment.h (+0/-54)
plugins/opengl/src/privates.h (+41/-9)
plugins/opengl/src/privatetexture.h (+37/-0)
plugins/opengl/src/privatevertexbuffer.h (+136/-0)
plugins/opengl/src/program.cpp (+262/-0)
plugins/opengl/src/programcache.cpp (+175/-0)
plugins/opengl/src/screen.cpp (+813/-69)
plugins/opengl/src/shaders.h (+136/-0)
plugins/opengl/src/texture.cpp (+137/-12)
plugins/opengl/src/vertexbuffer.cpp (+530/-0)
plugins/opengl/src/window.cpp (+44/-84)
plugins/place/place.xml.in (+5/-0)
plugins/place/src/place.h (+15/-2)
plugins/resize/resize.xml.in (+8/-8)
plugins/resize/src/resize.cpp (+95/-40)
plugins/rotate/CMakeLists.txt (+1/-1)
plugins/rotate/src/rotate.cpp (+21/-21)
plugins/scale/scale.xml.in (+8/-10)
plugins/scale/src/privates.h (+4/-0)
plugins/scale/src/scale.cpp (+39/-24)
plugins/screenshot/src/screenshot.cpp (+52/-25)
plugins/switcher/src/switcher.cpp (+49/-48)
plugins/water/CMakeLists.txt (+1/-1)
plugins/water/src/shaders.h (+201/-0)
plugins/water/src/water.cpp (+265/-803)
plugins/water/src/water.h (+37/-67)
plugins/water/water.xml.in (+24/-0)
plugins/wobbly/CMakeLists.txt (+1/-1)
plugins/zoom/src/zoom.cpp.OTHER (+764/-0)
src/CMakeLists.txt (+36/-0)
src/event.cpp (+62/-0)
src/main.cpp (+67/-1)
src/plugin.cpp (+1/-3)
src/privatescreen.h (+83/-1)
src/screen.cpp (+212/-64)
src/stackdebugger.cpp (+985/-491)
src/window.cpp (+873/-104)
unity/unity_window_decorator/AUTHORS (+29/-0)
unity/unity_window_decorator/CMakeLists.txt (+38/-0)
unity/unity_window_decorator/COPYING (+6/-0)
unity/unity_window_decorator/COPYING.GPL (+340/-0)
unity/unity_window_decorator/INSTALL (+14/-0)
unity/unity_window_decorator/README (+8/-0)
unity/unity_window_decorator/src/CMakeLists.txt (+161/-0)
unity/unity_window_decorator/src/TODO (+6/-0)
unity/unity_window_decorator/src/actionmenu.c (+109/-0)
unity/unity_window_decorator/src/blurprops.c (+68/-0)
unity/unity_window_decorator/src/cairo.c (+1001/-0)
unity/unity_window_decorator/src/config.h.gtk.in (+25/-0)
unity/unity_window_decorator/src/decorator.c (+874/-0)
unity/unity_window_decorator/src/decorprops.c (+150/-0)
unity/unity_window_decorator/src/events.c (+1146/-0)
unity/unity_window_decorator/src/forcequit.c (+176/-0)
unity/unity_window_decorator/src/gdk.c (+87/-0)
unity/unity_window_decorator/src/gtk-window-decorator.c (+442/-0)
unity/unity_window_decorator/src/gtk-window-decorator.h (+1009/-0)
unity/unity_window_decorator/src/gwd.schemas.in (+81/-0)
unity/unity_window_decorator/src/metacity.c (+1943/-0)
unity/unity_window_decorator/src/settings.c (+567/-0)
unity/unity_window_decorator/src/style.c (+42/-0)
unity/unity_window_decorator/src/switcher.c (+452/-0)
unity/unity_window_decorator/src/util.c (+278/-0)
unity/unity_window_decorator/src/wnck.c (+714/-0)
xslt/compiz_gsettings_schemas.xslt.in (+0/-441)
Text conflict in CMakeLists.txt
Text conflict in VERSION
Text conflict in cmake/CompizCommon.cmake
Contents conflict in cmake/CompizGSettings.cmake
Text conflict in gtk/gnome/CMakeLists.txt
Contents conflict in gtk/window-decorator/cairo.c
Contents conflict in gtk/window-decorator/decorator.c
Contents conflict in gtk/window-decorator/decorprops.c
Contents conflict in gtk/window-decorator/events.c
Contents conflict in gtk/window-decorator/frames.c
Contents conflict in gtk/window-decorator/gtk-window-decorator.c
Contents conflict in gtk/window-decorator/gtk-window-decorator.h
Contents conflict in gtk/window-decorator/gwd.schemas.in
Contents conflict in gtk/window-decorator/metacity.c
Contents conflict in gtk/window-decorator/settings.c
Contents conflict in gtk/window-decorator/switcher.c
Contents conflict in gtk/window-decorator/wnck.c
Text conflict in include/core/core.h
Contents conflict in include/core/rect.h
Text conflict in include/core/window.h
Text conflict in libdecoration/decoration.c
Text conflict in plugins/composite/include/composite/composite.h
Text conflict in plugins/composite/src/privates.h
Text conflict in plugins/composite/src/screen.cpp
Text conflict in plugins/cube/src/cube.cpp
Text conflict in plugins/decor/decor.xml.in
Text conflict in plugins/decor/src/decor.cpp
Text conflict in plugins/decor/src/decor.h
Text conflict in plugins/move/src/move.cpp
Contents conflict in plugins/opengl/include/opengl/fragment.h
Text conflict in plugins/opengl/include/opengl/opengl.h
Text conflict in plugins/opengl/include/opengl/texture.h
Contents conflict in plugins/opengl/src/fragment.cpp
Text conflict in plugins/opengl/src/paint.cpp
Text conflict in plugins/opengl/src/privates.h
Text conflict in plugins/opengl/src/privatetexture.h
Text conflict in plugins/opengl/src/screen.cpp
Text conflict in plugins/place/place.xml.in
Text conflict in plugins/place/src/place.h
Text conflict in plugins/scale/src/privates.h
Text conflict in plugins/scale/src/scale.cpp
Conflict adding files to plugins/zoom.  Created directory.
Conflict because plugins/zoom is not versioned, but has versioned children.  Versioned directory.
Conflict adding files to plugins/zoom/src.  Created directory.
Conflict because plugins/zoom/src is not versioned, but has versioned children.  Versioned directory.
Contents conflict in plugins/zoom/src/zoom.cpp
Text conflict in src/CMakeLists.txt
Text conflict in src/event.cpp
Text conflict in src/main.cpp
Text conflict in src/privatescreen.h
Text conflict in src/screen.cpp
Text conflict in src/stackdebugger.cpp
Text conflict in src/window.cpp
To merge this branch: bzr merge lp://qastaging/~linaro-graphics-wg/compiz-core/linaro-gles2
Reviewer Review Type Date Requested Status
Sam Spilsbury Pending
Review via email: mp+89765@code.qastaging.launchpad.net

This proposal supersedes a proposal from 2011-08-10.

This proposal has been superseded by a proposal from 2012-02-21.

Description of the change

This branch contains the code to make compiz work on GLES. This includes several changes to the compiz API.

* GLVertexBuffer class added for managing vertices, normals, texture coordinates, and colors
* GLProgram class added for managing GLSL programs
* GLProgramCache class added for managing per-plugin GLSL programs efficiently, uses an LRU cache
  to avoid recompiling recently used GLSL programs all the time
* GLFragment class removed as fragment programs are no longer used (replaced with GLSL programs)
* GL_BLEND now always enabled when rendering as almost everything was enabling it anyway
* EGL context setup added
* EglTexture class added to use EGL_image extension instead of GLX_EXT_texture_from_pixmap for GLES

Things left to do for a complete port:

  * properly check for GLSL support on desktop, currently assumes if you have VBO support you
    have GLSL support
  * port blur, wobbly, rotate, cube, and water plugins
    * wobbly, cube, and rotate should be fairly straightforward, water and blur need updated to
      use GLSL instead of fragment programs

To post a comment you must log in.
Revision history for this message
Sam Spilsbury (smspillaz) wrote : Posted in a previous version of this proposal
Download full text (8.3 KiB)

1682 + int render (const GLMatrix &modelview,
1683 + const GLWindowPaintAttrib &attrib);
1684 +
1685 + int render (const GLMatrix &projection,
1686 + const GLMatrix &modelview,
1687 + const GLWindowPaintAttrib &attrib);

Probably for the sake of API confusion, it might be worth swapping the order of projection and modelview in this case, so you have

1685 + int render (const GLMatrix &modelview,
1686 + const GLMatrix &projection,
1687 + const GLWindowPaintAttrib &attrib);

--

1586 + GLProgram* operator () (std::list<GLShaderData*>);

Can that take a const std::list <GLShaderData *> & ?

1116 +#if !defined(GL_BGRA)
1117 + #if !defined(GL_BGRA_EXT)
1118 + #error GL_BGRA support is required
1119 + #else
1120 + #define GL_BGRA GL_BGRA_EXT
1121 + #endif
1122 +#endif

This can probably be detected in CMake by using try_compile () [1]

1703 - <default>true</default>
1704 + <default>false</default>

Does this need to be off by default?

1678 + void setProgram (GLProgram *program);
1679 +
1680 + int render (const GLMatrix &modelview);
1681 +
1682 + int render (const GLMatrix &modelview,
1683 + const GLWindowPaintAttrib &attrib);
1684 +
1685 + int render (const GLMatrix &projection,
1686 + const GLMatrix &modelview,
1687 + const GLWindowPaintAttrib &attrib);

The semantics of this are odd. Is GLVertexBuffer meant to be a stateful object which holds on to the state of what its rendering? In that case, it might be more appropriate to have a:

void setProjection ();
void setModelView ();
void setAttrib ();

However, on another though, perhaps all of these arguments are redundant. If glPushMatrix, glLoadMatrixf and glPopMatrix are all parts of the deprecated API, and PrivateGLVertexBuffer::render is really doing this:

+ GLfloat params[4] = {0, 0, 0, 0};
+ GLfloat attribs[3] = {1, 1, 1};
+ GLint index = 0;
+

+ program->setUniform ("projection", projection);
+ program->setUniform ("modelview", modelview);

+ //convert paint attribs to 0-1 range
+ attribs[0] = attrib.opacity / 65535.0f;
+ attribs[1] = attrib.brightness / 65535.0f;
+ attribs[2] = attrib.saturation / 65535.0f;
+ program->setUniform3f ("paintAttrib", attribs[0], attribs[1], attribs[2]);
+

Then it might make more sense to have helper objects in the OpenGL plugin to handle that so that you don't need to pass matrices or paint attributes to the GLVertexBuffer at render time and we don't need to continue to expand the ::render () function argument list should we add more things to the core profile.

The helper object might just server to build a GLProgram with that stuff built in so that it can be passed directly to GLVertexBuffer at render time. Just a thought.

+ #ifdef USE_GLES
+ Display *xdpy = screen->dpy ();
+
+ glFlush ();
+ if (mask & COMPOSITE_SCREEN_DAMAGE_ALL_MASK)
+ {
+ eglSwapBuffers (eglGetDisplay (xdpy), surface);
+ }
+ else
+ {
+ #warning use proper extension for this
+ eglSwapBuffers (eglGetDisplay (xdpy), surface);
+ }
+ eglW...

Read more...

Revision history for this message
Daniel van Vugt (vanvugt) wrote : Posted in a previous version of this proposal

Is there a reason nothing has happened here since Aug/Sep 2011?

Revision history for this message
Sam Spilsbury (smspillaz) wrote :

All these conflicts seem to be here due to the fact that bzr seems to think we've deleted and re-added every file in the tree *sigh*

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

No problem. Just make a new branch and copy these files into it and propose the new one. Then bzr should be happier.

Revision history for this message
Frederic Plourde (fredinfinite23) :
2901. By Frederic Plourde

Fix compiz decorator's shadow blending

2902. By Frederic Plourde

Workaround GL_LINE_LOOP usage in resize plugin

2903. By Frederic Plourde

Fix blending in the resize plugin

2904. By Frederic Plourde

Draw resize plugin in fullscreen mode to workaround rendering instabilities

2905. By Alexandros Frantzis

Sync with lp:compiz-core.

2906. By Alexandros Frantzis

Sync with lp:compiz-core.

2907. By Alexandros Frantzis

Sync with lp:compiz-core.

2908. By Alexandros Frantzis

Use new WRAPABLE_HND_* macros.

2909. By Alexandros Frantzis

Correct count of wrapable functions in GLScreen.

2910. By Alexandros Frantzis

Sync with lp:compiz-core

2911. By Frederic Plourde

Fix decoration mapping instabilities and texturing artefacts.

2912. By Alexandros Frantzis

Work around compile issue on ARM.

When compiling with -O2 on ARM, the original code leads to an array index out
of bounds compilation error. In that case, the compiler doesn't infer that
sizeof(a)/sizeof(T) is a constant, and tries to compile cases in the switch
statement that use array indices that are invalid for the particular template
instantiation.

To fix this we use the 'C' template variable, which is constant for each
template instantiation, directly in the switch statement.

2913. By Alexandros Frantzis

Sync with lp:compiz-core.

2914. By Alexandros Frantzis

Sync with lp:compiz-core.

2915. By Alexandros Frantzis

opengl: Ensure blending is enabled, when needed, when drawing window contents.

2916. By Alexandros Frantzis

opengl: Refactor shader infrastructure to use small, performant programs.

This commit replaces the single complicated shader with minimal,
performant shaders, tailored to specific use cases. The new GLShaderCache
object is used for creating and caching the shader data for specific uses
cases (GLShaderParameters).

This commit also adds automatic creation of suitable GL programs in
GLVertexBuffers (see ::setAutoProgram) that don't have a program
explicitly set.

2917. By Alexandros Frantzis

Sync with lp:compiz-core.

2918. By Alexandros Frantzis

opengl: Disable blending by default when drawing the screen.

Each operation/plugin should enable it (and reset it) as needed
(as most operations are currently doing).

2919. By Alexandros Frantzis

Fix compilation with desktop GL.

2920. By Alexandros Frantzis

opengl: For OpenGL ES 2.0 ensure that format equals internalFormat when uploading texture data.

In OpenGL ES 2.0 no format conversion is allowed, i.e., format must equal internalFormat.

2921. By Alexandros Frantzis

Sync with lp:compiz-core.

2922. By Alexandros Frantzis

Sync with lp:compiz-core.

Unmerged revisions

2922. By Alexandros Frantzis

Sync with lp:compiz-core.

2921. By Alexandros Frantzis

Sync with lp:compiz-core.

2920. By Alexandros Frantzis

opengl: For OpenGL ES 2.0 ensure that format equals internalFormat when uploading texture data.

In OpenGL ES 2.0 no format conversion is allowed, i.e., format must equal internalFormat.

2919. By Alexandros Frantzis

Fix compilation with desktop GL.

2918. By Alexandros Frantzis

opengl: Disable blending by default when drawing the screen.

Each operation/plugin should enable it (and reset it) as needed
(as most operations are currently doing).

2917. By Alexandros Frantzis

Sync with lp:compiz-core.

2916. By Alexandros Frantzis

opengl: Refactor shader infrastructure to use small, performant programs.

This commit replaces the single complicated shader with minimal,
performant shaders, tailored to specific use cases. The new GLShaderCache
object is used for creating and caching the shader data for specific uses
cases (GLShaderParameters).

This commit also adds automatic creation of suitable GL programs in
GLVertexBuffers (see ::setAutoProgram) that don't have a program
explicitly set.

2915. By Alexandros Frantzis

opengl: Ensure blending is enabled, when needed, when drawing window contents.

2914. By Alexandros Frantzis

Sync with lp:compiz-core.

2913. By Alexandros Frantzis

Sync with lp:compiz-core.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
The diff is not available at this time. You can reload the page or download it.

Subscribers

People subscribed via source and target branches