diff mbox

doc: Fill in high level description for Surfaces

Message ID 1418413138-29427-1-git-send-email-bryce@osg.samsung.com
State Not Applicable
Headers show

Commit Message

Bryce Harrington Dec. 12, 2014, 7:38 p.m. UTC
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
---
 doc/publican/sources/Protocol.xml |   34 ++++++++++++++++++++++++++++++----
 1 file changed, 30 insertions(+), 4 deletions(-)

Comments

Bryce Harrington Dec. 12, 2014, 7:51 p.m. UTC | #1
Sorry, sorry, sorry for the misfire!  Please ignore this patch.

(and thanks for patchwork!)

On Fri, Dec 12, 2014 at 11:38:58AM -0800, Bryce Harrington wrote:
> Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
> ---
>  doc/publican/sources/Protocol.xml |   34 ++++++++++++++++++++++++++++++----
>  1 file changed, 30 insertions(+), 4 deletions(-)
> 
> diff --git a/doc/publican/sources/Protocol.xml b/doc/publican/sources/Protocol.xml
> index b79b6be..9c6cb3b 100644
> --- a/doc/publican/sources/Protocol.xml
> +++ b/doc/publican/sources/Protocol.xml
> @@ -282,13 +282,39 @@
>    <section id="sect-Protocol-Surface">
>      <title>Surfaces</title>
>      <para>
> -      Surfaces are created by the client.
> -      Clients don't know the global position of their surfaces, and
> +      A surface manages rectangular grids of pixels that clients create
> +      for displaying their content to the screen.  The surface keeps
> +      track of its location and size relative to whatever contains it
> +      (which might be just a parent surface), thus clients don't know
> +      the global position of their surfaces.  Importantly, clients
>        cannot access other clients surfaces.
>      </para>
>      <para>
> -      See <xref linkend="protocol-spec-interface-wl_surface"/> for the protocol
> -      description.
> +      The data for the grid of pixels is stored in a wl_buffer object.
> +      A displayable surface has one or more of these content buffers
> +      containing the content for the screen.  For example, a typical
> +      surface maintains a pair of these buffers that are swapped between
> +      the client and the compositor.  Once the client has finished
> +      writing pixels, it 'commits' the buffer; this permits the
> +      compositor to access the buffer and read the pixels.  When the
> +      compositor is finished with a buffer, it releases it back to the
> +      client.  This way, the client can begin writing the next buffer
> +      while the compositor is processing the current one.
> +    </para>
> +    <para>
> +      The actual processing behavior in practice can vary from one
> +      backend to the next, and really is a renderer implementation
> +      detail.  In particular, the display of the pixels on the screen
> +      can happen after an unpredictable amount of time.  For example,
> +      GL/RPi renderers with SHM-based buffers copy into a shadow buffer
> +      and so will display instantly, whereas GL buffers on the GL
> +      renderer do a blit for final presentation on the next
> +      attach/commit, and DRM/atomic backends do it sometime later since
> +      they promote the buffer directly to scanout.
> +    </para>
> +    <para>
> +      See <xref linkend="protocol-spec-interface-wl_surface"/> for the
> +      protocol description.
>      </para>
>    </section>
>    <section id="sect-Protocol-Input">
> -- 
> 1.7.9.5
diff mbox

Patch

diff --git a/doc/publican/sources/Protocol.xml b/doc/publican/sources/Protocol.xml
index b79b6be..9c6cb3b 100644
--- a/doc/publican/sources/Protocol.xml
+++ b/doc/publican/sources/Protocol.xml
@@ -282,13 +282,39 @@ 
   <section id="sect-Protocol-Surface">
     <title>Surfaces</title>
     <para>
-      Surfaces are created by the client.
-      Clients don't know the global position of their surfaces, and
+      A surface manages rectangular grids of pixels that clients create
+      for displaying their content to the screen.  The surface keeps
+      track of its location and size relative to whatever contains it
+      (which might be just a parent surface), thus clients don't know
+      the global position of their surfaces.  Importantly, clients
       cannot access other clients surfaces.
     </para>
     <para>
-      See <xref linkend="protocol-spec-interface-wl_surface"/> for the protocol
-      description.
+      The data for the grid of pixels is stored in a wl_buffer object.
+      A displayable surface has one or more of these content buffers
+      containing the content for the screen.  For example, a typical
+      surface maintains a pair of these buffers that are swapped between
+      the client and the compositor.  Once the client has finished
+      writing pixels, it 'commits' the buffer; this permits the
+      compositor to access the buffer and read the pixels.  When the
+      compositor is finished with a buffer, it releases it back to the
+      client.  This way, the client can begin writing the next buffer
+      while the compositor is processing the current one.
+    </para>
+    <para>
+      The actual processing behavior in practice can vary from one
+      backend to the next, and really is a renderer implementation
+      detail.  In particular, the display of the pixels on the screen
+      can happen after an unpredictable amount of time.  For example,
+      GL/RPi renderers with SHM-based buffers copy into a shadow buffer
+      and so will display instantly, whereas GL buffers on the GL
+      renderer do a blit for final presentation on the next
+      attach/commit, and DRM/atomic backends do it sometime later since
+      they promote the buffer directly to scanout.
+    </para>
+    <para>
+      See <xref linkend="protocol-spec-interface-wl_surface"/> for the
+      protocol description.
     </para>
   </section>
   <section id="sect-Protocol-Input">