Compare commits
3 Commits
master
...
submit/cle
Author | SHA1 | Date | |
---|---|---|---|
|
31c03b51d8 | ||
|
fd8b86583e | ||
|
2edc5662f8 |
|
@ -64,10 +64,10 @@ static int
|
||||||
proc_dri3_query_version(ClientPtr client)
|
proc_dri3_query_version(ClientPtr client)
|
||||||
{
|
{
|
||||||
REQUEST(xDRI3QueryVersionReq);
|
REQUEST(xDRI3QueryVersionReq);
|
||||||
|
|
||||||
xDRI3QueryVersionReply rep = {
|
xDRI3QueryVersionReply rep = {
|
||||||
.type = X_Reply,
|
.type = X_Reply,
|
||||||
.sequenceNumber = client->sequence,
|
.sequenceNumber = client->sequence,
|
||||||
.length = 0,
|
|
||||||
.majorVersion = SERVER_DRI3_MAJOR_VERSION,
|
.majorVersion = SERVER_DRI3_MAJOR_VERSION,
|
||||||
.minorVersion = SERVER_DRI3_MINOR_VERSION
|
.minorVersion = SERVER_DRI3_MINOR_VERSION
|
||||||
};
|
};
|
||||||
|
@ -127,7 +127,6 @@ dri3_send_open_reply(ClientPtr client, int fd)
|
||||||
.type = X_Reply,
|
.type = X_Reply,
|
||||||
.nfd = 1,
|
.nfd = 1,
|
||||||
.sequenceNumber = client->sequence,
|
.sequenceNumber = client->sequence,
|
||||||
.length = 0,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (client->swapped) {
|
if (client->swapped) {
|
||||||
|
@ -257,12 +256,7 @@ static int
|
||||||
proc_dri3_buffer_from_pixmap(ClientPtr client)
|
proc_dri3_buffer_from_pixmap(ClientPtr client)
|
||||||
{
|
{
|
||||||
REQUEST(xDRI3BufferFromPixmapReq);
|
REQUEST(xDRI3BufferFromPixmapReq);
|
||||||
xDRI3BufferFromPixmapReply rep = {
|
|
||||||
.type = X_Reply,
|
|
||||||
.nfd = 1,
|
|
||||||
.sequenceNumber = client->sequence,
|
|
||||||
.length = 0,
|
|
||||||
};
|
|
||||||
int rc;
|
int rc;
|
||||||
int fd;
|
int fd;
|
||||||
PixmapPtr pixmap;
|
PixmapPtr pixmap;
|
||||||
|
@ -275,10 +269,15 @@ proc_dri3_buffer_from_pixmap(ClientPtr client)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
rep.width = pixmap->drawable.width;
|
xDRI3BufferFromPixmapReply rep = {
|
||||||
rep.height = pixmap->drawable.height;
|
.type = X_Reply,
|
||||||
rep.depth = pixmap->drawable.depth;
|
.nfd = 1,
|
||||||
rep.bpp = pixmap->drawable.bitsPerPixel;
|
.sequenceNumber = client->sequence,
|
||||||
|
.width = pixmap->drawable.width,
|
||||||
|
.height = pixmap->drawable.height,
|
||||||
|
.depth = pixmap->drawable.depth,
|
||||||
|
.bpp = pixmap->drawable.bitsPerPixel,
|
||||||
|
};
|
||||||
|
|
||||||
fd = dri3_fd_from_pixmap(pixmap, &rep.stride, &rep.size);
|
fd = dri3_fd_from_pixmap(pixmap, &rep.stride, &rep.size);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
|
@ -336,7 +335,6 @@ proc_dri3_fd_from_fence(ClientPtr client)
|
||||||
.type = X_Reply,
|
.type = X_Reply,
|
||||||
.nfd = 1,
|
.nfd = 1,
|
||||||
.sequenceNumber = client->sequence,
|
.sequenceNumber = client->sequence,
|
||||||
.length = 0,
|
|
||||||
};
|
};
|
||||||
DrawablePtr drawable;
|
DrawablePtr drawable;
|
||||||
int fd;
|
int fd;
|
||||||
|
@ -372,10 +370,6 @@ static int
|
||||||
proc_dri3_get_supported_modifiers(ClientPtr client)
|
proc_dri3_get_supported_modifiers(ClientPtr client)
|
||||||
{
|
{
|
||||||
REQUEST(xDRI3GetSupportedModifiersReq);
|
REQUEST(xDRI3GetSupportedModifiersReq);
|
||||||
xDRI3GetSupportedModifiersReply rep = {
|
|
||||||
.type = X_Reply,
|
|
||||||
.sequenceNumber = client->sequence,
|
|
||||||
};
|
|
||||||
WindowPtr window;
|
WindowPtr window;
|
||||||
ScreenPtr pScreen;
|
ScreenPtr pScreen;
|
||||||
CARD64 *window_modifiers = NULL;
|
CARD64 *window_modifiers = NULL;
|
||||||
|
@ -397,29 +391,40 @@ proc_dri3_get_supported_modifiers(ClientPtr client)
|
||||||
&nwindowmodifiers, &window_modifiers,
|
&nwindowmodifiers, &window_modifiers,
|
||||||
&nscreenmodifiers, &screen_modifiers);
|
&nscreenmodifiers, &screen_modifiers);
|
||||||
|
|
||||||
rep.numWindowModifiers = nwindowmodifiers;
|
const size_t bufsz = (nwindowmodifiers + nscreenmodifiers) * sizeof(CARD64);
|
||||||
rep.numScreenModifiers = nscreenmodifiers;
|
CARD64 *buf = calloc(1, bufsz);
|
||||||
rep.length = bytes_to_int32(rep.numWindowModifiers * sizeof(CARD64)) +
|
if (!buf) {
|
||||||
bytes_to_int32(rep.numScreenModifiers * sizeof(CARD64));
|
free(window_modifiers);
|
||||||
|
free(screen_modifiers);
|
||||||
|
return BadAlloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(buf, window_modifiers, sizeof(CARD64) * nwindowmodifiers);
|
||||||
|
memcpy(&buf[nwindowmodifiers], screen_modifiers, sizeof(CARD64) * nscreenmodifiers);
|
||||||
|
|
||||||
|
free(window_modifiers);
|
||||||
|
free(screen_modifiers);
|
||||||
|
|
||||||
|
xDRI3GetSupportedModifiersReply rep = {
|
||||||
|
.type = X_Reply,
|
||||||
|
.sequenceNumber = client->sequence,
|
||||||
|
.numWindowModifiers = nwindowmodifiers,
|
||||||
|
.numScreenModifiers = nscreenmodifiers,
|
||||||
|
.length = bytes_to_int32(bufsz),
|
||||||
|
};
|
||||||
|
|
||||||
if (client->swapped) {
|
if (client->swapped) {
|
||||||
swaps(&rep.sequenceNumber);
|
swaps(&rep.sequenceNumber);
|
||||||
swapl(&rep.length);
|
swapl(&rep.length);
|
||||||
swapl(&rep.numWindowModifiers);
|
swapl(&rep.numWindowModifiers);
|
||||||
swapl(&rep.numScreenModifiers);
|
swapl(&rep.numScreenModifiers);
|
||||||
for (i = 0; i < nwindowmodifiers; i++)
|
for (i = 0; i < nwindowmodifiers+nscreenmodifiers; i++)
|
||||||
swapll(&window_modifiers[i]);
|
swapll(&buf[i]);
|
||||||
for (i = 0; i < nscreenmodifiers; i++)
|
|
||||||
swapll(&screen_modifiers[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WriteToClient(client, sizeof(rep), &rep);
|
WriteToClient(client, sizeof(rep), &rep);
|
||||||
WriteToClient(client, nwindowmodifiers * sizeof(CARD64), window_modifiers);
|
WriteToClient(client, bufsz, buf);
|
||||||
WriteToClient(client, nscreenmodifiers * sizeof(CARD64), screen_modifiers);
|
free(buf);
|
||||||
|
|
||||||
free(window_modifiers);
|
|
||||||
free(screen_modifiers);
|
|
||||||
|
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -521,10 +526,6 @@ static int
|
||||||
proc_dri3_buffers_from_pixmap(ClientPtr client)
|
proc_dri3_buffers_from_pixmap(ClientPtr client)
|
||||||
{
|
{
|
||||||
REQUEST(xDRI3BuffersFromPixmapReq);
|
REQUEST(xDRI3BuffersFromPixmapReq);
|
||||||
xDRI3BuffersFromPixmapReply rep = {
|
|
||||||
.type = X_Reply,
|
|
||||||
.sequenceNumber = client->sequence,
|
|
||||||
};
|
|
||||||
int rc;
|
int rc;
|
||||||
int fds[4];
|
int fds[4];
|
||||||
int num_fds;
|
int num_fds;
|
||||||
|
@ -545,26 +546,6 @@ proc_dri3_buffers_from_pixmap(ClientPtr client)
|
||||||
if (num_fds == 0)
|
if (num_fds == 0)
|
||||||
return BadPixmap;
|
return BadPixmap;
|
||||||
|
|
||||||
rep.nfd = num_fds;
|
|
||||||
rep.length = bytes_to_int32(num_fds * 2 * sizeof(CARD32));
|
|
||||||
rep.width = pixmap->drawable.width;
|
|
||||||
rep.height = pixmap->drawable.height;
|
|
||||||
rep.depth = pixmap->drawable.depth;
|
|
||||||
rep.bpp = pixmap->drawable.bitsPerPixel;
|
|
||||||
rep.modifier = modifier;
|
|
||||||
|
|
||||||
if (client->swapped) {
|
|
||||||
swaps(&rep.sequenceNumber);
|
|
||||||
swapl(&rep.length);
|
|
||||||
swaps(&rep.width);
|
|
||||||
swaps(&rep.height);
|
|
||||||
swapll(&rep.modifier);
|
|
||||||
for (i = 0; i < num_fds; i++) {
|
|
||||||
swapl(&strides[i]);
|
|
||||||
swapl(&offsets[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < num_fds; i++) {
|
for (i = 0; i < num_fds; i++) {
|
||||||
if (WriteFdToClient(client, fds[i], TRUE) < 0) {
|
if (WriteFdToClient(client, fds[i], TRUE) < 0) {
|
||||||
while (i--)
|
while (i--)
|
||||||
|
@ -573,10 +554,39 @@ proc_dri3_buffers_from_pixmap(ClientPtr client)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WriteToClient(client, sizeof(rep), &rep);
|
const size_t bufsz = num_fds * 2 * sizeof(CARD32);
|
||||||
WriteToClient(client, num_fds * sizeof(CARD32), strides);
|
CARD32 *buf = calloc(1, bufsz);
|
||||||
WriteToClient(client, num_fds * sizeof(CARD32), offsets);
|
if (!buf)
|
||||||
|
return BadAlloc;
|
||||||
|
|
||||||
|
memcpy(buf, strides, num_fds * sizeof(CARD32));
|
||||||
|
memcpy(&buf[num_fds], offsets, num_fds * sizeof(CARD32));
|
||||||
|
|
||||||
|
xDRI3BuffersFromPixmapReply rep = {
|
||||||
|
.type = X_Reply,
|
||||||
|
.sequenceNumber = client->sequence,
|
||||||
|
.nfd = num_fds,
|
||||||
|
.length = bytes_to_int32(bufsz),
|
||||||
|
.width = pixmap->drawable.width,
|
||||||
|
.height = pixmap->drawable.height,
|
||||||
|
.depth = pixmap->drawable.depth,
|
||||||
|
.bpp = pixmap->drawable.bitsPerPixel,
|
||||||
|
.modifier = modifier,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (client->swapped) {
|
||||||
|
swaps(&rep.sequenceNumber);
|
||||||
|
swapl(&rep.length);
|
||||||
|
swaps(&rep.width);
|
||||||
|
swaps(&rep.height);
|
||||||
|
swapll(&rep.modifier);
|
||||||
|
for (i = 0; i < num_fds * 2; i++)
|
||||||
|
swapl(&buf[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteToClient(client, sizeof(rep), &rep);
|
||||||
|
WriteToClient(client, bufsz, buf);
|
||||||
|
free(buf);
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -646,30 +656,47 @@ proc_dri3_free_syncobj(ClientPtr client)
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
int (*proc_dri3_vector[DRI3NumberRequests]) (ClientPtr) = {
|
|
||||||
proc_dri3_query_version, /* 0 */
|
|
||||||
proc_dri3_open, /* 1 */
|
|
||||||
proc_dri3_pixmap_from_buffer, /* 2 */
|
|
||||||
proc_dri3_buffer_from_pixmap, /* 3 */
|
|
||||||
proc_dri3_fence_from_fd, /* 4 */
|
|
||||||
proc_dri3_fd_from_fence, /* 5 */
|
|
||||||
proc_dri3_get_supported_modifiers, /* 6 */
|
|
||||||
proc_dri3_pixmap_from_buffers, /* 7 */
|
|
||||||
proc_dri3_buffers_from_pixmap, /* 8 */
|
|
||||||
proc_dri3_set_drm_device_in_use, /* 9 */
|
|
||||||
proc_dri3_import_syncobj, /* 10 */
|
|
||||||
proc_dri3_free_syncobj, /* 11 */
|
|
||||||
};
|
|
||||||
|
|
||||||
int
|
int
|
||||||
proc_dri3_dispatch(ClientPtr client)
|
proc_dri3_dispatch(ClientPtr client)
|
||||||
{
|
{
|
||||||
REQUEST(xReq);
|
REQUEST(xReq);
|
||||||
if (!client->local)
|
if (!client->local)
|
||||||
return BadMatch;
|
return BadMatch;
|
||||||
if (stuff->data >= DRI3NumberRequests || !proc_dri3_vector[stuff->data])
|
|
||||||
|
switch (stuff->data) {
|
||||||
|
case X_DRI3QueryVersion:
|
||||||
|
return proc_dri3_query_version(client);
|
||||||
|
case X_DRI3Open:
|
||||||
|
return proc_dri3_open(client);
|
||||||
|
case X_DRI3PixmapFromBuffer:
|
||||||
|
return proc_dri3_pixmap_from_buffer(client);
|
||||||
|
case X_DRI3BufferFromPixmap:
|
||||||
|
return proc_dri3_buffer_from_pixmap(client);
|
||||||
|
case X_DRI3FenceFromFD:
|
||||||
|
return proc_dri3_fence_from_fd(client);
|
||||||
|
case X_DRI3FDFromFence:
|
||||||
|
return proc_dri3_fd_from_fence(client);
|
||||||
|
|
||||||
|
/* v1.2 */
|
||||||
|
case xDRI3GetSupportedModifiers:
|
||||||
|
return proc_dri3_get_supported_modifiers(client);
|
||||||
|
case xDRI3PixmapFromBuffers:
|
||||||
|
return proc_dri3_pixmap_from_buffers(client);
|
||||||
|
case xDRI3BuffersFromPixmap:
|
||||||
|
return proc_dri3_buffers_from_pixmap(client);
|
||||||
|
|
||||||
|
/* v1.3 */
|
||||||
|
case xDRI3SetDRMDeviceInUse:
|
||||||
|
return proc_dri3_set_drm_device_in_use(client);
|
||||||
|
|
||||||
|
/* v1.4 */
|
||||||
|
case xDRI3ImportSyncobj:
|
||||||
|
return proc_dri3_import_syncobj(client);
|
||||||
|
case xDRI3FreeSyncobj:
|
||||||
|
return proc_dri3_free_syncobj(client);
|
||||||
|
default:
|
||||||
return BadRequest;
|
return BadRequest;
|
||||||
return (*proc_dri3_vector[stuff->data]) (client);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -679,7 +706,7 @@ sproc_dri3_query_version(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xDRI3QueryVersionReq);
|
REQUEST_SIZE_MATCH(xDRI3QueryVersionReq);
|
||||||
swapl(&stuff->majorVersion);
|
swapl(&stuff->majorVersion);
|
||||||
swapl(&stuff->minorVersion);
|
swapl(&stuff->minorVersion);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_query_version(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -689,7 +716,7 @@ sproc_dri3_open(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xDRI3OpenReq);
|
REQUEST_SIZE_MATCH(xDRI3OpenReq);
|
||||||
swapl(&stuff->drawable);
|
swapl(&stuff->drawable);
|
||||||
swapl(&stuff->provider);
|
swapl(&stuff->provider);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_open(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -703,7 +730,7 @@ sproc_dri3_pixmap_from_buffer(ClientPtr client)
|
||||||
swaps(&stuff->width);
|
swaps(&stuff->width);
|
||||||
swaps(&stuff->height);
|
swaps(&stuff->height);
|
||||||
swaps(&stuff->stride);
|
swaps(&stuff->stride);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_pixmap_from_buffer(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -712,7 +739,7 @@ sproc_dri3_buffer_from_pixmap(ClientPtr client)
|
||||||
REQUEST(xDRI3BufferFromPixmapReq);
|
REQUEST(xDRI3BufferFromPixmapReq);
|
||||||
REQUEST_SIZE_MATCH(xDRI3BufferFromPixmapReq);
|
REQUEST_SIZE_MATCH(xDRI3BufferFromPixmapReq);
|
||||||
swapl(&stuff->pixmap);
|
swapl(&stuff->pixmap);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_buffer_from_pixmap(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -722,7 +749,7 @@ sproc_dri3_fence_from_fd(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xDRI3FenceFromFDReq);
|
REQUEST_SIZE_MATCH(xDRI3FenceFromFDReq);
|
||||||
swapl(&stuff->drawable);
|
swapl(&stuff->drawable);
|
||||||
swapl(&stuff->fence);
|
swapl(&stuff->fence);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_fence_from_fd(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -732,7 +759,7 @@ sproc_dri3_fd_from_fence(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xDRI3FDFromFenceReq);
|
REQUEST_SIZE_MATCH(xDRI3FDFromFenceReq);
|
||||||
swapl(&stuff->drawable);
|
swapl(&stuff->drawable);
|
||||||
swapl(&stuff->fence);
|
swapl(&stuff->fence);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_fd_from_fence(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -741,7 +768,7 @@ sproc_dri3_get_supported_modifiers(ClientPtr client)
|
||||||
REQUEST(xDRI3GetSupportedModifiersReq);
|
REQUEST(xDRI3GetSupportedModifiersReq);
|
||||||
REQUEST_SIZE_MATCH(xDRI3GetSupportedModifiersReq);
|
REQUEST_SIZE_MATCH(xDRI3GetSupportedModifiersReq);
|
||||||
swapl(&stuff->window);
|
swapl(&stuff->window);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_get_supported_modifiers(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -762,7 +789,7 @@ sproc_dri3_pixmap_from_buffers(ClientPtr client)
|
||||||
swapl(&stuff->stride3);
|
swapl(&stuff->stride3);
|
||||||
swapl(&stuff->offset3);
|
swapl(&stuff->offset3);
|
||||||
swapll(&stuff->modifier);
|
swapll(&stuff->modifier);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_pixmap_from_buffers(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -771,7 +798,7 @@ sproc_dri3_buffers_from_pixmap(ClientPtr client)
|
||||||
REQUEST(xDRI3BuffersFromPixmapReq);
|
REQUEST(xDRI3BuffersFromPixmapReq);
|
||||||
REQUEST_SIZE_MATCH(xDRI3BuffersFromPixmapReq);
|
REQUEST_SIZE_MATCH(xDRI3BuffersFromPixmapReq);
|
||||||
swapl(&stuff->pixmap);
|
swapl(&stuff->pixmap);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_buffers_from_pixmap(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -782,7 +809,7 @@ sproc_dri3_set_drm_device_in_use(ClientPtr client)
|
||||||
swapl(&stuff->window);
|
swapl(&stuff->window);
|
||||||
swapl(&stuff->drmMajor);
|
swapl(&stuff->drmMajor);
|
||||||
swapl(&stuff->drmMinor);
|
swapl(&stuff->drmMinor);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_set_drm_device_in_use(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -792,7 +819,7 @@ sproc_dri3_import_syncobj(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xDRI3ImportSyncobjReq);
|
REQUEST_SIZE_MATCH(xDRI3ImportSyncobjReq);
|
||||||
swapl(&stuff->syncobj);
|
swapl(&stuff->syncobj);
|
||||||
swapl(&stuff->drawable);
|
swapl(&stuff->drawable);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_import_syncobj(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _X_COLD
|
static int _X_COLD
|
||||||
|
@ -801,31 +828,48 @@ sproc_dri3_free_syncobj(ClientPtr client)
|
||||||
REQUEST(xDRI3FreeSyncobjReq);
|
REQUEST(xDRI3FreeSyncobjReq);
|
||||||
REQUEST_SIZE_MATCH(xDRI3FreeSyncobjReq);
|
REQUEST_SIZE_MATCH(xDRI3FreeSyncobjReq);
|
||||||
swapl(&stuff->syncobj);
|
swapl(&stuff->syncobj);
|
||||||
return (*proc_dri3_vector[stuff->dri3ReqType]) (client);
|
return proc_dri3_free_syncobj(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
int (*sproc_dri3_vector[DRI3NumberRequests]) (ClientPtr) = {
|
|
||||||
sproc_dri3_query_version, /* 0 */
|
|
||||||
sproc_dri3_open, /* 1 */
|
|
||||||
sproc_dri3_pixmap_from_buffer, /* 2 */
|
|
||||||
sproc_dri3_buffer_from_pixmap, /* 3 */
|
|
||||||
sproc_dri3_fence_from_fd, /* 4 */
|
|
||||||
sproc_dri3_fd_from_fence, /* 5 */
|
|
||||||
sproc_dri3_get_supported_modifiers, /* 6 */
|
|
||||||
sproc_dri3_pixmap_from_buffers, /* 7 */
|
|
||||||
sproc_dri3_buffers_from_pixmap, /* 8 */
|
|
||||||
sproc_dri3_set_drm_device_in_use, /* 9 */
|
|
||||||
sproc_dri3_import_syncobj, /* 10 */
|
|
||||||
sproc_dri3_free_syncobj, /* 11 */
|
|
||||||
};
|
|
||||||
|
|
||||||
int _X_COLD
|
int _X_COLD
|
||||||
sproc_dri3_dispatch(ClientPtr client)
|
sproc_dri3_dispatch(ClientPtr client)
|
||||||
{
|
{
|
||||||
REQUEST(xReq);
|
REQUEST(xReq);
|
||||||
if (!client->local)
|
if (!client->local)
|
||||||
return BadMatch;
|
return BadMatch;
|
||||||
if (stuff->data >= DRI3NumberRequests || !sproc_dri3_vector[stuff->data])
|
|
||||||
|
switch (stuff->data) {
|
||||||
|
case X_DRI3QueryVersion:
|
||||||
|
return sproc_dri3_query_version(client);
|
||||||
|
case X_DRI3Open:
|
||||||
|
return sproc_dri3_open(client);
|
||||||
|
case X_DRI3PixmapFromBuffer:
|
||||||
|
return sproc_dri3_pixmap_from_buffer(client);
|
||||||
|
case X_DRI3BufferFromPixmap:
|
||||||
|
return sproc_dri3_buffer_from_pixmap(client);
|
||||||
|
case X_DRI3FenceFromFD:
|
||||||
|
return sproc_dri3_fence_from_fd(client);
|
||||||
|
case X_DRI3FDFromFence:
|
||||||
|
return sproc_dri3_fd_from_fence(client);
|
||||||
|
|
||||||
|
/* v1.2 */
|
||||||
|
case xDRI3GetSupportedModifiers:
|
||||||
|
return sproc_dri3_get_supported_modifiers(client);
|
||||||
|
case xDRI3PixmapFromBuffers:
|
||||||
|
return sproc_dri3_pixmap_from_buffers(client);
|
||||||
|
case xDRI3BuffersFromPixmap:
|
||||||
|
return sproc_dri3_buffers_from_pixmap(client);
|
||||||
|
|
||||||
|
/* v1.3 */
|
||||||
|
case xDRI3SetDRMDeviceInUse:
|
||||||
|
return sproc_dri3_set_drm_device_in_use(client);
|
||||||
|
|
||||||
|
/* v1.4 */
|
||||||
|
case xDRI3ImportSyncobj:
|
||||||
|
return sproc_dri3_import_syncobj(client);
|
||||||
|
case xDRI3FreeSyncobj:
|
||||||
|
return sproc_dri3_free_syncobj(client);
|
||||||
|
default:
|
||||||
return BadRequest;
|
return BadRequest;
|
||||||
return (*sproc_dri3_vector[stuff->data]) (client);
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue