mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 09:10:12 +01:00
st/xorg: If dri2 version is 2 support version 1 as well
Thanks to X server commit 2e2c5b216cc1c7a9bc26bd2c68226aaed5fc52ca it is possible to be ABI compatible in version 2 with version 1 of the DRI2 interface.
This commit is contained in:
parent
3e1241d4f8
commit
ccc888c39e
1 changed files with 36 additions and 4 deletions
|
|
@ -47,6 +47,10 @@
|
|||
#define DRI2INFOREC_VERSION 1
|
||||
#endif
|
||||
|
||||
#if DRI2INFOREC_VERSION == 2
|
||||
static Bool set_format_in_do_create_buffer;
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
PixmapPtr pPixmap;
|
||||
struct pipe_texture *tex;
|
||||
|
|
@ -146,7 +150,9 @@ dri2_do_create_buffer(DrawablePtr pDraw, DRI2BufferPtr buffer, unsigned int form
|
|||
buffer->driverPrivate = private;
|
||||
buffer->flags = 0; /* not tiled */
|
||||
#if DRI2INFOREC_VERSION == 2
|
||||
((DRI2Buffer2Ptr)buffer)->format = 0;
|
||||
/* ABI forwards/backwards compatibility */
|
||||
if (set_format_in_do_create_buffer)
|
||||
((DRI2Buffer2Ptr)buffer)->format = 0;
|
||||
#elif DRI2INFOREC_VERSION >= 3
|
||||
buffer->format = 0;
|
||||
#endif
|
||||
|
|
@ -210,7 +216,9 @@ dri2_destroy_buffer(DrawablePtr pDraw, DRI2Buffer2Ptr buffer)
|
|||
xfree(buffer);
|
||||
}
|
||||
|
||||
#else /* DRI2INFOREC_VERSION < 2 */
|
||||
#endif /* DRI2INFOREC_VERSION >= 2 */
|
||||
|
||||
#if DRI2INFOREC_VERSION <= 2
|
||||
|
||||
static DRI2BufferPtr
|
||||
dri2_create_buffers(DrawablePtr pDraw, unsigned int *attachments, int count)
|
||||
|
|
@ -260,7 +268,7 @@ dri2_destroy_buffers(DrawablePtr pDraw, DRI2BufferPtr buffers, int count)
|
|||
}
|
||||
}
|
||||
|
||||
#endif /* DRI2INFOREC_VERSION >= 2 */
|
||||
#endif /* DRI2INFOREC_VERSION <= 2 */
|
||||
|
||||
static void
|
||||
dri2_copy_region(DrawablePtr pDraw, RegionPtr pRegion,
|
||||
|
|
@ -368,6 +376,15 @@ xorg_dri2_init(ScreenPtr pScreen)
|
|||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||
modesettingPtr ms = modesettingPTR(pScrn);
|
||||
DRI2InfoRec dri2info;
|
||||
int major, minor;
|
||||
|
||||
if (xf86LoaderCheckSymbol("DRI2Version")) {
|
||||
DRI2Version(&major, &minor);
|
||||
} else {
|
||||
/* Assume version 1.0 */
|
||||
major = 1;
|
||||
minor = 0;
|
||||
}
|
||||
|
||||
dri2info.version = DRI2INFOREC_VERSION;
|
||||
dri2info.fd = ms->fd;
|
||||
|
|
@ -378,7 +395,22 @@ xorg_dri2_init(ScreenPtr pScreen)
|
|||
#if DRI2INFOREC_VERSION >= 2
|
||||
dri2info.CreateBuffer = dri2_create_buffer;
|
||||
dri2info.DestroyBuffer = dri2_destroy_buffer;
|
||||
#else
|
||||
#endif
|
||||
|
||||
/* For X servers in the 1.6.x series there where two DRI2 version.
|
||||
* This allows us to build one binary that works on both servers.
|
||||
*/
|
||||
#if DRI2INFOREC_VERSION == 2
|
||||
if (minor == 0) {
|
||||
set_format_in_do_create_buffer = FALSE;
|
||||
dri2info.CreateBuffers = dri2_create_buffers;
|
||||
dri2info.DestroyBuffers = dri2_destroy_buffers;
|
||||
} else
|
||||
set_format_in_do_create_buffer = FALSE;
|
||||
#endif
|
||||
|
||||
/* For version 1 set these unconditionaly. */
|
||||
#if DRI2INFOREC_VERSION == 1
|
||||
dri2info.CreateBuffers = dri2_create_buffers;
|
||||
dri2info.DestroyBuffers = dri2_destroy_buffers;
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue