Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
X
xf86-video-qxl
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
9
Issues
9
List
Boards
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Container Registry
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xorg
driver
xf86-video-qxl
Commits
3cbd14b9
Commit
3cbd14b9
authored
Mar 27, 2013
by
Jeremy White
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make the Deferred FPS mode available in all cases, not just XSPICE.
parent
f6aebb14
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
70 additions
and
43 deletions
+70
-43
src/Makefile.am
src/Makefile.am
+1
-0
src/dfps.c
src/dfps.c
+54
-3
src/dfps.h
src/dfps.h
+1
-16
src/qxl.h
src/qxl.h
+7
-4
src/qxl_driver.c
src/qxl_driver.c
+7
-16
src/qxl_uxa.c
src/qxl_uxa.c
+0
-4
No files found.
src/Makefile.am
View file @
3cbd14b9
...
...
@@ -56,6 +56,7 @@ qxl_drv_la_SOURCES = \
qxl_uxa.c
\
qxl_ums_mode.c
\
qxl_io.c
\
dfps.c
\
compat-api.h
endif
...
...
src/dfps.c
View file @
3cbd14b9
...
...
@@ -44,14 +44,65 @@
#include "qxl.h"
#include "dfps.h"
struct
dfps_info_t
typedef
struct
_
dfps_info_t
{
RegionRec
updated_region
;
PixmapPtr
copy_src
;
Pixel
solid_pixel
;
GCPtr
pgc
;
};
}
dfps_info_t
;
static
inline
dfps_info_t
*
dfps_get_info
(
PixmapPtr
pixmap
)
{
#if HAS_DEVPRIVATEKEYREC
return
dixGetPrivate
(
&
pixmap
->
devPrivates
,
&
uxa_pixmap_index
);
#else
return
dixLookupPrivate
(
&
pixmap
->
devPrivates
,
&
uxa_pixmap_index
);
#endif
}
static
inline
void
dfps_set_info
(
PixmapPtr
pixmap
,
dfps_info_t
*
info
)
{
dixSetPrivate
(
&
pixmap
->
devPrivates
,
&
uxa_pixmap_index
,
info
);
}
typedef
struct
FrameTimer
{
OsTimerPtr
xorg_timer
;
FrameTimerFunc
func
;
void
*
opaque
;
// also stored in xorg_timer, but needed for timer_start
}
Timer
;
static
CARD32
xorg_timer_callback
(
OsTimerPtr
xorg_timer
,
CARD32
time
,
pointer
arg
)
{
FrameTimer
*
timer
=
(
FrameTimer
*
)
arg
;
timer
->
func
(
timer
->
opaque
);
return
0
;
// if non zero xorg does a TimerSet, we don't want that.
}
static
FrameTimer
*
timer_add
(
FrameTimerFunc
func
,
void
*
opaque
)
{
FrameTimer
*
timer
=
calloc
(
sizeof
(
FrameTimer
),
1
);
timer
->
xorg_timer
=
TimerSet
(
NULL
,
0
,
1e9
/* TODO: infinity? */
,
xorg_timer_callback
,
timer
);
timer
->
func
=
func
;
timer
->
opaque
=
opaque
;
return
timer
;
}
static
void
timer_start
(
FrameTimer
*
timer
,
uint32_t
ms
)
{
TimerSet
(
timer
->
xorg_timer
,
0
/* flags */
,
ms
,
xorg_timer_callback
,
timer
);
}
void
dfps_start_ticker
(
qxl_screen_t
*
qxl
)
{
qxl
->
frames_timer
=
timer_add
(
dfps_ticker
,
qxl
);
timer_start
(
qxl
->
frames_timer
,
1000
/
qxl
->
deferred_fps
);
}
void
dfps_ticker
(
void
*
opaque
)
{
...
...
@@ -68,7 +119,7 @@ void dfps_ticker(void *opaque)
RegionUninit
(
&
info
->
updated_region
);
RegionInit
(
&
info
->
updated_region
,
NULL
,
0
);
}
qxl
->
core
->
timer_start
(
qxl
->
frames_timer
,
1000
/
qxl
->
deferred_fps
);
timer_start
(
qxl
->
frames_timer
,
1000
/
qxl
->
deferred_fps
);
}
...
...
src/dfps.h
View file @
3cbd14b9
...
...
@@ -22,21 +22,6 @@
*
*/
typedef
struct
dfps_info_t
dfps_info_t
;
void
dfps_start_ticker
(
qxl_screen_t
*
qxl
);
void
dfps_ticker
(
void
*
opaque
);
void
dfps_set_uxa_functions
(
qxl_screen_t
*
qxl
,
ScreenPtr
screen
);
static
inline
dfps_info_t
*
dfps_get_info
(
PixmapPtr
pixmap
)
{
#if HAS_DEVPRIVATEKEYREC
return
dixGetPrivate
(
&
pixmap
->
devPrivates
,
&
uxa_pixmap_index
);
#else
return
dixLookupPrivate
(
&
pixmap
->
devPrivates
,
&
uxa_pixmap_index
);
#endif
}
static
inline
void
dfps_set_info
(
PixmapPtr
pixmap
,
dfps_info_t
*
info
)
{
dixSetPrivate
(
&
pixmap
->
devPrivates
,
&
uxa_pixmap_index
,
info
);
}
src/qxl.h
View file @
3cbd14b9
...
...
@@ -105,6 +105,7 @@ enum {
OPTION_ENABLE_FALLBACK_CACHE
,
OPTION_ENABLE_SURFACES
,
OPTION_NUM_HEADS
,
OPTION_SPICE_DEFERRED_FPS
,
#ifdef XSPICE
OPTION_SPICE_PORT
,
OPTION_SPICE_TLS_PORT
,
...
...
@@ -128,7 +129,6 @@ enum {
OPTION_SPICE_TLS_CIPHERS
,
OPTION_SPICE_CACERT_FILE
,
OPTION_SPICE_DH_FILE
,
OPTION_SPICE_DEFERRED_FPS
,
OPTION_SPICE_EXIT_ON_DISCONNECT
,
OPTION_SPICE_PLAYBACK_FIFO_DIR
,
#endif
...
...
@@ -177,6 +177,9 @@ void qxl_ums_setup_funcs(qxl_screen_t *qxl);
struct
qxl_bo
*
qxl_ums_surf_mem_alloc
(
qxl_screen_t
*
qxl
,
uint32_t
size
);
struct
qxl_bo
*
qxl_ums_lookup_phy_addr
(
qxl_screen_t
*
qxl
,
uint64_t
phy_addr
);
typedef
struct
FrameTimer
FrameTimer
;
typedef
void
(
*
FrameTimerFunc
)(
void
*
opaque
);
struct
_qxl_screen_t
{
/* These are the names QXL uses */
...
...
@@ -275,12 +278,13 @@ struct _qxl_screen_t
int
enable_fallback_cache
;
int
enable_surfaces
;
FrameTimer
*
frames_timer
;
#ifdef XSPICE
/* XSpice specific */
struct
QXLRom
shadow_rom
;
/* Parameter RAM */
SpiceServer
*
spice_server
;
SpiceCoreInterface
*
core
;
SpiceTimer
*
frames_timer
;
QXLWorker
*
worker
;
int
worker_running
;
...
...
@@ -307,11 +311,10 @@ struct _qxl_screen_t
uint8_t
*
data
,
*
flipped
;
}
guest_primary
;
uint32_t
deferred_fps
;
char
playback_fifo_dir
[
PATH_MAX
];
#endif
/* XSPICE */
uint32_t
deferred_fps
;
struct
xorg_list
ums_bos
;
struct
qxl_bo_funcs
*
bo_funcs
;
};
...
...
src/qxl_driver.c
View file @
3cbd14b9
...
...
@@ -54,10 +54,11 @@
#include "spiceqxl_inputs.h"
#include "spiceqxl_io_port.h"
#include "spiceqxl_spice_server.h"
#include "dfps.h"
#include "spiceqxl_audio.h"
#endif
/* XSPICE */
#include "dfps.h"
extern
void
compat_init_scrn
(
ScrnInfoPtr
);
#define BREAKPOINT() do { __asm__ __volatile__ ("int $03"); } while (0)
...
...
@@ -78,6 +79,8 @@ const OptionInfoRec DefaultOptions[] =
"EnableSurfaces"
,
OPTV_BOOLEAN
,
{
1
},
FALSE
},
{
OPTION_NUM_HEADS
,
"NumHeads"
,
OPTV_INTEGER
,
{
4
},
FALSE
},
{
OPTION_SPICE_DEFERRED_FPS
,
"SpiceDeferredFPS"
,
OPTV_INTEGER
,
{
0
},
FALSE
},
#ifdef XSPICE
{
OPTION_SPICE_PORT
,
"SpicePort"
,
OPTV_INTEGER
,
{
5900
},
FALSE
},
...
...
@@ -124,8 +127,6 @@ const OptionInfoRec DefaultOptions[] =
"SpiceCacertFile"
,
OPTV_STRING
,
{
0
},
FALSE
},
{
OPTION_SPICE_DH_FILE
,
"SpiceDhFile"
,
OPTV_STRING
,
{
0
},
FALSE
},
{
OPTION_SPICE_DEFERRED_FPS
,
"SpiceDeferredFPS"
,
OPTV_INTEGER
,
{
0
},
FALSE
},
{
OPTION_SPICE_EXIT_ON_DISCONNECT
,
"SpiceExitOnDisconnect"
,
OPTV_BOOLEAN
,
{
0
},
FALSE
},
{
OPTION_SPICE_PLAYBACK_FIFO_DIR
,
...
...
@@ -543,9 +544,7 @@ qxl_resize_primary_to_virtual (qxl_screen_t *qxl)
{
PixmapPtr
root
=
pScreen
->
GetScreenPixmap
(
pScreen
);
#ifdef XSPICE
if
(
qxl
->
deferred_fps
<=
0
)
#endif
{
qxl_surface_t
*
surf
;
...
...
@@ -606,9 +605,7 @@ qxl_create_screen_resources (ScreenPtr pScreen)
pPixmap
=
pScreen
->
GetScreenPixmap
(
pScreen
);
#ifdef XSPICE
if
(
qxl
->
deferred_fps
<=
0
)
#endif
{
set_screen_pixmap_header
(
pScreen
);
...
...
@@ -640,11 +637,6 @@ spiceqxl_screen_init (ScrnInfoPtr pScrn, qxl_screen_t *qxl)
qxl_add_spice_playback_interface
(
qxl
);
qxl
->
worker
->
start
(
qxl
->
worker
);
qxl
->
worker_running
=
TRUE
;
if
(
qxl
->
deferred_fps
)
{
qxl
->
frames_timer
=
qxl
->
core
->
timer_add
(
dfps_ticker
,
qxl
);
qxl
->
core
->
timer_start
(
qxl
->
frames_timer
,
1000
/
qxl
->
deferred_fps
);
}
}
qxl
->
spice_server
=
qxl
->
spice_server
;
}
...
...
@@ -802,6 +794,9 @@ qxl_screen_init (SCREEN_INIT_ARGS_DECL)
/* bounds" */
xf86RandR12SetTransformSupport
(
pScreen
,
TRUE
);
if
(
qxl
->
deferred_fps
)
dfps_start_ticker
(
qxl
);
return
TRUE
;
out:
...
...
@@ -854,9 +849,7 @@ qxl_leave_vt (VT_FUNC_ARGS_DECL)
pScrn
->
EnableDisableFBAccess
(
XF86_SCRN_ARG
(
pScrn
),
FALSE
);
#ifdef XSPICE
if
(
qxl
->
deferred_fps
<=
0
)
#endif
qxl
->
vt_surfaces
=
qxl_surface_cache_evacuate_all
(
qxl
->
surface_cache
);
ioport_write
(
qxl
,
QXL_IO_RESET
,
0
);
...
...
@@ -977,13 +970,11 @@ qxl_pre_init_common(ScrnInfoPtr pScrn)
qxl
->
num_heads
=
get_int_option
(
qxl
->
options
,
OPTION_NUM_HEADS
,
"QXL_NUM_HEADS"
);
#ifdef XSPICE
qxl
->
deferred_fps
=
get_int_option
(
qxl
->
options
,
OPTION_SPICE_DEFERRED_FPS
,
"XSPICE_DEFERRED_FPS"
);
if
(
qxl
->
deferred_fps
>
0
)
xf86DrvMsg
(
scrnIndex
,
X_INFO
,
"Deferred FPS: %d
\n
"
,
qxl
->
deferred_fps
);
else
xf86DrvMsg
(
scrnIndex
,
X_INFO
,
"Deferred Frames: Disabled
\n
"
);
#endif
xf86DrvMsg
(
scrnIndex
,
X_INFO
,
"Offscreen Surfaces: %s
\n
"
,
qxl
->
enable_surfaces
?
"Enabled"
:
"Disabled"
);
...
...
src/qxl_uxa.c
View file @
3cbd14b9
...
...
@@ -34,9 +34,7 @@
#endif
#include "qxl.h"
#ifdef XSPICE
#include "dfps.h"
#endif
#include <spice/protocol.h>
#if HAS_DEVPRIVATEKEYREC
...
...
@@ -490,11 +488,9 @@ qxl_uxa_init (qxl_screen_t *qxl, ScreenPtr screen)
qxl
->
uxa
->
uxa_major
=
1
;
qxl
->
uxa
->
uxa_minor
=
0
;
#ifdef XSPICE
if
(
qxl
->
deferred_fps
)
dfps_set_uxa_functions
(
qxl
,
screen
);
else
#endif
set_uxa_functions
(
qxl
,
screen
);
if
(
!
uxa_driver_init
(
screen
,
qxl
->
uxa
))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment