Hello community, here is the log from the commit of package xf86-video-intel for openSUSE:Factory checked in at 2012-10-26 17:36:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xf86-video-intel (Old) and /work/SRC/openSUSE:Factory/.xf86-video-intel.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "xf86-video-intel", Maintainer is "" Changes: -------- --- /work/SRC/openSUSE:Factory/xf86-video-intel/xf86-video-intel.changes 2012-10-16 07:23:47.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.xf86-video-intel.new/xf86-video-intel.changes 2012-10-26 17:36:44.000000000 +0200 @@ -1,0 +2,23 @@ +Sat Oct 20 21:10:05 UTC 2012 - tobias.johannes.klausmann@mni.thm.de + +- Update to 2.20.12 + More bug reports, more bug fixes! Perhaps the headline feature is + that with secure batches, coming to a 3.8 kernel near you, we may + finally have the ability to perform updates to the scanout synchronized + to the refresh rate on later SandyBridge and IvyBridge chipsets. It comes + at quite a power cost as we need to keep the GPU out of its power saving + modes, but it should allow legacy vsync to function at last. But this + should allow us to address a longstanding issue with tearing on + SandyBridge+. +- Bugs fixed since 2.20.10: + + Fix component-alpha rendering on IvyBridge, for example subpixel + antialiased glyphs. + https://bugs.freedesktop.org/show_bug.cgi?id=56037 + + Flush before some "pipelined" state changes on gen4. The evidence is + that the same flushes as required on gen5+ are also required for gen4. + https://bugs.freedesktop.org/show_bug.cgi?id=55627 + + Prevent a potential crash when forcing a stall on a busy CPU bo + https://bugs.freedesktop.org/show_bug.cgi?id=56180 +- [Release 2.20.11 contained a typo causing UXA to fail immediately.] + +------------------------------------------------------------------- Old: ---- xf86-video-intel-2.20.10.tar.bz2 New: ---- xf86-video-intel-2.20.12.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xf86-video-intel.spec ++++++ --- /var/tmp/diff_new_pack.c1JSNS/_old 2012-10-26 17:36:45.000000000 +0200 +++ /var/tmp/diff_new_pack.c1JSNS/_new 2012-10-26 17:36:45.000000000 +0200 @@ -19,7 +19,7 @@ %define glamor 1 Name: xf86-video-intel -Version: 2.20.10 +Version: 2.20.12 Release: 0 Summary: Intel video driver for the Xorg X server License: MIT ++++++ xf86-video-intel-2.20.10.tar.bz2 -> xf86-video-intel-2.20.12.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/NEWS new/xf86-video-intel-2.20.12/NEWS --- old/xf86-video-intel-2.20.10/NEWS 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/NEWS 2012-10-20 17:23:26.000000000 +0200 @@ -1,3 +1,27 @@ +Release 2.20.12 (2012-10-20) +============================ +More bug reports, more bug fixes! Perhaps the headline feature is +that with a secure batches, coming to a 3.8 kernel near you, we may +finally have the ability to perform updates to the scanout synchronized +to the refresh rate on later SandyBridge and IvyBridge chipsets. It comes +at quite a power cost as we need to keep the GPU out of its power saving +modes, but it should allow legacy vsync to function at last. But this +should allow us to address a longstanding issue with tearing on +SandyBridge+. + + * Fix component-alpha rendering on IvyBridge, for example subpixel + antialiased glyphs. + https://bugs.freedesktop.org/show_bug.cgi?id=56037 + + * Flush before some "pipelined" state changes on gen4. The evidence is + that the same flushes as required on gen5+ are also required for gen4. + https://bugs.freedesktop.org/show_bug.cgi?id=55627 + + * Prevent a potential crash when forcing a stall on a busy CPU bo + https://bugs.freedesktop.org/show_bug.cgi?id=56180 + +[Release 2.20.11 contained a typo causing UXA to fail immediately.] + Release 2.20.10 (2012-10-14) ============================ The last couple of weeks have been fairly retrospective, a dive into diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/configure.ac new/xf86-video-intel-2.20.12/configure.ac --- old/xf86-video-intel-2.20.10/configure.ac 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/configure.ac 2012-10-20 17:23:26.000000000 +0200 @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-video-intel], - [2.20.10], + [2.20.12], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [xf86-video-intel]) AC_CONFIG_SRCDIR([Makefile.am]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/intel_display.c new/xf86-video-intel-2.20.12/src/intel_display.c --- old/xf86-video-intel-2.20.10/src/intel_display.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/intel_display.c 2012-10-20 17:23:26.000000000 +0200 @@ -493,6 +493,8 @@ ErrorF("failed to add fb\n"); return FALSE; } + + drm_intel_bo_disable_reuse(intel->front_buffer); } saved_mode = crtc->mode; @@ -597,6 +599,8 @@ return NULL; } + drm_intel_bo_disable_reuse(intel_crtc->rotate_bo); + intel_crtc->rotate_pitch = rotate_pitch; return intel_crtc->rotate_bo; } @@ -723,6 +727,8 @@ ErrorF("have front buffer\n"); } + drm_intel_bo_disable_reuse(bo); + intel_crtc->scanout_pixmap = ppix; return drmModeAddFB(intel->drmSubFD, ppix->drawable.width, ppix->drawable.height, ppix->drawable.depth, @@ -1494,6 +1500,7 @@ if (ret) goto fail; + drm_intel_bo_disable_reuse(intel->front_buffer); intel->front_pitch = pitch; intel->front_tiling = tiling; @@ -1555,6 +1562,7 @@ new_front->handle, &new_fb_id)) goto error_out; + drm_intel_bo_disable_reuse(new_front); intel_glamor_flush(intel); intel_batch_submit(scrn); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/gen4_render.c new/xf86-video-intel-2.20.12/src/sna/gen4_render.c --- old/xf86-video-intel-2.20.10/src/sna/gen4_render.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/gen4_render.c 2012-10-20 17:23:26.000000000 +0200 @@ -190,7 +190,7 @@ #define SAMPLER_OFFSET(sf, se, mf, me, k) \ ((((((sf) * EXTEND_COUNT + (se)) * FILTER_COUNT + (mf)) * EXTEND_COUNT + (me)) * KERNEL_COUNT + (k)) * 64) -static void +static bool gen4_emit_pipelined_pointers(struct sna *sna, const struct sna_composite_op *op, int blend, int kernel); @@ -243,6 +243,7 @@ gen4_emit_pipelined_pointers(sna, op, PictOpAdd, gen4_choose_composite_kernel(PictOpAdd, true, true, op->is_affine)); + OUT_BATCH(MI_FLUSH); OUT_BATCH(GEN4_3DPRIMITIVE | GEN4_3DPRIMITIVE_VERTEX_SEQUENTIAL | @@ -1222,11 +1223,11 @@ } } -static void +static bool gen4_emit_binding_table(struct sna *sna, uint16_t offset) { if (sna->render_state.gen4.surface_table == offset) - return; + return false; sna->render_state.gen4.surface_table = offset; @@ -1238,9 +1239,11 @@ OUT_BATCH(0); /* sf */ /* Only the PS uses the binding table */ OUT_BATCH(offset*4); + + return true; } -static void +static bool gen4_emit_pipelined_pointers(struct sna *sna, const struct sna_composite_op *op, int blend, int kernel) @@ -1263,7 +1266,7 @@ key = sp | bp << 16; if (key == sna->render_state.gen4.last_pipelined_pointers) - return; + return true; OUT_BATCH(GEN4_3DSTATE_PIPELINED_POINTERS | 5); OUT_BATCH(sna->render_state.gen4.vs); @@ -1275,6 +1278,7 @@ sna->render_state.gen4.last_pipelined_pointers = key; gen4_emit_urb(sna); + return false; } static void @@ -1376,18 +1380,21 @@ const struct sna_composite_op *op, uint16_t wm_binding_table) { + bool flush = false; + if (FLUSH_EVERY_VERTEX) OUT_BATCH(MI_FLUSH | MI_INHIBIT_RENDER_CACHE_FLUSH); gen4_emit_drawing_rectangle(sna, op); - gen4_emit_binding_table(sna, wm_binding_table); - gen4_emit_pipelined_pointers(sna, op, op->op, op->u.gen4.wm_kernel); + flush |= gen4_emit_binding_table(sna, wm_binding_table); + flush |= gen4_emit_pipelined_pointers(sna, op, op->op, op->u.gen4.wm_kernel); gen4_emit_vertex_elements(sna, op); - if (kgem_bo_is_dirty(op->src.bo) || kgem_bo_is_dirty(op->mask.bo)) { - DBG(("%s: flushing dirty (%d, %d)\n", __FUNCTION__, + if (flush || kgem_bo_is_dirty(op->src.bo) || kgem_bo_is_dirty(op->mask.bo)) { + DBG(("%s: flushing dirty (%d, %d), forced? %d\n", __FUNCTION__, kgem_bo_is_dirty(op->src.bo), - kgem_bo_is_dirty(op->mask.bo))); + kgem_bo_is_dirty(op->mask.bo), + flush)); OUT_BATCH(MI_FLUSH); kgem_clear_dirty(&sna->kgem); kgem_bo_mark_dirty(op->dst.bo); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/gen7_render.c new/xf86-video-intel-2.20.12/src/sna/gen7_render.c --- old/xf86-video-intel-2.20.10/src/sna/gen7_render.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/gen7_render.c 2012-10-20 17:23:26.000000000 +0200 @@ -1077,7 +1077,9 @@ gen7_emit_pipe_invalidate(sna); - gen7_emit_cc(sna, gen7_get_blend(PictOpAdd, true, op->dst.format)); + gen7_emit_cc(sna, + GEN7_BLEND(gen7_get_blend(PictOpAdd, true, + op->dst.format))); gen7_emit_wm(sna, gen7_choose_composite_kernel(PictOpAdd, true, true, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/kgem.c new/xf86-video-intel-2.20.12/src/sna/kgem.c --- old/xf86-video-intel-2.20.10/src/sna/kgem.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/kgem.c 2012-10-20 17:23:26.000000000 +0200 @@ -69,6 +69,7 @@ #define DBG_NO_UPLOAD_ACTIVE 0 #define DBG_NO_MAP_UPLOAD 0 #define DBG_NO_RELAXED_FENCING 0 +#define DBG_NO_SECURE_BATCHES 0 #define DBG_DUMP 0 #define SHOW_BATCH 0 @@ -93,7 +94,8 @@ #define IS_USER_MAP(ptr) ((uintptr_t)(ptr) & 2) #define __MAP_TYPE(ptr) ((uintptr_t)(ptr) & 3) -#define LOCAL_I915_PARAM_HAS_SEMAPHORES 20 +#define LOCAL_I915_PARAM_HAS_SEMAPHORES 20 +#define LOCAL_I915_PARAM_HAS_SECURE_BATCHES 23 #define LOCAL_I915_GEM_USERPTR 0x32 #define LOCAL_IOCTL_I915_GEM_USERPTR DRM_IOWR (DRM_COMMAND_BASE + LOCAL_I915_GEM_USERPTR, struct local_i915_gem_userptr) @@ -767,6 +769,14 @@ #endif } +static bool test_has_secure_batches(struct kgem *kgem) +{ + if (DBG_NO_SECURE_BATCHES) + return false; + + return gem_param(kgem, LOCAL_I915_PARAM_HAS_SECURE_BATCHES) > 0; +} + static int kgem_get_screen_index(struct kgem *kgem) { struct sna *sna = container_of(kgem, struct sna, kgem); @@ -822,6 +832,10 @@ DBG(("%s: can blt to cpu? %d\n", __FUNCTION__, kgem->can_blt_cpu)); + kgem->has_secure_batches = test_has_secure_batches(kgem); + DBG(("%s: can use privileged batchbuffers? %d\n", __FUNCTION__, + kgem->has_secure_batches)); + if (!is_hw_supported(kgem, dev)) { xf86DrvMsg(kgem_get_screen_index(kgem), X_WARNING, "Detected unsupported/dysfunctional hardware, disabling acceleration.\n"); @@ -2147,6 +2161,7 @@ kgem->nbatch = 0; kgem->surface = kgem->batch_size; kgem->mode = KGEM_NONE; + kgem->batch_flags = 0; kgem->flush = 0; kgem->next_request = __kgem_request_alloc(); @@ -2258,7 +2273,7 @@ execbuf.num_cliprects = 0; execbuf.DR1 = 0; execbuf.DR4 = 0; - execbuf.flags = kgem->ring; + execbuf.flags = kgem->ring | kgem->batch_flags; execbuf.rsvd1 = 0; execbuf.rsvd2 = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/kgem.h new/xf86-video-intel-2.20.12/src/sna/kgem.h --- old/xf86-video-intel-2.20.10/src/sna/kgem.h 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/kgem.h 2012-10-20 17:23:26.000000000 +0200 @@ -138,6 +138,9 @@ int16_t count; } vma[NUM_MAP_TYPES]; + uint32_t batch_flags; +#define I915_EXEC_SECURE (1<<9) + uint16_t nbatch; uint16_t surface; uint16_t nexec; @@ -158,6 +161,7 @@ uint32_t has_relaxed_fencing :1; uint32_t has_relaxed_delta :1; uint32_t has_semaphores :1; + uint32_t has_secure_batches :1; uint32_t has_cacheing :1; uint32_t has_llc :1; @@ -510,9 +514,6 @@ if (bo->map == NULL) return bo->tiling == I915_TILING_NONE && bo->domain == DOMAIN_CPU; - if (bo->tiling == I915_TILING_X && !bo->scanout && kgem->has_llc) - return IS_CPU_MAP(bo->map); - return IS_CPU_MAP(bo->map) == !bo->tiling; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/sna_accel.c new/xf86-video-intel-2.20.12/src/sna/sna_accel.c --- old/xf86-video-intel-2.20.10/src/sna/sna_accel.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/sna_accel.c 2012-10-20 17:23:26.000000000 +0200 @@ -2791,6 +2791,7 @@ DBG(("%s: using GPU bo with damage? %d\n", __FUNCTION__, *damage != NULL)); + assert(damage == NULL || !DAMAGE_IS_ALL(*damage)); assert(priv->gpu_bo->proxy == NULL); assert(priv->clear == false); assert(priv->cpu == false); @@ -2859,6 +2860,19 @@ return NULL; } + if (priv->shm) { + assert(!priv->flush); + sna_add_flush_pixmap(sna, priv, priv->cpu_bo); + + /* As we may have flushed and retired,, recheck for busy bo */ + if ((flags & FORCE_GPU) == 0 && !kgem_bo_is_busy(priv->cpu_bo)) + return NULL; + } + if (priv->flush) { + assert(!priv->shm); + sna_add_flush_pixmap(sna, priv, priv->gpu_bo); + } + if (sna_damage_is_all(&priv->cpu_damage, pixmap->drawable.width, pixmap->drawable.height)) { @@ -2873,21 +2887,9 @@ *damage = &priv->cpu_damage; } - if (priv->shm) { - assert(!priv->flush); - sna_add_flush_pixmap(sna, priv, priv->cpu_bo); - - /* As we may have flushed and retired,, recheck for busy bo */ - if ((flags & FORCE_GPU) == 0 && !kgem_bo_is_busy(priv->cpu_bo)) - return NULL; - } - if (priv->flush) { - assert(!priv->shm); - sna_add_flush_pixmap(sna, priv, priv->gpu_bo); - } - DBG(("%s: using CPU bo with damage? %d\n", __FUNCTION__, *damage != NULL)); + assert(damage == NULL || !DAMAGE_IS_ALL(*damage)); assert(priv->clear == false); return priv->cpu_bo; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/sna_blt.c new/xf86-video-intel-2.20.12/src/sna/sna_blt.c --- old/xf86-video-intel-2.20.10/src/sna/sna_blt.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/sna_blt.c 2012-10-20 17:23:26.000000000 +0200 @@ -1899,6 +1899,7 @@ if (tmp->dst.bo == priv->cpu_bo) { DBG(("%s: forcing the stall to overwrite a busy CPU bo\n", __FUNCTION__)); tmp->dst.bo = NULL; + tmp->damage = NULL; } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/sna_display.c new/xf86-video-intel-2.20.12/src/sna/sna_display.c --- old/xf86-video-intel-2.20.10/src/sna/sna_display.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/sna_display.c 2012-10-20 17:23:26.000000000 +0200 @@ -2717,41 +2717,75 @@ return best_crtc; } -/* Gen6 wait for scan line support */ #define MI_LOAD_REGISTER_IMM (0x22<<23) -/* gen6: Scan lines register */ -#define GEN6_PIPEA_SLC (0x70004) -#define GEN6_PIPEB_SLC (0x71004) +static bool sna_emit_wait_for_scanline_gen7(struct sna *sna, + int pipe, int y1, int y2, + bool full_height) +{ + uint32_t *b; + + if (!sna->kgem.has_secure_batches) + return false; + + assert(y1 >= 0); + assert(y2 > y1); + assert(sna->kgem.mode); -static void sna_emit_wait_for_scanline_gen6(struct sna *sna, + b = kgem_get_batch(&sna->kgem, 16); + b[0] = MI_LOAD_REGISTER_IMM | 1; + b[1] = 0x44050; /* DERRMR */ + b[2] = ~(1 << (3*full_height + pipe*8)); + b[3] = MI_LOAD_REGISTER_IMM | 1; + b[4] = 0xa188; /* FORCEWAKE_MT */ + b[5] = 2 << 16 | 2; + b[6] = MI_LOAD_REGISTER_IMM | 1; + b[7] = 0x70068 + 0x1000 * pipe; + b[8] = (1 << 31) | (1 << 30) | (y1 << 16) | (y2 - 1); + b[9] = MI_WAIT_FOR_EVENT | 1 << (3*full_height + pipe*5); + b[10] = MI_LOAD_REGISTER_IMM | 1; + b[11] = 0xa188; /* FORCEWAKE_MT */ + b[12] = 2 << 16; + b[13] = MI_LOAD_REGISTER_IMM | 1; + b[14] = 0x44050; /* DERRMR */ + b[15] = ~0; + kgem_advance_batch(&sna->kgem, 16); + + sna->kgem.batch_flags |= I915_EXEC_SECURE; + return true; +} + +static bool sna_emit_wait_for_scanline_gen6(struct sna *sna, int pipe, int y1, int y2, bool full_height) { - uint32_t event; uint32_t *b; - assert (y2 > 0); + if (!sna->kgem.has_secure_batches) + return false; - /* We just wait until the trace passes the roi */ - if (pipe == 0) { - pipe = GEN6_PIPEA_SLC; - event = MI_WAIT_FOR_PIPEA_SCAN_LINE_WINDOW; - } else { - pipe = GEN6_PIPEB_SLC; - event = MI_WAIT_FOR_PIPEB_SCAN_LINE_WINDOW; - } + assert(y1 >= 0); + assert(y2 > y1); + assert(sna->kgem.mode); - kgem_set_mode(&sna->kgem, KGEM_RENDER); - b = kgem_get_batch(&sna->kgem, 4); + b = kgem_get_batch(&sna->kgem, 10); b[0] = MI_LOAD_REGISTER_IMM | 1; - b[1] = pipe; - b[2] = y2 - 1; - b[3] = MI_WAIT_FOR_EVENT | event; - kgem_advance_batch(&sna->kgem, 4); + b[1] = 0x44050; /* DERRMR */ + b[2] = ~(1 << (3*full_height + pipe*8)); + b[3] = MI_LOAD_REGISTER_IMM | 1; + b[4] = 0x4f100; /* magic */ + b[5] = (1 << 31) | (1 << 30) | pipe << 29 | (y1 << 16) | (y2 - 1); + b[6] = MI_WAIT_FOR_EVENT | 1 << (3*full_height + pipe*5); + b[7] = MI_LOAD_REGISTER_IMM | 1; + b[8] = 0x44050; /* DERRMR */ + b[9] = ~0; + kgem_advance_batch(&sna->kgem, 10); + + sna->kgem.batch_flags |= I915_EXEC_SECURE; + return true; } -static void sna_emit_wait_for_scanline_gen4(struct sna *sna, +static bool sna_emit_wait_for_scanline_gen4(struct sna *sna, int pipe, int y1, int y2, bool full_height) { @@ -2778,9 +2812,11 @@ b[3] = b[1] = (y1 << 16) | (y2-1); b[4] = MI_WAIT_FOR_EVENT | event; kgem_advance_batch(&sna->kgem, 5); + + return true; } -static void sna_emit_wait_for_scanline_gen2(struct sna *sna, +static bool sna_emit_wait_for_scanline_gen2(struct sna *sna, int pipe, int y1, int y2, bool full_height) { @@ -2805,6 +2841,8 @@ else b[4] = MI_WAIT_FOR_EVENT | MI_WAIT_FOR_PIPEB_SCAN_LINE_WINDOW; kgem_advance_batch(&sna->kgem, 5); + + return true; } bool @@ -2815,15 +2853,12 @@ { bool full_height; int y1, y2, pipe; + bool ret; assert(crtc); assert(to_sna_crtc(crtc)->bo != NULL); assert(pixmap == sna->front); - /* XXX WAIT_EVENT is still causing hangs on SNB */ - if (sna->kgem.gen >= 60) - return false; - /* * Make sure we don't wait for a scanline that will * never occur @@ -2850,14 +2885,18 @@ DBG(("%s: pipe=%d, y1=%d, y2=%d, full_height?=%d\n", __FUNCTION__, pipe, y1, y2, full_height)); - if (sna->kgem.gen >= 60) - sna_emit_wait_for_scanline_gen6(sna, pipe, y1, y2, full_height); + if (sna->kgem.gen >= 80) + ret = false; + else if (sna->kgem.gen >= 70) + ret = sna_emit_wait_for_scanline_gen7(sna, pipe, y1, y2, full_height); + else if (sna->kgem.gen >= 60) + ret =sna_emit_wait_for_scanline_gen6(sna, pipe, y1, y2, full_height); else if (sna->kgem.gen >= 40) - sna_emit_wait_for_scanline_gen4(sna, pipe, y1, y2, full_height); + ret = sna_emit_wait_for_scanline_gen4(sna, pipe, y1, y2, full_height); else - sna_emit_wait_for_scanline_gen2(sna, pipe, y1, y2, full_height); + ret = sna_emit_wait_for_scanline_gen2(sna, pipe, y1, y2, full_height); - return true; + return ret; } void sna_mode_update(struct sna *sna) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/sna_dri.c new/xf86-video-intel-2.20.12/src/sna/sna_dri.c --- old/xf86-video-intel-2.20.10/src/sna/sna_dri.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/sna_dri.c 2012-10-20 17:23:26.000000000 +0200 @@ -525,6 +525,9 @@ void *dst = kgem_bo_map__gtt(&sna->kgem, dst_bo); void *src = kgem_bo_map__gtt(&sna->kgem, src_bo); + if (dst == NULL || src == NULL) + return; + DBG(("%s: src(%d, %d), dst(%d, %d) x %d\n", __FUNCTION__, sx, sy, dx, dy, n)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/sna_video_overlay.c new/xf86-video-intel-2.20.12/src/sna/sna_video_overlay.c --- old/xf86-video-intel-2.20.10/src/sna/sna_video_overlay.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/sna_video_overlay.c 2012-10-20 17:23:26.000000000 +0200 @@ -532,6 +532,7 @@ return BadAlloc; } + frame.bo->domain = DOMAIN_NONE; sna_video_buffer_fini(sna, video); /* update cliplist */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/sna_video_sprite.c new/xf86-video-intel-2.20.12/src/sna/sna_video_sprite.c --- old/xf86-video-intel-2.20.10/src/sna/sna_video_sprite.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/sna_video_sprite.c 2012-10-20 17:23:26.000000000 +0200 @@ -250,6 +250,7 @@ 0, 0, frame->width << 16, frame->height << 16)) return false; + frame->bo->domain = DOMAIN_NONE; video->plane = plane; return true; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-intel-2.20.10/src/sna/sna_video_textured.c new/xf86-video-intel-2.20.12/src/sna/sna_video_textured.c --- old/xf86-video-intel-2.20.10/src/sna/sna_video_textured.c 2012-10-14 17:34:09.000000000 +0200 +++ new/xf86-video-intel-2.20.12/src/sna/sna_video_textured.c 2012-10-20 17:23:26.000000000 +0200 @@ -275,6 +275,7 @@ } } + kgem_set_mode(&sna->kgem, KGEM_RENDER); if (crtc && video->SyncToVblank != 0 && sna_pixmap_is_scanout(sna, pixmap)) flush = sna_wait_for_scanline(sna, pixmap, crtc, -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org