mirror of
https://gitlab.freedesktop.org/xorg/proto/xorgproto.git
synced 2025-12-20 04:40:10 +01:00
Switch direction of FD passing for Sync Fences
Pass FD from client to server to avoid a round trip. Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
58ece91dee
commit
fbb449d411
2 changed files with 119 additions and 45 deletions
38
dri3proto.h
38
dri3proto.h
|
|
@ -35,7 +35,7 @@
|
|||
#define X_DRI3PixmapFromBuffer 2
|
||||
#define X_DRI3BufferFromPixmap 3
|
||||
#define X_DRI3SelectInput 4
|
||||
#define X_DRI3GetSyncFenceFD 5
|
||||
#define X_DRI3FenceFromFD 5
|
||||
|
||||
#define DRI3NumberRequests 6
|
||||
|
||||
|
|
@ -92,6 +92,7 @@ typedef struct {
|
|||
CARD16 length B16;
|
||||
CARD32 pixmap B32;
|
||||
CARD32 drawable B32;
|
||||
CARD32 size B32;
|
||||
CARD16 width B16;
|
||||
CARD16 height B16;
|
||||
CARD16 stride B16;
|
||||
|
|
@ -99,7 +100,7 @@ typedef struct {
|
|||
CARD8 bpp;
|
||||
} xDRI3PixmapFromBufferReq;
|
||||
|
||||
#define sz_xDRI3PixmapFromBufferReq 20
|
||||
#define sz_xDRI3PixmapFromBufferReq 24
|
||||
|
||||
typedef struct {
|
||||
CARD8 reqType;
|
||||
|
|
@ -114,15 +115,15 @@ typedef struct {
|
|||
CARD8 nfd; /* Number of file descriptors returned (1) */
|
||||
CARD16 sequenceNumber B16;
|
||||
CARD32 length B32;
|
||||
CARD32 size B32;
|
||||
CARD16 width B16;
|
||||
CARD16 height B16;
|
||||
CARD16 stride B16;
|
||||
CARD8 depth;
|
||||
CARD8 bpp;
|
||||
CARD32 size;
|
||||
CARD32 pad20;
|
||||
CARD32 pad24;
|
||||
CARD32 pad28;
|
||||
CARD32 pad20 B32;
|
||||
CARD32 pad24 B32;
|
||||
CARD32 pad28 B32;
|
||||
} xDRI3BufferFromPixmapReply;
|
||||
#define sz_xDRI3BufferFromPixmapReply 32
|
||||
|
||||
|
|
@ -142,25 +143,14 @@ typedef struct {
|
|||
CARD8 reqType;
|
||||
CARD8 dri3ReqType;
|
||||
CARD16 length B16;
|
||||
CARD32 syncFence B32;
|
||||
CARD32 window B32;
|
||||
} xDRI3GetSyncFenceFd;
|
||||
CARD32 drawable B32;
|
||||
CARD32 fence B32;
|
||||
BOOL initially_triggered;
|
||||
CARD8 pad13;
|
||||
CARD16 pad14 B16;
|
||||
} xDRI3FenceFromFDReq;
|
||||
|
||||
#define sz_xDRI3GetSyncFenceFd 12
|
||||
|
||||
typedef struct {
|
||||
BYTE type; /* X_Reply */
|
||||
CARD8 nfd; /* Number of file descriptors returned (1) */
|
||||
CARD16 sequenceNumber B16;
|
||||
CARD32 length B32;
|
||||
CARD32 pad2 B32;
|
||||
CARD32 pad3 B32;
|
||||
CARD32 pad4 B32;
|
||||
CARD32 pad5 B32;
|
||||
CARD32 pad6 B32;
|
||||
CARD32 pad7 B32;
|
||||
} xDRI3GetSyncFenceFdReply;
|
||||
#define sz_xDRI3GetSyncFenceFdReply 32
|
||||
#define sz_xDRI3FenceFromFDReq 16
|
||||
|
||||
/*
|
||||
* Events
|
||||
|
|
|
|||
126
dri3proto.txt
126
dri3proto.txt
|
|
@ -16,18 +16,32 @@ The direct rendered buffers are passed across the protocol via
|
|||
standard POSIX file descriptor passing mechanisms. On Linux, these
|
||||
buffers are DMA-BUF objects.
|
||||
|
||||
DRI3 also includes a mechanism to translate between Linux Futexes
|
||||
and X Sync extension Fences. This provides a synchronization mechanism
|
||||
which can be used to serialize access to shared render buffers.
|
||||
|
||||
1.1. Acknowledgments
|
||||
|
||||
Eric Anholt <eric@anholt.net>
|
||||
Dave Airlie <airlied@redhat.com>
|
||||
Kristian Høgsberg <krh@bitplanet.net>
|
||||
James Jones <janomes@nvidia.com>
|
||||
|
||||
❄ ❄ ❄ ❄ ❄ ❄ ❄
|
||||
|
||||
2. Data Types
|
||||
|
||||
The DRI3 extension uses the RandR extension Provider to select among
|
||||
multiple GPUs on a single screen.
|
||||
DRI3EVENTID { XID }
|
||||
|
||||
Defines a unique event delivery target for DRI3
|
||||
events. Multiple event IDs can be allocated to provide
|
||||
multiple distinct event delivery contexts.
|
||||
|
||||
DRI3EVENTMASK { DRI3ConfigureNotifyMask }
|
||||
|
||||
The DRI3 extension also uses the RandR extension Provider data type to
|
||||
select among multiple GPUs on a single screen and the Sync extension
|
||||
fence object to provide graphics object synchronization.
|
||||
|
||||
❄ ❄ ❄ ❄ ❄ ❄ ❄
|
||||
|
||||
|
|
@ -39,7 +53,9 @@ No errors are defined by the DRI3 extension.
|
|||
|
||||
5. Events
|
||||
|
||||
No events are defined by the DRI3 extension.
|
||||
DRI3 adds a ConfigureNotify event to inform clients about window
|
||||
configuration changes which can affect the allocation of
|
||||
window-related direct rendered buffers.
|
||||
|
||||
❄ ❄ ❄ ❄ ❄ ❄ ❄
|
||||
|
||||
|
|
@ -56,7 +72,7 @@ DRI3DRIVER { DRI3DriverDRI
|
|||
|
||||
7. Extension Initialization
|
||||
|
||||
The name of this extension is "DRI3" (third time is the charm?).
|
||||
The name of this extension is "DRI3"
|
||||
|
||||
┌───
|
||||
DRI3QueryVersion
|
||||
|
|
@ -100,13 +116,17 @@ The name of this extension is "DRI3" (third time is the charm?).
|
|||
provider. The provider must support SourceOutput or SourceOffload.
|
||||
|
||||
The direct rendering library used to implement the specified
|
||||
driverType is returned in the driver value. The file
|
||||
descriptor for the device is returned in FD.
|
||||
'driverType' is returned in 'driver'. The file
|
||||
descriptor for the device is returned in 'device'. 'nfd' will
|
||||
be set to one (this is strictly a convenience for XCB which
|
||||
otherwise would need request-specific information about how
|
||||
many file descriptors were associated with this reply).
|
||||
|
||||
┌───
|
||||
DRI3PixmapFromBuffer
|
||||
pixmap: PIXMAP
|
||||
drawable: DRAWABLE
|
||||
size: CARD32
|
||||
width, height, stride: CARD16
|
||||
depth, bpp: CARD8
|
||||
buffer: FD
|
||||
|
|
@ -114,12 +134,19 @@ The name of this extension is "DRI3" (third time is the charm?).
|
|||
Errors: Alloc, Drawable, IDChoice, Value, Match
|
||||
|
||||
Creates a pixmap for the direct rendering object associated
|
||||
with buffer. width, height and stride specify the geometry (in
|
||||
pixels) of the underlying buffer. The pixels within the buffer
|
||||
may not be arranged in a simple linear fashion, but the total
|
||||
byte size of the buffer must be height * stride * bpp /
|
||||
8. Precisely how any additional information about the buffer
|
||||
is shared is outside the scope of this extension.
|
||||
with 'buffer'. Changes to pixmap will be visible in that
|
||||
direct rendered object and changes to the direct rendered
|
||||
object will be visible in the pixmap.
|
||||
|
||||
'size' specifies the total size of the buffer bytes. 'width',
|
||||
'height' describe the geometry (in pixels) of the underlying
|
||||
buffer. 'stride' specifies the number of bytes per scanline in
|
||||
the buffer. The pixels within the buffer may not be arranged
|
||||
in a simple linear fashion, but 'size' will be at least
|
||||
'height' * 'stride'.
|
||||
|
||||
Precisely how any additional information about the buffer is
|
||||
shared is outside the scope of this extension.
|
||||
|
||||
If buffer cannot be used with the screen associated with
|
||||
drawable, a Match error is returned.
|
||||
|
|
@ -132,6 +159,7 @@ The name of this extension is "DRI3" (third time is the charm?).
|
|||
pixmap: PIXMAP
|
||||
▶
|
||||
depth: CARD8
|
||||
size: CARD32
|
||||
width, height, stride: CARD16
|
||||
depth, bpp: CARD8
|
||||
buffer: FD
|
||||
|
|
@ -139,12 +167,45 @@ The name of this extension is "DRI3" (third time is the charm?).
|
|||
Errors: Pixmap, Match
|
||||
|
||||
Pass back a direct rendering object associated with
|
||||
pixmap. Future changes to pixmap will be visible in that
|
||||
direct rendered object.
|
||||
pixmap. Changes to pixmap will be visible in that
|
||||
direct rendered object and changes to the direct rendered
|
||||
object will be visible in the pixmap.
|
||||
|
||||
The pixel format and geometry of the buffer are returned along
|
||||
with a file descriptor referencing the underlying direct
|
||||
rendering object.
|
||||
'size' specifies the total size of the buffer bytes. 'width',
|
||||
'height' describe the geometry (in pixels) of the underlying
|
||||
buffer. 'stride' specifies the number of bytes per scanline in
|
||||
the buffer. The pixels within the buffer may not be arranged
|
||||
in a simple linear fashion, but 'size' will be at least
|
||||
'height' * 'stride'.
|
||||
|
||||
Precisely how any additional information about the buffer is
|
||||
shared is outside the scope of this extension.
|
||||
|
||||
If buffer cannot be used with the screen associated with
|
||||
drawable, a Match error is returned.
|
||||
|
||||
┌───
|
||||
DRI3SelectInput
|
||||
eventContext: DRI3EVENTID
|
||||
window: WINDOW
|
||||
eventMask: SETofDRI3EVENT
|
||||
└───
|
||||
Errors: Window, Value, Match, IDchoice
|
||||
|
||||
Selects the set of DRI3 events to be delivered for the
|
||||
specified window and event context. DRI3SelectInput can
|
||||
create, modifiy or delete event contexts. An event context is
|
||||
associated with a specific window; using an existing event
|
||||
context with a different window generates a Match error.
|
||||
|
||||
If eventContext specifies an existing event context, then if
|
||||
eventMask is empty, DRI3SelectInput deletes the specified
|
||||
context, otherwise the specified event context is changed to
|
||||
select a different set of events.
|
||||
|
||||
If eventContext is an unused XID, then if eventMask is empty
|
||||
no operation is performed. Otherwise, a new event context is
|
||||
created selecting the specified events.
|
||||
|
||||
┌───
|
||||
DRI3GetSyncFenceFd
|
||||
|
|
@ -156,16 +217,39 @@ The name of this extension is "DRI3" (third time is the charm?).
|
|||
└───
|
||||
Errors: Fence, Match
|
||||
|
||||
Pass back a shared memory segment associated with a sync fence
|
||||
object. Pass this fd to the XShmFence library to map and
|
||||
manipulate the fence.
|
||||
Pass back a device-specific file descriptor associated with an
|
||||
X Sync extension fence object. Details about the mechanism
|
||||
used with this file are outside the scope of the DRI3 extension.
|
||||
|
||||
|
||||
❄ ❄ ❄ ❄ ❄ ❄ ❄
|
||||
|
||||
9. Extension Events
|
||||
|
||||
The DRI3 extension defines no events
|
||||
DRI3ConfigureNotify is sent if DRI3SelectInput has requested it.
|
||||
DRI3ConfigureNotify events are XGE events and so do not have a unique
|
||||
event ID.
|
||||
|
||||
┌───
|
||||
DRI3ConfigureNotify
|
||||
type: CARD8 XGE event type (35)
|
||||
extension: CARD8 DRI3 extension request number
|
||||
length: CARD16 2
|
||||
evtype: CARD16 DRI3_ConfigureNotify
|
||||
eventID: DRI3EVENTID
|
||||
window: WINDOW
|
||||
x: INT16
|
||||
y: INT16
|
||||
width: CARD16
|
||||
height: CARD16
|
||||
off_x: INT16
|
||||
off_y: INT16
|
||||
pixmap_width: CARD16
|
||||
pixmap_height: CARD16
|
||||
pixmap_flags: CARD32
|
||||
└───
|
||||
|
||||
'x' and 'y' are the parent-relative location of 'window'.
|
||||
|
||||
❄ ❄ ❄ ❄ ❄ ❄ ❄
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue