configure.ac | 78 debian/changelog | 6 debian/control | 2 debian/xserver-xorg-video-intel.install | 2 src/compat-api.h | 1 src/i915_pciids.h | 32 src/intel_device.c | 62 src/intel_module.c | 6 src/intel_options.c | 1 src/intel_options.h | 1 src/sna/Makefile.am | 2 src/sna/gen2_render.c | 55 src/sna/gen3_render.c | 17 src/sna/gen4_render.c | 21 src/sna/gen5_render.c | 21 src/sna/gen6_render.c | 21 src/sna/gen7_render.c | 35 src/sna/gen8_render.c | 32 src/sna/kgem.c | 329 ++- src/sna/kgem.h | 2 src/sna/sna.h | 147 + src/sna/sna_accel.c | 436 +++-- src/sna/sna_blt.c | 190 ++ src/sna/sna_composite.c | 49 src/sna/sna_cpu.c | 4 src/sna/sna_cpuid.h | 4 src/sna/sna_damage.c | 42 src/sna/sna_display.c | 1880 +++++++++++++++++----- src/sna/sna_display_fake.c | 92 - src/sna/sna_dri.c | 2534 ----------------------------- src/sna/sna_dri2.c | 2705 ++++++++++++++++++++++++++++++++ src/sna/sna_driver.c | 87 - src/sna/sna_glyphs.c | 311 +-- src/sna/sna_render.c | 22 src/sna/sna_render.h | 3 src/sna/sna_threads.c | 14 src/sna/sna_tiling.c | 70 src/sna/sna_trapezoids.c | 3 src/sna/sna_trapezoids_boxes.c | 7 src/sna/sna_video.c | 51 src/sna/sna_video.h | 18 src/sna/sna_video_overlay.c | 22 src/sna/sna_video_sprite.c | 318 ++- src/sna/sna_video_textured.c | 20 src/uxa/intel.h | 4 src/uxa/intel_display.c | 24 src/uxa/intel_dri.c | 3 src/uxa/intel_driver.c | 2 src/uxa/intel_glamor.c | 10 src/uxa/uxa-accel.c | 2 src/uxa/uxa-priv.h | 17 src/uxa/uxa-render.c | 4 test/dri2-test.c | 77 tools/Makefile.am | 4 tools/virtual.c | 167 + 55 files changed, 6052 insertions(+), 4017 deletions(-)
New commits: commit 7b57260997ee615d30b316b859d84be77794184c Author: maximilian attems <m...@debian.org> Date: Thu May 29 17:18:20 2014 +0200 add myself to uploaders Signed-off-by: maximilian attems <m...@debian.org> diff --git a/debian/changelog b/debian/changelog index 5a58f3f..e8ac2d8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ xserver-xorg-video-intel (2:2.99.911+git20140529-1~exp1) UNRELEASED; urgency=low * New upstream prerelease. * Install new backlight helper. + * Add myself to Uploaders. -- maximilian attems <m...@debian.org> Thu, 29 May 2014 17:16:30 +0200 diff --git a/debian/control b/debian/control index 9d7840c..65108e3 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: xserver-xorg-video-intel Section: x11 Priority: optional Maintainer: Debian X Strike Force <debian-x@lists.debian.org> -Uploaders: Drew Parsons <dpars...@debian.org>, Cyril Brulebois <k...@debian.org>, Michael Stapelberg <stapelb...@debian.org> +Uploaders: Drew Parsons <dpars...@debian.org>, Cyril Brulebois <k...@debian.org>, Michael Stapelberg <stapelb...@debian.org>, maximilian attems <m...@debian.org> Build-Depends: debhelper (>= 8), dh-autoreconf, commit e62e35c1cc86418ae87cf97d4f2725f73219691b Author: maximilian attems <m...@debian.org> Date: Thu May 29 16:14:51 2014 +0200 update changelog Signed-off-by: maximilian attems <m...@debian.org> diff --git a/debian/changelog b/debian/changelog index 76e95df..5a58f3f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,9 @@ -xserver-xorg-video-intel (2:2.99.911-1) UNRELEASED; urgency=low +xserver-xorg-video-intel (2:2.99.911+git20140529-1~exp1) UNRELEASED; urgency=low * New upstream prerelease. + * Install new backlight helper. - -- Timo Aaltonen <tjaal...@ubuntu.com> Tue, 01 Oct 2013 14:07:22 +0300 + -- maximilian attems <m...@debian.org> Thu, 29 May 2014 17:16:30 +0200 xserver-xorg-video-intel (2:2.21.15-1) unstable; urgency=low commit 631b4e4c78a807e61214026bf9a1461aadbd59b5 Author: maximilian attems <m...@debian.org> Date: Thu May 29 17:07:16 2014 +0200 install add new helper Signed-off-by: maximilian attems <m...@debian.org> diff --git a/debian/xserver-xorg-video-intel.install b/debian/xserver-xorg-video-intel.install index 48c5ed0..fdefaad 100644 --- a/debian/xserver-xorg-video-intel.install +++ b/debian/xserver-xorg-video-intel.install @@ -1,4 +1,6 @@ usr/lib/xorg/modules/drivers/*.so usr/lib/libI810XvMC.so* usr/lib/libIntelXvMC.so* +usr/lib/xserver-xorg-video-intel/xf86-video-intel-backlight-helper +usr/share/polkit-1/actions/org.x.xf86-video-intel.backlight-helper.policy usr/share/man commit 792584fa740dbc81b72fd4f4bdf27d65b9c046cf Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Wed May 28 14:00:26 2014 +0100 sna/dri2: Reorder declarations to compile on old Xorg Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c index cff9737..72f34d6 100644 --- a/src/sna/sna_dri2.c +++ b/src/sna/sna_dri2.c @@ -51,6 +51,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. #include <compositeext.h> #endif +#if DRI2INFOREC_VERSION < 2 +#error DRI2 version supported by the Xserver is too old +#endif + static inline struct kgem_bo *ref(struct kgem_bo *bo) { assert(bo->refcnt); @@ -78,6 +82,7 @@ get_private(void *buffer) return (struct sna_dri2_private *)((DRI2Buffer2Ptr)buffer+1); } +#if DRI2INFOREC_VERSION >= 4 enum frame_event_type { WAITMSC = 0, SWAP, @@ -206,9 +211,6 @@ sna_dri2_window_get_chain(WindowPtr win) assert(priv != NULL); return priv->chain; } - -#if DRI2INFOREC_VERSION < 2 -#error DRI2 version supported by the Xserver is too old #endif #if DRI2INFOREC_VERSION < 6 commit 562c47fc21b9029ebff29b53d2be590df4329264 Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Wed May 28 12:51:18 2014 +0100 Silence CLang (almost) Fix up all the warnings about implicit enum conversions. The container_of() macro remains defunct. Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c index 2e1682c..ce137bd 100644 --- a/src/sna/gen7_render.c +++ b/src/sna/gen7_render.c @@ -126,7 +126,6 @@ static const struct gt_info ivb_gt2_info = { static const struct gt_info byt_gt_info = { .name = "Baytrail (gen7)", - .urb = { 128, 64, 64 }, .max_vs_threads = 36, .max_gs_threads = 36, .max_wm_threads = (48-1) << IVB_PS_MAX_THREADS_SHIFT, diff --git a/src/sna/kgem.c b/src/sna/kgem.c index 24ba6f2..5fa33ce 100644 --- a/src/sna/kgem.c +++ b/src/sna/kgem.c @@ -810,11 +810,12 @@ cpu_cache_size__cpuid4(void) unsigned int eax, ebx, ecx, edx; unsigned int llc_size = 0; - int cnt = 0; + int cnt; if (__get_cpuid_max(BASIC_CPUID, NULL) < 4) return 0; + cnt = 0; do { unsigned associativity, line_partitions, line_size, sets; diff --git a/src/sna/sna_cpu.c b/src/sna/sna_cpu.c index 23e6bcc..a3434b1 100644 --- a/src/sna/sna_cpu.c +++ b/src/sna/sna_cpu.c @@ -40,12 +40,13 @@ unsigned sna_cpu_detect(void) { unsigned max = __get_cpuid_max(BASIC_CPUID, NULL); - unsigned int eax, ebx, ecx, edx; + unsigned eax, ebx, ecx, edx; unsigned features = 0; unsigned extra = 0; if (max >= 1) { __cpuid(1, eax, ebx, ecx, edx); + if (ecx & bit_SSE3) features |= SSE3; @@ -80,6 +81,7 @@ unsigned sna_cpu_detect(void) if (max >= 7) { __cpuid_count(7, 0, eax, ebx, ecx, edx); + if ((extra & has_YMM) && (ebx & bit_AVX2)) features |= AVX2; } diff --git a/src/sna/sna_cpuid.h b/src/sna/sna_cpuid.h index 5a82c89..ed28a0a 100644 --- a/src/sna/sna_cpuid.h +++ b/src/sna/sna_cpuid.h @@ -36,8 +36,8 @@ #include <cpuid.h> #else #define __get_cpuid_max(x, y) 0 -#define __cpuid(level, a, b, c, d) -#define __cpuid_count(level, count, a, b, c, d) +#define __cpuid(level, a, b, c, d) a = b = c = d = 0 +#define __cpuid_count(level, count, a, b, c, d) a = b = c = d = 0 #endif #define BASIC_CPUID 0x0 diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c index ff1cf5e..cff9737 100644 --- a/src/sna/sna_dri2.c +++ b/src/sna/sna_dri2.c @@ -1984,7 +1984,7 @@ get_current_msc(struct sna *sna, DrawablePtr draw, xf86CrtcPtr crtc) uint64_t ret = -1; VG_CLEAR(vbl); - vbl.request.type = DRM_VBLANK_RELATIVE; + vbl.request.type = _DRM_VBLANK_RELATIVE; vbl.request.sequence = 0; if (sna_wait_vblank(sna, &vbl, sna_crtc_to_pipe(crtc)) == 0) ret = sna_crtc_record_vblank(crtc, &vbl); @@ -2410,7 +2410,7 @@ fail: } VG_CLEAR(vbl); - vbl.request.type = DRM_VBLANK_RELATIVE; + vbl.request.type = _DRM_VBLANK_RELATIVE; vbl.request.sequence = 0; if (sna_wait_vblank(sna, &vbl, sna_crtc_to_pipe(crtc)) == 0) { *ust = ust64(vbl.reply.tval_sec, vbl.reply.tval_usec); @@ -2460,7 +2460,7 @@ sna_dri2_schedule_wait_msc(ClientPtr client, DrawablePtr draw, CARD64 target_msc VG_CLEAR(vbl); /* Get current count */ - vbl.request.type = DRM_VBLANK_RELATIVE; + vbl.request.type = _DRM_VBLANK_RELATIVE; vbl.request.sequence = 0; if (sna_wait_vblank(sna, &vbl, pipe)) goto out_complete; diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c index fd73b09..cbec168 100644 --- a/src/sna/sna_render.c +++ b/src/sna/sna_render.c @@ -1668,7 +1668,8 @@ do_fixup: dst = pixman_image_create_bits(channel->pict_format, w, h, ptr, channel->bo->pitch); else - dst = pixman_image_create_bits(picture->format, w, h, NULL, 0); + dst = pixman_image_create_bits((pixman_format_code_t)picture->format, + w, h, NULL, 0); if (!dst) { kgem_bo_destroy(&sna->kgem, channel->bo); return 0; @@ -1855,7 +1856,7 @@ sna_render_picture_convert(struct sna *sna, if (!sna_pixmap_move_to_cpu(pixmap, MOVE_READ)) return 0; - src = pixman_image_create_bits(picture->format, + src = pixman_image_create_bits((pixman_format_code_t)picture->format, pixmap->drawable.width, pixmap->drawable.height, pixmap->devPrivate.ptr, diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c index 4ad61bf..40663bb 100644 --- a/src/sna/sna_trapezoids.c +++ b/src/sna/sna_trapezoids.c @@ -791,7 +791,8 @@ trap_upload(PicturePtr picture, return true; memset(scratch->devPrivate.ptr, 0, scratch->devKind*height); - image = pixman_image_create_bits(picture->format, width, height, + image = pixman_image_create_bits((pixman_format_code_t)picture->format, + width, height, scratch->devPrivate.ptr, scratch->devKind); if (image) { diff --git a/src/uxa/uxa-accel.c b/src/uxa/uxa-accel.c index cb465b8..757b276 100644 --- a/src/uxa/uxa-accel.c +++ b/src/uxa/uxa-accel.c @@ -942,8 +942,8 @@ uxa_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, uxa_screen_t *uxa_screen = uxa_get_screen(screen); if (uxa_screen->info->flags & UXA_USE_GLAMOR) { + RegionPtr region = NULL; int ok = 0; - RegionPtr region; if (uxa_prepare_access(pDst, UXA_GLAMOR_ACCESS_RW)) { if (uxa_prepare_access(pSrc, UXA_GLAMOR_ACCESS_RO)) { diff --git a/src/uxa/uxa-render.c b/src/uxa/uxa-render.c index 992a008..a138f16 100644 --- a/src/uxa/uxa-render.c +++ b/src/uxa/uxa-render.c @@ -926,7 +926,7 @@ uxa_acquire_source(ScreenPtr screen, INT16 * out_x, INT16 * out_y) { return uxa_acquire_picture (screen, pict, - PICT_a8r8g8b8, + PIXMAN_a8r8g8b8, x, y, width, height, out_x, out_y); @@ -940,7 +940,7 @@ uxa_acquire_mask(ScreenPtr screen, INT16 * out_x, INT16 * out_y) { return uxa_acquire_picture (screen, pict, - PICT_a8, + PIXMAN_a8, x, y, width, height, out_x, out_y); commit 6282fc9d0d3b2899be52ca4a43a3d9313e9049a6 Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Wed May 28 10:42:58 2014 +0100 sna/dri2: Fix the continuation mode for old style triple buffering Otherwise we end up sending too many SwapCompletes back to the client and confusing ourselves. Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c index 8aef88d..ff1cf5e 100644 --- a/src/sna/sna_dri2.c +++ b/src/sna/sna_dri2.c @@ -238,11 +238,14 @@ sna_dri2_reuse_buffer(DrawablePtr draw, DRI2BufferPtr buffer) struct sna_dri2_frame_event *info; info = sna_dri2_window_get_chain((WindowPtr)draw); + DBG(("%s: draw->id=%lu, active? %d, current back? %d\n", + __FUNCTION__, (long)draw->id, info!=NULL, info && info->back == buffer)); if (info && info->back == buffer) { DBG(("%s: replacing back buffer\n", __FUNCTION__)); sna_dri2_get_back(to_sna_from_drawable(draw), info); } + assert(kgem_bo_flink(&to_sna_from_drawable(draw)->kgem, get_private(buffer)->bo) == buffer->name); assert(get_private(buffer)->bo != to_sna_from_drawable(draw)->dri2.scanout[0].bo); assert(get_private(buffer)->bo != to_sna_from_drawable(draw)->dri2.scanout[1].bo); } @@ -1774,7 +1777,7 @@ sna_dri2_flip_continue(struct sna *sna, struct sna_dri2_frame_event *info) DBG(("%s(mode=%d)\n", __FUNCTION__, info->mode)); if (info->mode > 0){ - struct kgem_bo *bo =get_private(info->front)->bo; + struct kgem_bo *bo = get_private(info->front)->bo; info->type = info->mode; @@ -1862,7 +1865,7 @@ static void chain_flip(struct sna *sna) static void sna_dri2_flip_event(struct sna *sna, struct sna_dri2_frame_event *flip) { - DBG(("%s(pipe=%d)\n", __FUNCTION__, flip->pipe)); + DBG(("%s(pipe=%d, event=%d)\n", __FUNCTION__, flip->pipe, flip->type)); assert(!sna->mode.shadow_flip); @@ -2094,7 +2097,11 @@ sna_dri2_schedule_flip(ClientPtr client, DrawablePtr draw, xf86CrtcPtr crtc, } else { DBG(("%s: chaining flip\n", __FUNCTION__)); type = FLIP_THROTTLE; +#if XORG_CAN_TRIPLE_BUFFER info->mode = -type; +#else + info->mode = -FLIP_COMPLETE; +#endif goto out; } } commit 916354164bcb149e1323a3219d85e7bba6e61e04 Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Tue May 27 20:16:55 2014 +0100 sna: Fix the depth/format on the temporary shadow Pictures When scaling the output, we re-render onto the scanout using a call to Composite, for which we create temporary Pictures. In most cases, the mismatching depth/format goes unnoticed, but along one particular fallback path, we use those to create a new Picture but the mismatching format results in a segfault. Reported-by: Matti Hämäläinen <c...@tnsp.org> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=79320 Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index 2891b74..3980650 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -5165,38 +5165,34 @@ sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo PictFormatPtr format; PicturePtr src, dst; PixmapPtr pixmap; - int error; + int depth, error; void *ptr; DBG(("%s: compositing transformed damage boxes\n", __FUNCTION__)); + error = sna_render_format_for_depth(sna->front->drawable.depth); + depth = PIXMAN_FORMAT_DEPTH(error); + format = PictureMatchFormat(screen, depth, error); + if (format == NULL) { + DBG(("%s: can't find format for depth=%d [%08x]\n", + __FUNCTION__, depth, error)); + return; + } + ptr = kgem_bo_map__gtt(&sna->kgem, bo); if (ptr == NULL) return; - pixmap = sna_pixmap_create_unattached(screen, - 0, 0, sna->front->drawable.depth); + pixmap = sna_pixmap_create_unattached(screen, 0, 0, depth); if (pixmap == NullPixmap) return; if (!screen->ModifyPixmapHeader(pixmap, - crtc->mode.HDisplay, - crtc->mode.VDisplay, - sna->front->drawable.depth, - sna->front->drawable.bitsPerPixel, + crtc->mode.HDisplay, crtc->mode.VDisplay, + depth, sna->front->drawable.bitsPerPixel, bo->pitch, ptr)) goto free_pixmap; - error = sna_render_format_for_depth(sna->front->drawable.depth); - format = PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(error), error); - if (format == NULL) { - DBG(("%s: can't find format for depth=%d [%08x]\n", - __FUNCTION__, sna->front->drawable.depth, - (int)sna_render_format_for_depth(sna->front->drawable.depth))); - goto free_pixmap; - } - src = CreatePicture(None, &sna->front->drawable, format, 0, NULL, serverClient, &error); if (!src) @@ -5257,36 +5253,32 @@ sna_crtc_redisplay__composite(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo PicturePtr src, dst; PixmapPtr pixmap; BoxPtr b; - int n, error; + int n, depth, error; DBG(("%s: compositing transformed damage boxes\n", __FUNCTION__)); - pixmap = sna_pixmap_create_unattached(screen, - 0, 0, sna->front->drawable.depth); + error = sna_render_format_for_depth(sna->front->drawable.depth); + depth = PIXMAN_FORMAT_DEPTH(error); + format = PictureMatchFormat(screen, depth, error); + if (format == NULL) { + DBG(("%s: can't find format for depth=%d [%08x]\n", + __FUNCTION__, depth, error)); + return; + } + + pixmap = sna_pixmap_create_unattached(screen, 0, 0, depth); if (pixmap == NullPixmap) return; if (!screen->ModifyPixmapHeader(pixmap, - crtc->mode.HDisplay, - crtc->mode.VDisplay, - sna->front->drawable.depth, - sna->front->drawable.bitsPerPixel, + crtc->mode.HDisplay, crtc->mode.VDisplay, + depth, sna->front->drawable.bitsPerPixel, bo->pitch, NULL)) goto free_pixmap; if (!sna_pixmap_attach_to_bo(pixmap, bo)) goto free_pixmap; - error = sna_render_format_for_depth(sna->front->drawable.depth); - format = PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(error), error); - if (format == NULL) { - DBG(("%s: can't find format for depth=%d [%08x]\n", - __FUNCTION__, sna->front->drawable.depth, - (int)sna_render_format_for_depth(sna->front->drawable.depth))); - goto free_pixmap; - } - src = CreatePicture(None, &sna->front->drawable, format, 0, NULL, serverClient, &error); if (!src) commit d8360bd74f5b62a27c019c65ed9001cac8bf43ed Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Tue May 27 20:14:02 2014 +0100 sna: Handle bad picture format/depth mismatches Scaling the output feed in an invalid picture->format/depth combination which causes the fallback downsampling function to explode. Whilst this is a bug in the higher layer, we can handle the error anyway. References: https://bugs.freedesktop.org/show_bug.cgi?id=79320 Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c index d3cb6a0..fd73b09 100644 --- a/src/sna/sna_render.c +++ b/src/sna/sna_render.c @@ -789,6 +789,11 @@ fixup: format = PictureMatchFormat(screen, pixmap->drawable.depth, picture->format); + if (format == NULL) { + DBG(("%s: invalid depth=%d, format=%08x\n", + __FUNCTION__, pixmap->drawable.depth, picture->format)); + goto fixup; + } tmp_dst = CreatePicture(0, &tmp->drawable, format, 0, NULL, serverClient, &error); commit 93b319cf9a355e8400b864046cdb4cfb56b657a0 Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Fri May 23 13:16:50 2014 +0100 uxa: Silence the compiler over a couple of unused variables intel_driver.c: In function 'I830LeaveVT': intel_driver.c:1085:24: warning: unused variable 'intel' [-Wunused-variable] intel_screen_private *intel = intel_get_screen_private(scrn); ^ intel_driver.c: In function 'I830EnterVT': intel_driver.c:1102:24: warning: unused variable 'intel' [-Wunused-variable] intel_screen_private *intel = intel_get_screen_private(scrn); Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/src/uxa/intel_driver.c b/src/uxa/intel_driver.c index 0a4fe2a..654038c 100644 --- a/src/uxa/intel_driver.c +++ b/src/uxa/intel_driver.c @@ -1048,7 +1048,6 @@ static void I830FreeScreen(FREE_SCREEN_ARGS_DECL) static void I830LeaveVT(VT_FUNC_ARGS_DECL) { SCRN_INFO_PTR(arg); - intel_screen_private *intel = intel_get_screen_private(scrn); xf86RotateFreeShadow(scrn); @@ -1065,7 +1064,6 @@ static void I830LeaveVT(VT_FUNC_ARGS_DECL) static Bool I830EnterVT(VT_FUNC_ARGS_DECL) { SCRN_INFO_PTR(arg); - intel_screen_private *intel = intel_get_screen_private(scrn); if (intel_get_master(scrn)) { xf86DrvMsg(scrn->scrnIndex, X_WARNING, commit e6ee0679374f8fc80cb34693f80affe6ea676ddb Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Fri May 23 14:29:42 2014 +0100 uxa: Silence compiler for warnings in Cursor API changes Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/src/uxa/intel_display.c b/src/uxa/intel_display.c index 857aa24..46a009e 100644 --- a/src/uxa/intel_display.c +++ b/src/uxa/intel_display.c @@ -446,7 +446,7 @@ __intel_crtc_load_cursor_argb(xf86CrtcPtr crtc, CARD32 *image) return ret; } -#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,0) +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,2) static Bool intel_crtc_load_cursor_argb(xf86CrtcPtr crtc, CARD32 *image) { @@ -656,7 +656,11 @@ static const xf86CrtcFuncsRec intel_crtc_funcs = { .set_cursor_position = intel_crtc_set_cursor_position, .show_cursor = intel_crtc_show_cursor, .hide_cursor = intel_crtc_hide_cursor, +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,2) + .load_cursor_argb_check = intel_crtc_load_cursor_argb, +#else .load_cursor_argb = intel_crtc_load_cursor_argb, +#endif .shadow_create = intel_crtc_shadow_create, .shadow_allocate = intel_crtc_shadow_allocate, .shadow_destroy = intel_crtc_shadow_destroy, commit 4321e8decd7be9daaa49c6ab4e8bb9bd66faae31 Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Fri May 23 14:29:42 2014 +0100 sna: Silence compiler for warnings in Cursor API changes The API changed again in the RC, so update to keep the compiler quiet. At the same time, protect against the ARGB_CURSOR struct changes. Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index 8e876fe..2891b74 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -3447,6 +3447,15 @@ static struct sna_cursor *__sna_create_cursor(struct sna *sna, int size) return c; } +static uint32_t *get_cursor_argb(CursorPtr c) +{ +#ifdef ARGB_CURSOR + return (uint32_t *)c->bits->argb; +#else + return NULL; +#endif +} + static struct sna_cursor *__sna_get_cursor(struct sna *sna, xf86CrtcPtr crtc) { struct sna_cursor *cursor; @@ -3475,7 +3484,7 @@ static struct sna_cursor *__sna_get_cursor(struct sna *sna, xf86CrtcPtr crtc) sna->cursor.ref->bits->width, sna->cursor.ref->bits->height, sna->cursor.serial, - sna->cursor.ref->bits->argb!=NULL)); + get_cursor_argb(c) != NULL)); rotation = crtc->transform_in_use ? crtc->rotation : RR_Rotate_0; @@ -3506,7 +3515,7 @@ static struct sna_cursor *__sna_get_cursor(struct sna *sna, xf86CrtcPtr crtc) height = sna->cursor.ref->bits->height; source = sna->cursor.ref->bits->source; mask = sna->cursor.ref->bits->mask; - argb = (uint32_t *)sna->cursor.ref->bits->argb; + argb = get_cursor_argb(sna->cursor.ref); pitch = BitmapBytePad(width); image = cursor->image; @@ -3686,7 +3695,7 @@ sna_set_cursor_colors(ScrnInfoPtr scrn, int _bg, int _fg) if (sna->cursor.ref == NULL) return; - if (sna->cursor.ref->bits->argb) + if (get_cursor_argb(sna->cursor.ref)) return; sna->cursor.serial++; @@ -3852,19 +3861,20 @@ disable: sigio_unblock(sigio); } -#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,0) +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,2) static Bool -sna_load_cursor_argb(ScrnInfoPtr scrn, CursorPtr cursor) +sna_load_cursor_argb2(ScrnInfoPtr scrn, CursorPtr cursor) { return TRUE; } static Bool -sna_load_cursor_image(ScrnInfoPtr scrn, unsigned char *src) +sna_load_cursor_image2(ScrnInfoPtr scrn, unsigned char *src) { return TRUE; } -#else +#endif + static void sna_load_cursor_argb(ScrnInfoPtr scrn, CursorPtr cursor) { @@ -3874,7 +3884,6 @@ static void sna_load_cursor_image(ScrnInfoPtr scrn, unsigned char *src) { } -#endif static int __cursor_size(CursorPtr cursor) { @@ -3935,7 +3944,7 @@ sna_use_hw_cursor(ScreenPtr screen, CursorPtr cursor) __DBG(("%s(%dx%d): ARGB?=%d, serial->%d, size->%d\n", __FUNCTION__, cursor->bits->width, cursor->bits->height, - cursor->bits->argb!=NULL, + get_cursor_argb(cursor) != NULL, sna->cursor.serial, sna->cursor.size)); @@ -4031,6 +4040,12 @@ sna_cursors_init(ScreenPtr screen, struct sna *sna) cursor_info->UseHWCursorARGB = sna_use_hw_cursor; cursor_info->LoadCursorARGB = sna_load_cursor_argb; #endif +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,2) + cursor_info->LoadCursorImageCheck = sna_load_cursor_image2; +#ifdef ARGB_CURSOR + cursor_info->LoadCursorARGBCheck = sna_load_cursor_argb2; +#endif +#endif if (!xf86InitCursor(screen, cursor_info)) { xf86DestroyCursorInfoRec(cursor_info); commit 2a0dc7ed4961d5bda08bb583a7a6a2cc633b27e4 Author: Chris Wilson <ch...@chris-wilson.co.uk> Date: Mon May 26 08:23:45 2014 +0100 sna/dri2: Move scanout processing from frame event to global The scanout is a global property, track it as so. The primary benefit to this is it strengthens our assertions that we never hand out an active scanout for use as a back buffer. Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> diff --git a/src/sna/sna.h b/src/sna/sna.h index f88690c..7a1b693 100644 --- a/src/sna/sna.h +++ b/src/sna/sna.h @@ -315,6 +315,10 @@ struct sna { #if HAVE_DRI2 void *flip_pending; + struct { + struct kgem_bo *bo; + uint32_t name; + } scanout[2]; #endif } dri2; @@ -496,6 +500,7 @@ void sna_dri2_page_flip_handler(struct sna *sna, struct drm_event_vblank *event) void sna_dri2_vblank_handler(struct sna *sna, struct drm_event_vblank *event); void sna_dri2_pixmap_update_bo(struct sna *sna, PixmapPtr pixmap); void sna_dri2_destroy_window(WindowPtr win); +void sna_dri2_reset_scanout(struct sna *sna); void sna_dri2_close(struct sna *sna, ScreenPtr pScreen); #else static inline bool sna_dri2_open(struct sna *sna, ScreenPtr pScreen) { return false; } @@ -503,6 +508,7 @@ static inline void sna_dri2_page_flip_handler(struct sna *sna, struct drm_event_ static inline void sna_dri2_vblank_handler(struct sna *sna, struct drm_event_vblank *event) { } static inline void sna_dri2_pixmap_update_bo(struct sna *sna, PixmapPtr pixmap) { } static inline void sna_dri2_destroy_window(WindowPtr win) { } +static inline void sna_dri2_reset_scanout(struct sna *sna) { } static inline void sna_dri2_close(struct sna *sna, ScreenPtr pScreen) { } #endif diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index a81ce21..8e876fe 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -4505,6 +4505,8 @@ sna_crtc_config_notify(ScreenPtr screen) DBG(("%s\n", __FUNCTION__)); + sna_dri2_reset_scanout(sna); + sna_mode_update(sna); sna_cursors_reload(sna); } diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c index 829e5ba..8aef88d 100644 --- a/src/sna/sna_dri2.c +++ b/src/sna/sna_dri2.c @@ -112,11 +112,6 @@ struct sna_dri2_frame_event { struct sna_dri2_frame_event *chain; - struct { - struct kgem_bo *bo; - uint32_t name; - } scanout[2]; - struct list cache; int mode; @@ -130,15 +125,15 @@ sna_dri2_get_back(struct sna *sna, struct sna_dri2_frame_event *info) DBG(("%s: scanout=(%d, %d), back=%d, cache?=%d\n", __FUNCTION__, - info->scanout[0].bo ? info->scanout[0].bo->handle : 0, - info->scanout[1].bo ? info->scanout[1].bo->handle : 0, + sna->dri2.scanout[0].bo ? sna->dri2.scanout[0].bo->handle : 0, + sna->dri2.scanout[1].bo ? sna->dri2.scanout[1].bo->handle : 0, get_private(info->back)->bo->handle, !list_is_empty(&info->cache))); bo = get_private(info->back)->bo; assert(bo->refcnt); assert(bo->flush); - if (!(bo == info->scanout[0].bo || bo == info->scanout[1].bo)) { + if (!(bo == sna->dri2.scanout[0].bo || bo == sna->dri2.scanout[1].bo)) { DBG(("%s: reuse unattached back\n", __FUNCTION__)); return; } @@ -173,15 +168,15 @@ sna_dri2_get_back(struct sna *sna, struct sna_dri2_frame_event *info) } } - assert(!(bo == info->scanout[0].bo || bo == info->scanout[1].bo)); + assert(!(bo == sna->dri2.scanout[0].bo || bo == sna->dri2.scanout[1].bo)); assert(name); unref(get_private(info->back)->bo); get_private(info->back)->bo = bo; info->back->name = name; - assert(get_private(info->back)->bo != info->scanout[0].bo); - assert(get_private(info->back)->bo != info->scanout[1].bo); + assert(get_private(info->back)->bo != sna->dri2.scanout[0].bo); + assert(get_private(info->back)->bo != sna->dri2.scanout[1].bo); assert(bo->refcnt == 1); assert(bo->flush); @@ -247,6 +242,9 @@ sna_dri2_reuse_buffer(DrawablePtr draw, DRI2BufferPtr buffer) DBG(("%s: replacing back buffer\n", __FUNCTION__)); sna_dri2_get_back(to_sna_from_drawable(draw), info); } + + assert(get_private(buffer)->bo != to_sna_from_drawable(draw)->dri2.scanout[0].bo); + assert(get_private(buffer)->bo != to_sna_from_drawable(draw)->dri2.scanout[1].bo); } } @@ -1192,13 +1190,6 @@ sna_dri2_frame_event_info_free(struct sna *sna, _sna_dri2_destroy_buffer(sna, info->front); _sna_dri2_destroy_buffer(sna, info->back); - assert(info->scanout[1].bo == NULL); - - if (info->scanout[0].bo) { - assert(info->scanout[0].bo->scanout); - kgem_bo_destroy(&sna->kgem, info->scanout[0].bo); - } - while (!list_is_empty(&info->cache)) { struct dri_bo *c; @@ -1254,6 +1245,25 @@ void sna_dri2_destroy_window(WindowPtr win) free(priv); } +static void +update_scanout(struct sna *sna, struct sna_dri2_frame_event *info, struct kgem_bo *bo, int name) +{ + assert(sna->dri2.scanout[1].bo == NULL); + assert(sna->dri2.scanout[0].bo->scanout); + assert(sna->dri2.scanout[0].bo->refcnt); + sna->dri2.scanout[1] = sna->dri2.scanout[0]; + sna->dri2.scanout[0].bo = ref(bo); + sna->dri2.scanout[0].name = name; + assert(sna->dri2.scanout[0].bo->scanout); + + DBG(("%s: pending scanout handle=%d, active scanout handle=%d\n", + __FUNCTION__, sna->dri2.scanout[0].bo->handle, sna->dri2.scanout[1].bo->handle)); + assert(sna->dri2.scanout[0].bo->handle != sna->dri2.scanout[1].bo->handle); + + assert(sna->dri2.flip_pending == NULL || sna->dri2.flip_pending == info); + sna->dri2.flip_pending = info; +} + static bool sna_dri2_page_flip(struct sna *sna, struct sna_dri2_frame_event *info) { @@ -1264,29 +1274,22 @@ sna_dri2_page_flip(struct sna *sna, struct sna_dri2_frame_event *info) assert(sna_pixmap_get_buffer(sna->front) == info->front); assert(get_drawable_pixmap(info->draw)->drawable.height * bo->pitch <= kgem_bo_size(bo)); - assert(info->scanout[0].bo); - assert(info->scanout[0].bo->scanout); - assert(info->scanout[1].bo == NULL); + assert(sna->dri2.scanout[0].bo); + assert(sna->dri2.scanout[0].bo->scanout); + assert(sna->dri2.scanout[1].bo == NULL); assert(bo->refcnt); info->count = sna_page_flip(sna, bo, info, info->pipe); if (!info->count) return false; - DBG(("%s: mark handle=%d as scanout, swap front (handle=%d, name=%d) and back (handle=%d, name=%d)\n", + update_scanout(sna, info, bo, info->back->name); + + DBG(("%s: marked handle=%d as scanout, swap front (handle=%d, name=%d) and back (handle=%d, name=%d)\n", __FUNCTION__, bo->handle, get_private(info->front)->bo->handle, info->front->name, get_private(info->back)->bo->handle, info->back->name)); - info->scanout[1] = info->scanout[0]; - info->scanout[0].bo = ref(bo); - info->scanout[0].name = info->back->name; - assert(info->scanout[0].bo->scanout); - - DBG(("%s: pending scanout handle=%d, active scanout handle=%d\n", - __FUNCTION__, info->scanout[0].bo->handle, info->scanout[1].bo->handle)); - assert(info->scanout[0].bo->handle != info->scanout[1].bo->handle); - tmp.bo = get_private(info->front)->bo; tmp.name = info->front->name; @@ -1298,8 +1301,6 @@ sna_dri2_page_flip(struct sna *sna, struct sna_dri2_frame_event *info) info->back->name = tmp.name; get_private(info->back)->bo = tmp.bo; - sna->dri2.flip_pending = info; - info->queued = true; return true; } @@ -1773,23 +1774,18 @@ sna_dri2_flip_continue(struct sna *sna, struct sna_dri2_frame_event *info) DBG(("%s(mode=%d)\n", __FUNCTION__, info->mode)); if (info->mode > 0){ + struct kgem_bo *bo =get_private(info->front)->bo; + info->type = info->mode; - if (get_private(info->front)->bo != sna_pixmap(sna->front)->gpu_bo) + if (bo != sna_pixmap(sna->front)->gpu_bo) return false; - info->count = sna_page_flip(sna, - get_private(info->front)->bo, - info, info->pipe); + info->count = sna_page_flip(sna, bo, info, info->pipe); if (!info->count) return false; - assert(info->scanout[0].bo->scanout); - info->scanout[1] = info->scanout[0]; - info->scanout[0].bo = ref(get_private(info->front)->bo); - info->scanout[0].name = info->front->name; - assert(info->scanout[0].bo->scanout); - sna->dri2.flip_pending = info; + update_scanout(sna, info, bo, info->front->name); } else { info->type = -info->mode; -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/e1wq2ap-0000sb...@moszumanska.debian.org