summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/intel/intel_ioctl.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2008-09-04 22:16:31 +0100
committerEric Anholt <eric@anholt.net>2008-09-10 13:59:45 -0700
commit7e0bbdcf033981282978554c2e68ce48b55aa291 (patch)
treed604788e8770df7d2bc2853473e18045a9a74cdf /src/mesa/drivers/dri/intel/intel_ioctl.c
parent11d694b1bb0cb384d802d7e0e252cf5119febb98 (diff)
intel: Move the bufmgr back to the screen.
Mesa requires that we be able to share objects between contexts, which means that the objects need to be created by the same bufmgr, and the bufmgr internally requires pthread protection for thread safety. Rely on the bufmgr having appropriate locking.
Diffstat (limited to 'src/mesa/drivers/dri/intel/intel_ioctl.c')
-rw-r--r--src/mesa/drivers/dri/intel/intel_ioctl.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_ioctl.c b/src/mesa/drivers/dri/intel/intel_ioctl.c
index 58c81766cd..ac9e9337d6 100644
--- a/src/mesa/drivers/dri/intel/intel_ioctl.c
+++ b/src/mesa/drivers/dri/intel/intel_ioctl.c
@@ -50,22 +50,23 @@
#define FILE_DEBUG_FLAG DEBUG_IOCTL
int
-intelEmitIrqLocked(struct intel_context *intel)
+intelEmitIrqLocked(intelScreenPrivate *intelScreen)
{
+ __DRIscreenPrivate *spriv = intelScreen->driScrnPriv;
struct drm_i915_irq_emit ie;
int ret, seq = 1;
- if (intel->no_hw)
+ if (intelScreen->no_hw)
return 1;
/*
- assert(((*(int *)intel->driHwLock) & ~DRM_LOCK_CONT) ==
- (DRM_LOCK_HELD|intel->hHWContext));
+ assert(((*(int *)intelScreen->driHwLock) & ~DRM_LOCK_CONT) ==
+ (DRM_LOCK_HELD|intelScreen->hHWContext));
*/
ie.irq_seq = &seq;
- ret = drmCommandWriteRead(intel->driFd, DRM_I915_IRQ_EMIT, &ie, sizeof(ie));
+ ret = drmCommandWriteRead(spriv->fd, DRM_I915_IRQ_EMIT, &ie, sizeof(ie));
if (ret) {
fprintf(stderr, "%s: drm_i915_irq_emit: %d\n", __FUNCTION__, ret);
exit(1);
@@ -77,13 +78,15 @@ intelEmitIrqLocked(struct intel_context *intel)
}
void
-intelWaitIrq(struct intel_context *intel, int seq)
+intelWaitIrq(intelScreenPrivate *intelScreen, int seq)
{
+ __DRIscreenPrivate *spriv = intelScreen->driScrnPriv;
struct drm_i915_irq_wait iw;
int ret, lastdispatch;
- volatile struct drm_i915_sarea *sarea = intel->sarea;
+ volatile struct drm_i915_sarea *sarea = (struct drm_i915_sarea *)
+ (((GLubyte *) spriv->pSAREA) + intelScreen->sarea_priv_offset);
- if (intel->no_hw)
+ if (intelScreen->no_hw)
return;
DBG("%s %d\n", __FUNCTION__, seq);
@@ -92,7 +95,7 @@ intelWaitIrq(struct intel_context *intel, int seq)
do {
lastdispatch = sarea->last_dispatch;
- ret = drmCommandWrite(intel->driFd, DRM_I915_IRQ_WAIT, &iw, sizeof(iw));
+ ret = drmCommandWrite(spriv->fd, DRM_I915_IRQ_WAIT, &iw, sizeof(iw));
} while (ret == -EAGAIN ||
ret == -EINTR ||
(ret == -EBUSY && lastdispatch != sarea->last_dispatch) ||