Initial DRI3000 protocol specs available

Stéphane Marchesin stephane.marchesin at gmail.com
Wed Feb 20 01:23:07 PST 2013


On Tue, Feb 19, 2013 at 7:46 PM, Keith Packard <keithp at keithp.com> wrote:
>
> And here's the Swap extension
>
>                           The Swap Extension
>                               Version 1.0
>                               2013-2-14
>
>                             Keith Packard
>                           keithp at keithp.com
>                           Intel Corporation
>
> 1. Introduction
>
> The Swap extension provides GL SwapBuffers semantics to move pixels
> From a pixmap to a drawable. This can be used by OpenGL
> implementations or directly by regular applications.
>
> 1.1. Acknowledgments
>
> Eric Anholt <eric at anholt.net>
> Dave Airlie <airlied at redhat.com>
> Kristian Høgsberg <krh at bitplanet.net>
>
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 2. Data Types
>
> The server side region support specified in the Xfixes extension
> version 2 is used in the SwapRegion request.
>
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 4. Errors
>
> No errors are defined by the Swap extension.
>
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 5. Events
>
> The Swap extension provides a new event, SwapComplete, to signal when
> a swap operation has finished.
>
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
>
> 6. Protocol Types
>
> SWAPSELECTMASK { SwapCompleteMask }
>
>         Used with SwapSelectInput to specify which events a client is
>         to receive.
>
> SWAPIDLE {
>         pixmap: PIXMAP
>         valid: BOOL
>         swap-hi: CARD32
>         swap-lo: CARD32
> }
>
>         This structure contains information about a pixmap which had
>         been used in a SwapRegion request and which the server is now
>         finished with. If valid is TRUE, swap-hi/swap-lo form a 64-bit
>         swap count value from the SwapRegion request which matches the
>         data that the pixmap currently contains. If valid is FALSE,
>         then the contents of the pixmap are undefined.
>
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 7. Extension Initialization
>
> The name of this extension is "Swap".
>
> ┌───
>     SwapQueryVersion
>         client-major-version:   CARD32
>         client-minor-version:   CARD32
>>         major-version:          CARD32
>         minor-version:          CARD32
> └───
>
>         The client sends the highest supported version to the server
>         and the server sends the highest version it supports, but no
>         higher than the requested version. Major versions changes can
>         introduce incompatibilities in existing functionality, minor
>         version changes introduce only backward compatible changes.
>         It is the clients responsibility to ensure that the server
>         supports a version which is compatible with its expectations.
>
>         Backwards compatible changes included addition of new
>         requests.
>
>
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 8. Extension Requests
>
> ┌───
>     SwapRegion
>         destination: DRAWABLE
>         region: REGION
>         src-off-x,src-off-y: INT16
>         source: PIXMAP
>         swap-interval: CARD32
>         target_msc_hi: CARD32
>         target_msc_lo: CARD32
>         divisor_hi: CARD32
>         divisor_lo: CARD32
>         remainder_hi: CARD32
>         remainder_lo: CARD32
>>         swap_hi: CARD32
>         swap_lo: CARD32
>         suggested-x-off,suggested-y-off: INT16
>         suggested-width,suggested-height: CARD16
>         idle: LISTofSWAPIDLE
> └───
>         Errors: Pixmap, Drawable, Region, Value
>
>         Schedule a swap of the specified region from the source pixmap
>         to the destination drawable.
>
>         region specifies the region within the destination to be
>         swapped from the source.
>
>         src-off-x and src-off-y specify the offset to be added to
>         region to align it with the source pixmap.
>
>         swap-interval specifies the minimum number of frames since the
>         last SwapRegion request.
>
>         target_msc_hi/target_msc_lo form a 64-bit value marking the
>         target media stamp count for the swap request. When non-zero,
>         these mark the desired time where the data should be
>         presented.
>
>         divisor_hi/divisor_lo form a 64-bit value marking the desired
>         media stamp count interval between swaps.
>
>         remainder_hi/remainder_lo form a 64-bite value marking the
>         desired offset within the divisor_hi/divisor_lo swap interval.
>
>         In the reply, swap_hi/swap_lo form a 64-bit swap count value
>         when the swap will actually occur (e.g.  the last queued swap
>         count + (pending swap count * swap interval)).
>
>         suggested-width and suggested-height offer a hint as to the
>         best pixmap size to use for full-sized swaps in the
>         future. suggested-x-off and suggested-y-off provide a hint as
>         to where the window contents should be placed within that
>         allocation for future swaps.
>
>         idle provides a list of pixmaps which were passed in previous
>         SwapRegion requests by this client targeting the same destination.

How would you handle atomic swaps? Multiple of these back to back?

>
> ┌───
>     SwapSelectInput
>         drawable: DRAWABLE
>         mask: SETofSWAPSELECTMASK
> └───
>         Errors: Drawable
>
>         Selects which Swap events are to be delivered to the
>         requesting client.
>
> ┌───
>     SwapGetMSC
>         drawable: DRAWABLE
>>         ust, msc, sbc: CARD64
> └───
>         Errors: Window
>
>         Get the current media stamp counter (MSC) and swap buffer count (SBC)
>         along with the unadjusted system time (UST) when the MSC was last
>         incremented.
>
> ┌───
>     SwapWaitMSC
>         drawable: DRAWABLE
>         target_msc: two CARD32s
>         divisor: two CARD32s
>         remainder: two CARD32s
>>         ust, msc, sbc: CARD64
> └───
>         Errors: Window
>
>         Blocks the client until either the frame count reaches target_msc or,
>         if the frame count is already greater than target_msc when the request
>         is received, until the frame count % divisor = remainder.  If divisor
>         is 0, the client will be unblocked if the frame count is greater than
>         or equal to the target_msc.
>
>         Returns the current media stamp counter (MSC) and swap buffer count
>         (SBC) along with the unadjusted system time (UST) when the MSC was last
>         incremented.
>
> ┌───
>     SwapWaitSBC
>         drawable: DRAWABLE
>         target_sbc: two CARD32s
>>         ust, msc, sbc: CARD64
> └───
>         Errors: Window
>
>         Blocks the client until the swap buffer count reaches target_sbc.  If
>         the swap buffer count is already greater than or equal to target_sbc
>         when the request is recieved, this request will return immediately.
>
>         If target_sbc is 0, this request will block the client until all
>         previous DRI2SwapBuffers requests have completed.
>
>         Returns the current media stamp counter (MSC) and swap buffer count
>         (SBC) along with the unadjusted system time (UST) when the MSC was last
>         incremented.
>
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 9. Extension Events
>
> ┌───
>     SwapComplete
>>
>         drawable: CARD32
>         ust: CARD64
>         msc: CARD64
>         sbc: CARD64
> └───
>
>         This event is delivered when a SwapRegion operation
>         completes. Note that this may be later than when the
>         SwapRegion request is executed as the operation itself may be
>         delayed until the correct frame count has been reached.
>
>
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> 10. Extension Versioning
>
> The Swap extension is adapted from pieces of the DRI2 extension
>
>         1.0: First published version
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
>
> 11. Relationship with other extensions
>
> As an extension designed to support other extensions, there is
> naturally some interactions with other extensions.
>
>
> 11.1 GLX
>
> GLX has no direct relation with Swap, but a direct rendering OpenGL
> application may use GLX to discover

This sentence doesn't end.

>
> 11.2 DRI3
>
> DRI3 provides a mechanism for connecting direct rendering
> applications with X pixmaps. Those pixmaps can then be used with Swap
> to provide a complete direct rendering solution for OpenGL or other APIs.
>
> 11.3 DRI2
>
> Swap provides similar functionality to the DRI2CopyRegion and
> DRI2SwapBuffers requests, but uses regular X resources for both source
> and destination pixel buffers instead of defining new resources.
>
> Swap and DRI3 are designed in conjunction to replace DRI2
>
> 11.2 XvMC / Xv
>
> We might add a DRI2_BUFFER_YUV to do vsynced colorspace conversion
> blits.
>
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> Appendix A. Protocol Encoding
>
> Syntactic Conventions
>
> This document uses the same syntactic conventions as the core X
> protocol encoding document.
>
>
> A.1 Common Types
>
> ┌───
>     SWAPIDLE
>         4       PIXMAP  pixmap
>         1       BOOL    valid
>         3               unused
>         4       CARD32  swap-hi
>         4       CARD32  swap-lo
> └───
>
> A.2 Protocol Requests
>
> ┌───
>     SwapQueryVersion
>         1       CARD8                   major opcode
>         1       0                       Swap opcode
>         2       3                       length
>         4       CARD32                  major version
>         4       CARD32                  minor version
>>         1       1                       Reply
>         1                               unused
>         2       CARD16                  sequence number
>         4       0                       reply length
>         4       CARD32                  major version
>         4       CARD32                  minor version
>         16                              unused
> └───
>
>
> ┌───
>     SwapRegion
>         1       CARD8                   major opcode
>         1       1                       Swap opcode
>         2       11                      length
>         4       DRAWABLE                destination
>         4       REGION                  region
>         2       INT16                   src-off-x
>         2       INT16                   src-off-y
>         4       CARD32                  swap-interval
>         4       CARD32                  target_msc_hi
>         4       CARD32                  target_msc_lo
>         4       CARD32                  divisor_hi
>         4       CARD32                  divisor_lo
>         4       CARD32                  remainder_hi
>         4       CARD32                  remainder_lo
>>         1       1                       Reply
>         1                               unused
>         2       CARD16                  sequence number
>         4       4n                      reply length
>         4       CARD32                  swap-hi
>         4       CARD32                  swap-lo
>         2       INT16                   suggested-x-off
>         2       INT16                   suggested-y-off
>         2       CARD16                  suggested-width
>         2       CARD16                  suggested-height
>         8                               unused
>         16n     LISTofSWAPIDLE          idle
> └───
>
> ┌───
>     SwapGetMSC
>         1       CARD8                   major opcode
>         1       9                       Swap opcode
>         2       8                       length
>         4       DRAWABLE                drawable
>>         1       1                       Reply
>         1                               unused
>         2       CARD16                  sequence number
>         4       0                       reply length
>         4       CARD32                  ust_hi
>         4       CARD32                  ust_lo
>         4       CARD32                  msc_hi
>         4       CARD32                  msc_lo
>         4       CARD32                  sbc_hi
>         4       CARD32                  sbc_lo
> └───
>
> ┌───
>     SwapWaitMSC
>         1       CARD8                   major opcode
>         1       10                      Swap opcode
>         2       8                       length
>         4       DRAWABLE                drawable
>         4       CARD32                  target_msc_hi
>         4       CARD32                  target_msc_lo
>         4       CARD32                  divisor_hi
>         4       CARD32                  divisor_lo
>         4       CARD32                  remainder_hi
>         4       CARD32                  remainder_lo
>>         1       1                       Reply
>         1                               unused
>         2       CARD16                  sequence number
>         4       0                       reply length
>         4       CARD32                  ust_hi
>         4       CARD32                  ust_lo
>         4       CARD32                  msc_hi
>         4       CARD32                  msc_lo
>         4       CARD32                  sbc_hi
>         4       CARD32                  sbc_lo
> └───
>
> ┌───
>     SwapWaitSBC
>         1       CARD8                   major opcode
>         1       11                      Swap opcode
>         2       8                       length
>         4       DRAWABLE                drawable
>         4       CARD32                  swap_hi
>         4       CARD32                  swap_lo
>>         1       1                       Reply
>         1                               unused
>         2       CARD16                  sequence number
>         4       0                       reply length
>         4       CARD32                  ust_hi
>         4       CARD32                  ust_lo
>         4       CARD32                  msc_hi
>         4       CARD32                  msc_lo
>         4       CARD32                  sbc_hi
>         4       CARD32                  sbc_lo
> └───
>
>
> A.3 Protocol Events
>
> The Swap extension specifies the SwapComplete event.
>
> ┌───
>     SwapComplete
>         1       CARD8                   type
>         1       CARD8                   extension
>         2       CARD16                  sequenceNumber
>         4       DRAWABLE                drawable
>         4       CARD32                  ust_hi
>         4       CARD32                  ust_lo
>         4       CARD32                  msc_hi
>         4       CARD32                  msc_lo
>         4       CARD32                  sbc_hi
>         4       CARD32                  sbc_lo
> └───
>
> A.4 Protocol Errors
>
> The Swap extension specifies no errors.
>
>                              ❄ ❄ ❄  ❄  ❄ ❄ ❄
>
> --
> keith.packard at intel.com
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel


More information about the xorg-devel mailing list