xf86-video-intel: 3 commits - src/sna/sna_display.c src/sna/sna_dri.c src/sna/sna_driver.c
Chris Wilson
ickle at kemper.freedesktop.org
Sun Mar 3 01:32:56 PST 2013
src/sna/sna_display.c | 26 +++++++++-----------------
src/sna/sna_dri.c | 3 ++-
src/sna/sna_driver.c | 46 +++++++++++++++++++++++++++++++++++++++++-----
3 files changed, 52 insertions(+), 23 deletions(-)
New commits:
commit ef5edbf61686388126e62ce360a66dd8652b2493
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Mar 3 09:29:53 2013 +0000
sna: Probe for kernel support of framebuffer formats
References: https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/1135403
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index b11575b..8e32c5f 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -438,6 +438,37 @@ static Bool sna_option_cast_to_bool(struct sna *sna, int id, Bool val)
return val;
}
+static Bool fb_supports_depth(int fd, int depth)
+{
+ struct drm_i915_gem_create create;
+ struct drm_mode_fb_cmd fb;
+ struct drm_gem_close close;
+ Bool ret;
+
+ VG_CLEAR(create);
+ create.handle = 0;
+ create.size = 4096;
+ if (drmIoctl(fd, DRM_IOCTL_I915_GEM_CREATE, &create))
+ return FALSE;
+
+ VG_CLEAR(fb);
+ fb.width = 64;
+ fb.height = 16;
+ fb.pitch = 256;
+ fb.bpp = depth <= 8 ? 8 : depth <= 16 ? 16 : 32;
+ fb.depth = depth;
+ fb.handle = create.handle;
+
+ ret = drmIoctl(fd, DRM_IOCTL_MODE_ADDFB, &fb) == 0;
+ drmModeRmFB(fd, fb.fb_id);
+
+ VG_CLEAR(close);
+ close.handle = create.handle;
+ (void)drmIoctl(fd, DRM_IOCTL_GEM_CLOSE, &close);
+
+ return ret;
+}
+
/**
* This is called before ScreenInit to do any require probing of screen
* configuration.
@@ -502,6 +533,10 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags)
sna->PciInfo = xf86GetPciInfoForEntity(sna->pEnt->index);
+ scrn->monitor = scrn->confScreen->monitor;
+ scrn->progClock = TRUE;
+ scrn->rgbBits = 8;
+
fd = sna_open_drm_master(scrn);
if (fd == -1) {
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
@@ -509,13 +544,13 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags)
return FALSE;
}
- scrn->monitor = scrn->confScreen->monitor;
- scrn->progClock = TRUE;
- scrn->rgbBits = 8;
flags24 = Support32bppFb | PreferConvert24to32 | SupportConvert24to32;
preferred_depth = sna->info->gen < 040 ? 15 : 24;
+ if (!fb_supports_depth(fd, preferred_depth))
+ preferred_depth = 24;
+
if (!xf86SetDepthBpp(scrn, preferred_depth, 0, 0, flags24))
return FALSE;
@@ -525,10 +560,11 @@ static Bool sna_pre_init(ScrnInfoPtr scrn, int flags)
case 16:
case 24:
case 30:
- break;
+ if (fb_supports_depth(fd, scrn->depth))
+ break;
default:
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
- "Given depth (%d) is not supported by Intel driver\n",
+ "Given depth (%d) is not supported by the Intel driver and this chipset.\n",
scrn->depth);
return FALSE;
}
commit cd313a8d5d1363929bebac83f81e347b4a9e70f1
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sat Mar 2 22:52:15 2013 +0000
sna/dri: Guard against failed batch submission
Avoid dereferencing a NULL bo if we do not submit a batch for the copy
operation.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61708
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c
index d30c3a4..e3bca1b 100644
--- a/src/sna/sna_dri.c
+++ b/src/sna/sna_dri.c
@@ -725,7 +725,8 @@ sna_dri_copy_to_front(struct sna *sna, DrawablePtr draw, RegionPtr region,
if (flush) { /* STAT! */
struct kgem_request *rq = sna->kgem.next_request;
kgem_submit(&sna->kgem);
- bo = kgem_bo_reference(rq->bo);
+ if (rq->bo)
+ bo = kgem_bo_reference(rq->bo);
}
}
commit e4df4e03b147694c65196651f5c13e7199f74579
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sat Mar 2 22:46:57 2013 +0000
sna: Eliminate a few used-once local variables
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 714b65c..60c9467 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1345,7 +1345,6 @@ void sna_mode_adjust_frame(struct sna *sna, int x, int y)
static void
sna_crtc_hide_cursor(xf86CrtcPtr crtc)
{
- struct sna *sna = to_sna(crtc->scrn);
struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
struct drm_mode_cursor arg;
@@ -1357,13 +1356,12 @@ sna_crtc_hide_cursor(xf86CrtcPtr crtc)
arg.width = arg.height = 64;
arg.handle = 0;
- (void)drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_CURSOR, &arg);
+ (void)drmIoctl(to_sna(crtc->scrn)->kgem.fd, DRM_IOCTL_MODE_CURSOR, &arg);
}
static void
sna_crtc_show_cursor(xf86CrtcPtr crtc)
{
- struct sna *sna = to_sna(crtc->scrn);
struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
struct drm_mode_cursor arg;
@@ -1375,7 +1373,7 @@ sna_crtc_show_cursor(xf86CrtcPtr crtc)
arg.width = arg.height = 64;
arg.handle = sna_crtc->cursor;
- (void)drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_CURSOR, &arg);
+ (void)drmIoctl(to_sna(crtc->scrn)->kgem.fd, DRM_IOCTL_MODE_CURSOR, &arg);
}
static void
@@ -1388,7 +1386,6 @@ sna_crtc_set_cursor_colors(xf86CrtcPtr crtc, int bg, int fg)
static void
sna_crtc_set_cursor_position(xf86CrtcPtr crtc, int x, int y)
{
- struct sna *sna = to_sna(crtc->scrn);
struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
struct drm_mode_cursor arg;
@@ -1401,45 +1398,40 @@ sna_crtc_set_cursor_position(xf86CrtcPtr crtc, int x, int y)
arg.y = y;
arg.handle = sna_crtc->cursor;
- (void)drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_CURSOR, &arg);
+ (void)drmIoctl(to_sna(crtc->scrn)->kgem.fd, DRM_IOCTL_MODE_CURSOR, &arg);
}
static void
sna_crtc_load_cursor_argb(xf86CrtcPtr crtc, CARD32 *image)
{
- struct sna *sna = to_sna(crtc->scrn);
- struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
struct drm_i915_gem_pwrite pwrite;
- __DBG(("%s: CRTC:%d\n", __FUNCTION__, sna_crtc->id));
+ __DBG(("%s: CRTC:%d\n", __FUNCTION__, to_sna_crtc(crtc)->id));
VG_CLEAR(pwrite);
- pwrite.handle = sna_crtc->cursor;
+ pwrite.handle = to_sna_crtc(crtc)->cursor;
pwrite.offset = 0;
pwrite.size = 64*64*4;
pwrite.data_ptr = (uintptr_t)image;
- (void)drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_GEM_PWRITE, &pwrite);
+ (void)drmIoctl(to_sna(crtc->scrn)->kgem.fd, DRM_IOCTL_I915_GEM_PWRITE, &pwrite);
}
static void
sna_crtc_gamma_set(xf86CrtcPtr crtc,
CARD16 *red, CARD16 *green, CARD16 *blue, int size)
{
- struct sna *sna = to_sna(crtc->scrn);
- struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
-
- drmModeCrtcSetGamma(sna->kgem.fd, sna_crtc->id,
+ drmModeCrtcSetGamma(to_sna(crtc->scrn)->kgem.fd,
+ to_sna_crtc(crtc)->id,
size, red, green, blue);
}
static void
sna_crtc_destroy(xf86CrtcPtr crtc)
{
- struct sna *sna = to_sna(crtc->scrn);
struct sna_crtc *sna_crtc = to_sna_crtc(crtc);
sna_crtc_hide_cursor(crtc);
- gem_close(sna->kgem.fd, sna_crtc->cursor);
+ gem_close(to_sna(crtc->scrn)->kgem.fd, sna_crtc->cursor);
list_del(&sna_crtc->link);
free(sna_crtc);
More information about the xorg-commit
mailing list