xf86-video-intel: 2 commits - src/sna/kgem.c src/sna/sna_display.c src/sna/sna_driver.c src/sna/sna.h
Chris Wilson
ickle at kemper.freedesktop.org
Mon Nov 26 07:50:34 PST 2012
src/sna/kgem.c | 8 +++-----
src/sna/sna.h | 1 +
src/sna/sna_display.c | 25 +++++++++++++++++++++++++
src/sna/sna_driver.c | 17 +----------------
4 files changed, 30 insertions(+), 21 deletions(-)
New commits:
commit 1e06d19a00f5a5a05369deeb3c5ae15b282c0f92
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Nov 26 15:30:09 2012 +0000
sna: Disable shadow tracking upon regen
References: https://bugs.freedesktop.org/show_bug.cgi?id=56608
References: https://bugs.freedesktop.org/show_bug.cgi?id=52255
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna.h b/src/sna/sna.h
index f1b3beb..6028c4f 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -295,6 +295,7 @@ extern void sna_mode_update(struct sna *sna);
extern void sna_mode_disable_unused(struct sna *sna);
extern void sna_mode_wakeup(struct sna *sna);
extern void sna_mode_redisplay(struct sna *sna);
+extern void sna_mode_close(struct sna *sna);
extern void sna_mode_fini(struct sna *sna);
extern int sna_page_flip(struct sna *sna,
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index aefb6f7..cec2af3 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -2621,6 +2621,31 @@ bool sna_mode_pre_init(ScrnInfoPtr scrn, struct sna *sna)
return true;
}
+static Bool sna_mode_has_pending_events(struct sna *sna)
+{
+ struct pollfd pfd;
+ pfd.fd = sna->kgem.fd;
+ pfd.events = POLLIN;
+ return poll(&pfd, 1, 0) == 1;
+}
+
+void
+sna_mode_close(struct sna *sna)
+{
+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(sna->scrn);
+ int i;
+
+ /* In order to workaround a kernel bug in not honouring O_NONBLOCK,
+ * check that the fd is readable before attempting to read the next
+ * event from drm.
+ */
+ if (sna_mode_has_pending_events(sna))
+ sna_mode_wakeup(sna);
+
+ for (i = 0; i < xf86_config->num_crtc; i++)
+ sna_crtc_disable_shadow(sna, to_sna_crtc(xf86_config->crtc[i]));
+}
+
void
sna_mode_fini(struct sna *sna)
{
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index f214b90..086be6a 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -62,7 +62,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <sys/ioctl.h>
#include <sys/fcntl.h>
-#include <sys/poll.h>
#include "i915_drm.h"
#ifdef HAVE_VALGRIND
@@ -730,18 +729,6 @@ static void sna_leave_vt(VT_FUNC_ARGS_DECL)
"drmDropMaster failed: %s\n", strerror(errno));
}
-/* In order to workaround a kernel bug in not honouring O_NONBLOCK,
- * check that the fd is readable before attempting to read the next
- * event from drm.
- */
-static Bool sna_mode_has_pending_events(struct sna *sna)
-{
- struct pollfd pfd;
- pfd.fd = sna->kgem.fd;
- pfd.events = POLLIN;
- return poll(&pfd, 1, 0) == 1;
-}
-
static Bool sna_early_close_screen(CLOSE_SCREEN_ARGS_DECL)
{
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
@@ -752,9 +739,7 @@ static Bool sna_early_close_screen(CLOSE_SCREEN_ARGS_DECL)
xf86_hide_cursors(scrn);
sna_uevent_fini(scrn);
- /* drain the event queues */
- if (sna_mode_has_pending_events(sna))
- sna_mode_wakeup(sna);
+ sna_mode_close(sna);
if (sna->dri_open) {
sna_dri_close(sna, screen);
commit d21ed3a6aba5ae227cc5ecd164f3c18bc48c69af
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Nov 26 10:34:28 2012 +0000
sna: Use a single execobject flag to mark read/write domains
Slight modification to the proposed API to only pass the simplified
domain tracking now performed by the kernel.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 034e182..7f8774f 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -111,6 +111,7 @@ search_snoop_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags);
#define LOCAL_I915_PARAM_HAS_NO_RELOC 24
#define LOCAL_I915_PARAM_HAS_HANDLE_LUT 25
+#define LOCAL_EXEC_OBJECT_WRITE (1<<2)
#define LOCAL_I915_EXEC_NO_RELOC (1<<10)
#define LOCAL_I915_EXEC_HANDLE_LUT (1<<11)
@@ -2313,9 +2314,7 @@ void _kgem_submit(struct kgem *kgem)
kgem->exec[i].alignment = 0;
kgem->exec[i].offset = rq->bo->presumed_offset;
kgem->exec[i].flags = 0;
- kgem->exec[i].rsvd1 = (I915_GEM_DOMAIN_COMMAND |
- I915_GEM_DOMAIN_INSTRUCTION |
- I915_GEM_DOMAIN_VERTEX);
+ kgem->exec[i].rsvd1 = 0;
kgem->exec[i].rsvd2 = 0;
rq->bo->target_handle = kgem->has_handle_lut ? i : handle;
@@ -3925,10 +3924,9 @@ uint32_t kgem_add_reloc(struct kgem *kgem,
kgem->reloc[index].target_handle = bo->target_handle;
kgem->reloc[index].presumed_offset = bo->presumed_offset;
- bo->exec->rsvd1 |= read_write_domain >> 16;
if (read_write_domain & 0x7fff) {
assert(!bo->snoop || kgem->can_blt_cpu);
- bo->exec->rsvd1 |= (uint64_t)(read_write_domain & 0x7fff) << 32;
+ bo->exec->flags |= LOCAL_EXEC_OBJECT_WRITE;
kgem_bo_mark_dirty(bo);
}
More information about the xorg-commit
mailing list