From 0950f02ceb9eefbef19b2eed0990376df60bfe48 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Jun 12 2012 08:48:10 +0000 Subject: today's git snapshot - resurrect copy-fb --- diff --git a/.gitignore b/.gitignore index a5be97e..92d7d0f 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ xf86-video-intel-2.10.0.tar.bz2 /xf86-video-intel-2.18.0.tar.bz2 /xf86-video-intel-2.19.0.tar.bz2 /xf86-video-intel-20120529.tar.bz2 +/xf86-video-intel-20120612.tar.bz2 diff --git a/copy-fb.patch b/copy-fb.patch index df1e589..a08c919 100644 --- a/copy-fb.patch +++ b/copy-fb.patch @@ -1,65 +1,78 @@ -diff -up xf86-video-intel-2.10.0/src/drmmode_display.c.jx xf86-video-intel-2.10.0/src/drmmode_display.c ---- xf86-video-intel-2.10.0/src/drmmode_display.c.jx 2010-02-08 11:23:25.000000000 -0500 -+++ xf86-video-intel-2.10.0/src/drmmode_display.c 2010-02-08 11:23:46.000000000 -0500 -@@ -35,6 +35,8 @@ +From 8545142db00d0877683394f42984e6a65d1f7a80 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Mon, 11 Jun 2012 16:34:58 +0100 +Subject: [PATCH] intel/uxa: do copy fb at startup. + +--- + src/intel.h | 1 + + src/intel_display.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++ + src/intel_driver.c | 15 +++++-- + 3 files changed, 127 insertions(+), 3 deletions(-) + +diff --git a/src/intel.h b/src/intel.h +index 20d8282..541c2d0 100644 +--- a/src/intel.h ++++ b/src/intel.h +@@ -648,4 +648,5 @@ static inline Bool intel_pixmap_is_offscreen(PixmapPtr pixmap) + return priv && priv->offscreen; + } + ++extern void drmmode_copy_fb(ScrnInfoPtr scrn); + #endif /* _I830_H_ */ +diff --git a/src/intel_display.c b/src/intel_display.c +index 6f3f7e6..c7e2f0d 100644 +--- a/src/intel_display.c ++++ b/src/intel_display.c +@@ -35,6 +35,7 @@ #include #include - + #include +#include -+ + #include "xorgVersion.h" - #include "i830.h" -@@ -1375,6 +1377,8 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scr - if (old_front) - i830_free_memory(scrn, old_front); +@@ -45,6 +46,8 @@ + #include "X11/Xatom.h" + #include "X11/extensions/dpmsconst.h" + #include "xf86DDC.h" ++#include "fb.h" ++#include "uxa.h" -+ scrn->canDoBGNoneRoot = TRUE; -+ - return TRUE; + #include "intel_glamor.h" - fail: -@@ -1414,6 +1418,7 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn, - return FALSE; - } +@@ -1748,3 +1751,114 @@ Bool intel_crtc_on(xf86CrtcPtr crtc) -+ scrn->canDoBGNoneRoot = TRUE; - xf86CrtcSetSizeRange(scrn, 320, 200, drmmode->mode_res->max_width, - drmmode->mode_res->max_height); - for (i = 0; i < drmmode->mode_res->count_crtcs; i++) -@@ -1458,3 +1463,98 @@ void drmmode_closefb(ScrnInfoPtr scrn) - drmModeRmFB(drmmode->fd, drmmode->fb_id); - drmmode->fb_id = 0; + return ret; } + +static PixmapPtr -+drmmode_create_pixmap_for_fbcon(ScrnInfoPtr scrn) ++drmmode_create_pixmap_for_fbcon(ScrnInfoPtr scrn, int fbcon_id) +{ + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); -+ drmmode_crtc_private_ptr drmmode_crtc = xf86_config->crtc[0]->driver_private; -+ ScreenPtr pScreen = screenInfo.screens[scrn->scrnIndex]; -+ drmmode_ptr drmmode = drmmode_crtc->drmmode; ++ ScreenPtr pScreen = xf86ScrnToScreen(scrn); + intel_screen_private *intel = intel_get_screen_private(scrn); ++ struct intel_mode *intel_mode = intel->modes; + drmModeFBPtr fbcon; + struct drm_gem_flink flink; + drm_intel_bo *bo; + PixmapPtr pixmap = NULL; + int i; + -+ for (i = 0; i < drmmode->mode_res->count_crtcs; i++) { -+ drmmode_crtc = xf86_config->crtc[i]->driver_private; -+ if (drmmode_crtc->mode_crtc->buffer_id == 0) -+ continue; -+ fbcon = drmModeGetFB(drmmode->fd, -+ drmmode_crtc->mode_crtc->buffer_id); -+ if (fbcon != NULL) -+ break; -+ } -+ if (i == drmmode->mode_res->count_crtcs) ++ fbcon = drmModeGetFB(intel_mode->fd, fbcon_id); ++ if (fbcon == NULL) + return NULL; + ++ if (fbcon->depth != scrn->depth || ++ fbcon->width != scrn->virtualX || ++ fbcon->height != scrn->virtualY) { ++ ErrorF("incorrect res %d %d %d vs %d %d %d\n", ++ fbcon->depth, fbcon->width, fbcon->height, ++ scrn->depth, scrn->virtualX, scrn->virtualY); ++ goto out_free_fb; ++ } ++ + flink.handle = fbcon->handle; -+ if (ioctl(drmmode->fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) { ++ if (ioctl(intel_mode->fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Couldn't flink fbcon handle\n"); + return NULL; @@ -83,8 +96,9 @@ diff -up xf86-video-intel-2.10.0/src/drmmode_display.c.jx xf86-video-intel-2.10. + return NULL; + } + -+ i830_set_pixmap_bo(pixmap, bo); ++ intel_set_pixmap_bo(pixmap, bo); + drm_intel_bo_unreference(bo); ++out_free_fb: + drmModeFreeFB(fbcon); + + return pixmap; @@ -92,12 +106,23 @@ diff -up xf86-video-intel-2.10.0/src/drmmode_display.c.jx xf86-video-intel-2.10. + +void drmmode_copy_fb(ScrnInfoPtr scrn) +{ -+ ScreenPtr pScreen = screenInfo.screens[scrn->scrnIndex]; ++ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); ++ ScreenPtr pScreen = xf86ScrnToScreen(scrn); + intel_screen_private *intel = intel_get_screen_private(scrn); + PixmapPtr src, dst; + unsigned int pitch = scrn->displayWidth * intel->cpp; ++ struct intel_crtc *intel_crtc; ++ int i; ++ int fbcon_id = 0; ++ for (i = 0; i < xf86_config->num_crtc; i++) { ++ intel_crtc = xf86_config->crtc[i]->driver_private; ++ if (intel_crtc->mode_crtc->buffer_id) ++ fbcon_id = intel_crtc->mode_crtc->buffer_id; ++ } ++ if (!fbcon_id) ++ goto fallback; + -+ src = drmmode_create_pixmap_for_fbcon(scrn); ++ src = drmmode_create_pixmap_for_fbcon(scrn, fbcon_id); + if (src == NULL) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Couldn't create pixmap for fbcon\n"); @@ -110,7 +135,7 @@ diff -up xf86-video-intel-2.10.0/src/drmmode_display.c.jx xf86-video-intel-2.10. + scrn->depth, scrn->bitsPerPixel, + pitch, + NULL); -+ i830_set_pixmap_bo(dst, intel->front_buffer->bo); ++ intel_set_pixmap_bo(dst, intel->front_buffer); + + intel->uxa_driver->prepare_copy(src, dst, -1, -1, GXcopy, FB_ALLONES); + @@ -124,28 +149,73 @@ diff -up xf86-video-intel-2.10.0/src/drmmode_display.c.jx xf86-video-intel-2.10. + + (*pScreen->DestroyPixmap)(src); + (*pScreen->DestroyPixmap)(dst); -+} + -diff -up xf86-video-intel-2.10.0/src/i830_driver.c.jx xf86-video-intel-2.10.0/src/i830_driver.c ---- xf86-video-intel-2.10.0/src/i830_driver.c.jx 2010-01-04 17:09:52.000000000 -0500 -+++ xf86-video-intel-2.10.0/src/i830_driver.c 2010-02-08 11:23:46.000000000 -0500 -@@ -1507,6 +1507,8 @@ static Bool I830EnterVT(int scrnIndex, i - if (IS_I965G(intel)) - gen4_render_state_init(scrn); ++ pScreen->canDoBGNoneRoot = TRUE; ++ return; ++fallback: ++ return; ++} +diff --git a/src/intel_driver.c b/src/intel_driver.c +index 67cec48..85456d8 100644 +--- a/src/intel_driver.c ++++ b/src/intel_driver.c +@@ -83,6 +83,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. + static void i830AdjustFrame(ADJUST_FRAME_ARGS_DECL); + static Bool I830CloseScreen(CLOSE_SCREEN_ARGS_DECL); + static Bool I830EnterVT(VT_FUNC_ARGS_DECL); ++static Bool I830EnterVT_flag(ScrnInfoPtr pScrn, Bool flag); + + /* temporary */ + extern void xf86SetCursor(ScreenPtr screen, CursorPtr pCurs, int x, int y); +@@ -167,6 +168,7 @@ static Bool i830CreateScreenResources(ScreenPtr screen) + if (!(*screen->CreateScreenResources) (screen)) + return FALSE; + drmmode_copy_fb(scrn); + return intel_uxa_create_screen_resources(screen); + } + +@@ -1007,7 +1009,7 @@ I830ScreenInit(SCREEN_INIT_ARGS_DECL) + * later memory should be bound when allocating, e.g rotate_mem */ + scrn->vtSema = TRUE; + +- return I830EnterVT(VT_FUNC_ARGS(0)); ++ return I830EnterVT_flag(scrn, TRUE); + } + + static void i830AdjustFrame(ADJUST_FRAME_ARGS_DECL) +@@ -1048,9 +1050,8 @@ static void I830LeaveVT(VT_FUNC_ARGS_DECL) + /* + * This gets called when gaining control of the VT, and from ScreenInit(). + */ +-static Bool I830EnterVT(VT_FUNC_ARGS_DECL) ++static Bool I830EnterVT_flag(ScrnInfoPtr scrn, Bool flag) + { +- SCRN_INFO_PTR(arg); + intel_screen_private *intel = intel_get_screen_private(scrn); + int ret; + +@@ -1061,12 +1062,20 @@ static Bool I830EnterVT(VT_FUNC_ARGS_DECL) + strerror(errno)); + } + ++ if (!flag) ++ drmmode_copy_fb(scrn); + if (!xf86SetDesiredModes(scrn)) return FALSE; -diff -up xf86-video-intel-2.10.0/src/i830.h.jx xf86-video-intel-2.10.0/src/i830.h ---- xf86-video-intel-2.10.0/src/i830.h.jx 2010-01-04 17:09:52.000000000 -0500 -+++ xf86-video-intel-2.10.0/src/i830.h 2010-02-08 11:23:46.000000000 -0500 -@@ -430,6 +430,7 @@ extern void drmmode_closefb(ScrnInfoPtr - extern int drmmode_get_pipe_from_crtc_id(drm_intel_bufmgr * bufmgr, - xf86CrtcPtr crtc); - extern int drmmode_output_dpms_status(xf86OutputPtr output); -+extern void drmmode_copy_fb(ScrnInfoPtr scrn); - extern int drmmode_crtc_id(xf86CrtcPtr crtc); - void drmmode_crtc_set_cursor_bo(xf86CrtcPtr crtc, dri_bo * cursor); + return TRUE; + } ++static Bool I830EnterVT(VT_FUNC_ARGS_DECL) ++{ ++ SCRN_INFO_PTR(arg); ++ return I830EnterVT_flag(scrn, FALSE); ++} + static Bool I830SwitchMode(SWITCH_MODE_ARGS_DECL) + { + SCRN_INFO_PTR(arg); +-- +1.7.10.2 + diff --git a/sources b/sources index 6b1ea0e..f96f004 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ 3ad323489a5a8b821fd24811242a9eea intel-gpu-tools-20110817.tar.bz2 -191b8547a87396a50b2989a50f8c1f3d xf86-video-intel-20120529.tar.bz2 +adaa68473d6cbfc6bfb45e2cdd8da373 xf86-video-intel-20120612.tar.bz2 diff --git a/xorg-x11-drv-intel.spec b/xorg-x11-drv-intel.spec index 696b247..6117997 100644 --- a/xorg-x11-drv-intel.spec +++ b/xorg-x11-drv-intel.spec @@ -1,12 +1,12 @@ %define moduledir %(pkg-config xorg-server --variable=moduledir ) %define driverdir %{moduledir}/drivers %define gputoolsdate 20110817 -%define gitdate 20120529 +%define gitdate 20120612 Summary: Xorg X11 Intel video driver Name: xorg-x11-drv-intel Version: 2.19.0 -Release: 4.%{gitdate}%{?dist} +Release: 5.%{gitdate}%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X Hardware Support @@ -63,7 +63,7 @@ Debugging tools for Intel graphics chips %prep %setup -q -n xf86-video-intel-%{?gitdate:%{gitdate}}%{!?gitdate:%{dirsuffix}} -b3 -#patch23 -p1 -b .legacy +%patch2 -p1 -b .legacy %patch3 -p1 -b .build-fix %build @@ -121,6 +121,10 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man1/intel_*.1* %changelog +* Tue Jun 12 2012 Dave Airlie 2.19.0-5.20120612 +- today's git snapshot +- resurrect copy-fb + * Tue May 29 2012 Adam Jackson 2.19.0-4.20120529 - Today's git snapshot - Enable SNA (default is still UXA, use Option "AccelMethod" to switch)