-
-
Notifications
You must be signed in to change notification settings - Fork 144
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Based on: kasmtech/KasmVNC@d049821 kasmtech/KasmVNC@a1e3d91 kasmtech/KasmVNC@9aa33f1 kasmtech/KasmVNC@0527c9f Implements #373
- Loading branch information
1 parent
d28daaa
commit 162b4ae
Showing
19 changed files
with
1,963 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
include_directories(../miext/sync ../randr ../render) | ||
|
||
add_definitions(-DHAVE_XORG_CONFIG_H) | ||
|
||
add_library(dri3 STATIC | ||
dri3.c | ||
dri3_request.c | ||
dri3_screen.c) | ||
|
||
target_link_libraries(dri3 PkgConfig::DRM) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
/* | ||
* Copyright © 2013 Keith Packard | ||
* | ||
* Permission to use, copy, modify, distribute, and sell this software and its | ||
* documentation for any purpose is hereby granted without fee, provided that | ||
* the above copyright notice appear in all copies and that both that copyright | ||
* notice and this permission notice appear in supporting documentation, and | ||
* that the name of the copyright holders not be used in advertising or | ||
* publicity pertaining to distribution of the software without specific, | ||
* written prior permission. The copyright holders make no representations | ||
* about the suitability of this software for any purpose. It is provided "as | ||
* is" without express or implied warranty. | ||
* | ||
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, | ||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO | ||
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR | ||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, | ||
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | ||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | ||
* OF THIS SOFTWARE. | ||
*/ | ||
|
||
#ifdef HAVE_XORG_CONFIG_H | ||
#include <xorg-config.h> | ||
#endif | ||
|
||
#include "dri3_priv.h" | ||
|
||
#include <drm_fourcc.h> | ||
|
||
static int dri3_request; | ||
DevPrivateKeyRec dri3_screen_private_key; | ||
|
||
static int dri3_screen_generation; | ||
|
||
static Bool | ||
dri3_close_screen(ScreenPtr screen) | ||
{ | ||
dri3_screen_priv_ptr screen_priv = dri3_screen_priv(screen); | ||
|
||
unwrap(screen_priv, screen, CloseScreen); | ||
|
||
free(screen_priv); | ||
return (*screen->CloseScreen) (screen); | ||
} | ||
|
||
Bool | ||
dri3_screen_init(ScreenPtr screen, const dri3_screen_info_rec *info) | ||
{ | ||
dri3_screen_generation = serverGeneration; | ||
|
||
if (!dixRegisterPrivateKey(&dri3_screen_private_key, PRIVATE_SCREEN, 0)) | ||
return FALSE; | ||
|
||
if (!dri3_screen_priv(screen)) { | ||
dri3_screen_priv_ptr screen_priv = calloc(1, sizeof (dri3_screen_priv_rec)); | ||
if (!screen_priv) | ||
return FALSE; | ||
|
||
wrap(screen_priv, screen, CloseScreen, dri3_close_screen); | ||
|
||
screen_priv->info = info; | ||
|
||
dixSetPrivate(&screen->devPrivates, &dri3_screen_private_key, screen_priv); | ||
} | ||
|
||
return TRUE; | ||
} | ||
|
||
void | ||
dri3_extension_init(void) | ||
{ | ||
ExtensionEntry *extension; | ||
int i; | ||
|
||
/* If no screens support DRI3, there's no point offering the | ||
* extension at all | ||
*/ | ||
if (dri3_screen_generation != serverGeneration) | ||
return; | ||
|
||
#ifdef PANORAMIX | ||
if (!noPanoramiXExtension) | ||
return; | ||
#endif | ||
|
||
extension = AddExtension(DRI3_NAME, DRI3NumberEvents, DRI3NumberErrors, | ||
proc_dri3_dispatch, sproc_dri3_dispatch, | ||
NULL, StandardMinorOpcode); | ||
if (!extension) | ||
goto bail; | ||
|
||
dri3_request = extension->base; | ||
|
||
for (i = 0; i < screenInfo.numScreens; i++) { | ||
if (!dri3_screen_init(screenInfo.screens[i], NULL)) | ||
goto bail; | ||
} | ||
return; | ||
|
||
bail: | ||
FatalError("Cannot initialize DRI3 extension"); | ||
} | ||
|
||
uint32_t | ||
drm_format_for_depth(uint32_t depth, uint32_t bpp) | ||
{ | ||
switch (bpp) { | ||
case 16: | ||
return DRM_FORMAT_RGB565; | ||
case 24: | ||
return DRM_FORMAT_XRGB8888; | ||
case 30: | ||
return DRM_FORMAT_XRGB2101010; | ||
case 32: | ||
return DRM_FORMAT_ARGB8888; | ||
default: | ||
return 0; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
/* | ||
* Copyright © 2013 Keith Packard | ||
* | ||
* Permission to use, copy, modify, distribute, and sell this software and its | ||
* documentation for any purpose is hereby granted without fee, provided that | ||
* the above copyright notice appear in all copies and that both that copyright | ||
* notice and this permission notice appear in supporting documentation, and | ||
* that the name of the copyright holders not be used in advertising or | ||
* publicity pertaining to distribution of the software without specific, | ||
* written prior permission. The copyright holders make no representations | ||
* about the suitability of this software for any purpose. It is provided "as | ||
* is" without express or implied warranty. | ||
* | ||
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, | ||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO | ||
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR | ||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, | ||
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | ||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | ||
* OF THIS SOFTWARE. | ||
*/ | ||
|
||
#ifndef _DRI3_H_ | ||
#define _DRI3_H_ | ||
|
||
#ifdef DRI3 | ||
|
||
#include <X11/extensions/dri3proto.h> | ||
#include <randrstr.h> | ||
|
||
#define DRI3_SCREEN_INFO_VERSION 2 | ||
|
||
typedef int (*dri3_open_proc)(ScreenPtr screen, | ||
RRProviderPtr provider, | ||
int *fd); | ||
|
||
typedef int (*dri3_open_client_proc)(ClientPtr client, | ||
ScreenPtr screen, | ||
RRProviderPtr provider, | ||
int *fd); | ||
|
||
typedef PixmapPtr (*dri3_pixmap_from_fd_proc) (ScreenPtr screen, | ||
int fd, | ||
CARD16 width, | ||
CARD16 height, | ||
CARD16 stride, | ||
CARD8 depth, | ||
CARD8 bpp); | ||
|
||
typedef PixmapPtr (*dri3_pixmap_from_fds_proc) (ScreenPtr screen, | ||
CARD8 num_fds, | ||
const int *fds, | ||
CARD16 width, | ||
CARD16 height, | ||
const CARD32 *strides, | ||
const CARD32 *offsets, | ||
CARD8 depth, | ||
CARD8 bpp, | ||
CARD64 modifier); | ||
|
||
typedef int (*dri3_fd_from_pixmap_proc) (ScreenPtr screen, | ||
PixmapPtr pixmap, | ||
CARD16 *stride, | ||
CARD32 *size); | ||
|
||
typedef int (*dri3_fds_from_pixmap_proc) (ScreenPtr screen, | ||
PixmapPtr pixmap, | ||
int *fds, | ||
uint32_t *strides, | ||
uint32_t *offsets, | ||
uint64_t *modifier); | ||
|
||
typedef int (*dri3_get_formats_proc) (ScreenPtr screen, | ||
CARD32 *num_formats, | ||
CARD32 **formats); | ||
|
||
typedef int (*dri3_get_modifiers_proc) (ScreenPtr screen, | ||
uint32_t format, | ||
uint32_t *num_modifiers, | ||
uint64_t **modifiers); | ||
|
||
typedef int (*dri3_get_drawable_modifiers_proc) (DrawablePtr draw, | ||
uint32_t format, | ||
uint32_t *num_modifiers, | ||
uint64_t **modifiers); | ||
|
||
typedef struct dri3_screen_info { | ||
uint32_t version; | ||
|
||
dri3_open_proc open; | ||
dri3_pixmap_from_fd_proc pixmap_from_fd; | ||
dri3_fd_from_pixmap_proc fd_from_pixmap; | ||
|
||
/* Version 1 */ | ||
dri3_open_client_proc open_client; | ||
|
||
/* Version 2 */ | ||
dri3_pixmap_from_fds_proc pixmap_from_fds; | ||
dri3_fds_from_pixmap_proc fds_from_pixmap; | ||
dri3_get_formats_proc get_formats; | ||
dri3_get_modifiers_proc get_modifiers; | ||
dri3_get_drawable_modifiers_proc get_drawable_modifiers; | ||
|
||
} dri3_screen_info_rec, *dri3_screen_info_ptr; | ||
|
||
extern _X_EXPORT Bool | ||
dri3_screen_init(ScreenPtr screen, const dri3_screen_info_rec *info); | ||
|
||
extern _X_EXPORT int | ||
dri3_send_open_reply(ClientPtr client, int fd); | ||
|
||
extern _X_EXPORT uint32_t | ||
drm_format_for_depth(uint32_t depth, uint32_t bpp); | ||
|
||
#endif | ||
|
||
#endif /* _DRI3_H_ */ |
Oops, something went wrong.