| @@ -339,10 +339,7 @@ static GLboolean brw_try_draw_prims( GLcontext *ctx, | |||
| * so can't access it earlier. | |||
| */ | |||
| LOCK_HARDWARE(intel); | |||
| if (!intel->constant_cliprect && intel->driDrawable->numClipRects == 0) { | |||
| UNLOCK_HARDWARE(intel); | |||
| return GL_TRUE; | |||
| } | |||
| @@ -404,7 +401,6 @@ static GLboolean brw_try_draw_prims( GLcontext *ctx, | |||
| if (intel->always_flush_batch) | |||
| intel_batchbuffer_flush(intel->batch); | |||
| out: | |||
| UNLOCK_HARDWARE(intel); | |||
| brw_state_cache_check_size(brw); | |||
| @@ -129,8 +129,7 @@ intel_batchbuffer_free(struct intel_batchbuffer *batch) | |||
| /* TODO: Push this whole function into bufmgr. | |||
| */ | |||
| static void | |||
| do_flush_locked(struct intel_batchbuffer *batch, | |||
| GLuint used, GLboolean allow_unlock) | |||
| do_flush_locked(struct intel_batchbuffer *batch, GLuint used) | |||
| { | |||
| struct intel_context *intel = batch->intel; | |||
| int ret = 0; | |||
| @@ -160,18 +159,6 @@ do_flush_locked(struct intel_batchbuffer *batch, | |||
| (x_off & 0xffff) | (y_off << 16)); | |||
| } | |||
| if (batch->cliprect_mode == LOOP_CLIPRECTS && num_cliprects == 0) { | |||
| if (allow_unlock) { | |||
| /* If we are not doing any actual user-visible rendering, | |||
| * do a sched_yield to keep the app from pegging the cpu while | |||
| * achieving nothing. | |||
| */ | |||
| UNLOCK_HARDWARE(intel); | |||
| sched_yield(); | |||
| LOCK_HARDWARE(intel); | |||
| } | |||
| } | |||
| if (INTEL_DEBUG & DEBUG_BATCH) { | |||
| dri_bo_map(batch->buf, GL_FALSE); | |||
| intel_decode(batch->buf->virtual, used / 4, batch->buf->offset, | |||
| @@ -183,7 +170,6 @@ do_flush_locked(struct intel_batchbuffer *batch, | |||
| } | |||
| if (ret != 0) { | |||
| UNLOCK_HARDWARE(intel); | |||
| exit(1); | |||
| } | |||
| intel->vtbl.new_batch(intel); | |||
| @@ -252,9 +238,7 @@ _intel_batchbuffer_flush(struct intel_batchbuffer *batch, const char *file, | |||
| /* TODO: Just pass the relocation list and dma buffer up to the | |||
| * kernel. | |||
| */ | |||
| LOCK_HARDWARE(intel); | |||
| do_flush_locked(batch, used, GL_FALSE); | |||
| UNLOCK_HARDWARE(intel); | |||
| do_flush_locked(batch, used); | |||
| if (INTEL_DEBUG & DEBUG_SYNC) { | |||
| fprintf(stderr, "waiting for idle\n"); | |||
| @@ -117,7 +117,6 @@ intelEmitCopyBlit(struct intel_context *intel, | |||
| } while (pass < 2); | |||
| if (pass >= 2) { | |||
| LOCK_HARDWARE(intel); | |||
| dri_bo_map(dst_buffer, GL_TRUE); | |||
| dri_bo_map(src_buffer, GL_FALSE); | |||
| _mesa_copy_rect((GLubyte *)dst_buffer->virtual + dst_offset, | |||
| @@ -131,7 +130,6 @@ intelEmitCopyBlit(struct intel_context *intel, | |||
| dri_bo_unmap(src_buffer); | |||
| dri_bo_unmap(dst_buffer); | |||
| UNLOCK_HARDWARE(intel); | |||
| return GL_TRUE; | |||
| } | |||
| @@ -239,8 +237,6 @@ intelClearWithBlit(GLcontext *ctx, GLbitfield mask) | |||
| skipBuffers = BUFFER_BIT_STENCIL; | |||
| } | |||
| LOCK_HARDWARE(intel); | |||
| intel_get_cliprects(intel, &cliprects, &num_cliprects, &x_off, &y_off); | |||
| if (num_cliprects) { | |||
| GLint cx, cy, cw, ch; | |||
| @@ -412,8 +408,6 @@ intelClearWithBlit(GLcontext *ctx, GLbitfield mask) | |||
| } | |||
| } | |||
| } | |||
| UNLOCK_HARDWARE(intel); | |||
| } | |||
| GLboolean | |||
| @@ -611,6 +611,7 @@ intelInitContext(struct intel_context *intel, | |||
| intel->driScreen = sPriv; | |||
| intel->sarea = intelScreen->sarea; | |||
| intel->driContext = driContextPriv; | |||
| intel->driFd = sPriv->fd; | |||
| if (IS_965(intel->intelScreen->deviceID)) { | |||
| intel->gen = 4; | |||
| @@ -632,11 +633,6 @@ intelInitContext(struct intel_context *intel, | |||
| intel->is_g4x = GL_TRUE; | |||
| } | |||
| /* Dri stuff */ | |||
| intel->hHWContext = driContextPriv->hHWContext; | |||
| intel->driFd = sPriv->fd; | |||
| intel->driHwLock = sPriv->lock; | |||
| driParseConfigFiles(&intel->optionCache, &intelScreen->optionCache, | |||
| intel->driScreen->myNum, | |||
| (intel->gen >= 4) ? "i965" : "i915"); | |||
| @@ -1027,128 +1023,3 @@ intelMakeCurrent(__DRIcontext * driContextPriv, | |||
| return GL_TRUE; | |||
| } | |||
| static void | |||
| intelContendedLock(struct intel_context *intel, GLuint flags) | |||
| { | |||
| __DRIdrawable *dPriv = intel->driDrawable; | |||
| __DRIscreen *sPriv = intel->driScreen; | |||
| volatile drm_i915_sarea_t *sarea = intel->sarea; | |||
| int me = intel->hHWContext; | |||
| drmGetLock(intel->driFd, intel->hHWContext, flags); | |||
| if (INTEL_DEBUG & DEBUG_LOCK) | |||
| _mesa_printf("%s - got contended lock\n", __progname); | |||
| /* If the window moved, may need to set a new cliprect now. | |||
| * | |||
| * NOTE: This releases and regains the hw lock, so all state | |||
| * checking must be done *after* this call: | |||
| */ | |||
| if (dPriv) | |||
| DRI_VALIDATE_DRAWABLE_INFO(sPriv, dPriv); | |||
| if (sarea && sarea->ctxOwner != me) { | |||
| if (INTEL_DEBUG & DEBUG_BUFMGR) { | |||
| fprintf(stderr, "Lost Context: sarea->ctxOwner %x me %x\n", | |||
| sarea->ctxOwner, me); | |||
| } | |||
| sarea->ctxOwner = me; | |||
| } | |||
| /* Drawable changed? | |||
| */ | |||
| if (dPriv && intel->lastStamp != dPriv->lastStamp) { | |||
| intelWindowMoved(intel); | |||
| intel->lastStamp = dPriv->lastStamp; | |||
| } | |||
| } | |||
| _glthread_DECLARE_STATIC_MUTEX(lockMutex); | |||
| /* Lock the hardware and validate our state. | |||
| */ | |||
| void LOCK_HARDWARE( struct intel_context *intel ) | |||
| { | |||
| __DRIdrawable *dPriv = intel->driDrawable; | |||
| __DRIscreen *sPriv = intel->driScreen; | |||
| char __ret = 0; | |||
| struct intel_framebuffer *intel_fb = NULL; | |||
| struct intel_renderbuffer *intel_rb = NULL; | |||
| intel->locked++; | |||
| if (intel->locked >= 2) | |||
| return; | |||
| if (!sPriv->dri2.enabled) | |||
| _glthread_LOCK_MUTEX(lockMutex); | |||
| if (intel->driDrawable) { | |||
| intel_fb = intel->driDrawable->driverPrivate; | |||
| if (intel_fb) | |||
| intel_rb = | |||
| intel_get_renderbuffer(&intel_fb->Base, | |||
| intel_fb->Base._ColorDrawBufferIndexes[0]); | |||
| } | |||
| if (intel_rb && dPriv->vblFlags && | |||
| !(dPriv->vblFlags & VBLANK_FLAG_NO_IRQ) && | |||
| (intel_fb->vbl_waited - intel_rb->vbl_pending) > (1<<23)) { | |||
| drmVBlank vbl; | |||
| vbl.request.type = DRM_VBLANK_ABSOLUTE; | |||
| if ( dPriv->vblFlags & VBLANK_FLAG_SECONDARY ) { | |||
| vbl.request.type |= DRM_VBLANK_SECONDARY; | |||
| } | |||
| vbl.request.sequence = intel_rb->vbl_pending; | |||
| drmWaitVBlank(intel->driFd, &vbl); | |||
| intel_fb->vbl_waited = vbl.reply.sequence; | |||
| } | |||
| if (!sPriv->dri2.enabled) { | |||
| DRM_CAS(intel->driHwLock, intel->hHWContext, | |||
| (DRM_LOCK_HELD|intel->hHWContext), __ret); | |||
| if (__ret) | |||
| intelContendedLock( intel, 0 ); | |||
| } | |||
| if (INTEL_DEBUG & DEBUG_LOCK) | |||
| _mesa_printf("%s - locked\n", __progname); | |||
| } | |||
| /* Unlock the hardware using the global current context | |||
| */ | |||
| void UNLOCK_HARDWARE( struct intel_context *intel ) | |||
| { | |||
| __DRIscreen *sPriv = intel->driScreen; | |||
| intel->locked--; | |||
| if (intel->locked > 0) | |||
| return; | |||
| assert(intel->locked == 0); | |||
| if (!sPriv->dri2.enabled) { | |||
| DRM_UNLOCK(intel->driFd, intel->driHwLock, intel->hHWContext); | |||
| _glthread_UNLOCK_MUTEX(lockMutex); | |||
| } | |||
| if (INTEL_DEBUG & DEBUG_LOCK) | |||
| _mesa_printf("%s - unlocked\n", __progname); | |||
| /** | |||
| * Nothing should be left in batch outside of LOCK/UNLOCK which references | |||
| * cliprects. | |||
| */ | |||
| if (intel->batch->cliprect_mode == REFERENCES_CLIPRECTS) | |||
| intel_batchbuffer_flush(intel->batch); | |||
| } | |||
| @@ -295,8 +295,6 @@ struct intel_context | |||
| drm_clip_rect_t draw_rect; | |||
| drm_clip_rect_t scissor_rect; | |||
| drm_context_t hHWContext; | |||
| drmLock *driHwLock; | |||
| int driFd; | |||
| __DRIcontext *driContext; | |||
| @@ -320,11 +318,6 @@ struct intel_context | |||
| GLuint swap_missed_count; | |||
| }; | |||
| /* These are functions now: | |||
| */ | |||
| void LOCK_HARDWARE( struct intel_context *intel ); | |||
| void UNLOCK_HARDWARE( struct intel_context *intel ); | |||
| extern char *__progname; | |||
| @@ -443,8 +436,6 @@ extern GLboolean intelInitContext(struct intel_context *intel, | |||
| void *sharedContextPrivate, | |||
| struct dd_function_table *functions); | |||
| extern void intelGetLock(struct intel_context *intel, GLuint flags); | |||
| extern void intelFinish(GLcontext * ctx); | |||
| extern void intelFlush(GLcontext * ctx); | |||
| @@ -236,8 +236,6 @@ do_blit_bitmap( GLcontext *ctx, | |||
| if (!intel_check_blit_fragment_ops(ctx, tmpColor[3] == 1.0F)) | |||
| return GL_FALSE; | |||
| LOCK_HARDWARE(intel); | |||
| intel_get_cliprects(intel, &cliprects, &num_cliprects, &x_off, &y_off); | |||
| if (num_cliprects != 0) { | |||
| GLuint i; | |||
| @@ -325,7 +323,6 @@ do_blit_bitmap( GLcontext *ctx, | |||
| } | |||
| } | |||
| out: | |||
| UNLOCK_HARDWARE(intel); | |||
| if (INTEL_DEBUG & DEBUG_SYNC) | |||
| intel_batchbuffer_flush(intel->batch); | |||
| @@ -134,8 +134,6 @@ do_blit_copypixels(GLcontext * ctx, | |||
| intelFlush(&intel->ctx); | |||
| LOCK_HARDWARE(intel); | |||
| intel_get_cliprects(intel, &cliprects, &num_cliprects, &x_off, &y_off); | |||
| if (num_cliprects != 0) { | |||
| GLint delta_x; | |||
| @@ -214,13 +212,11 @@ do_blit_copypixels(GLcontext * ctx, | |||
| ctx->Color.ColorLogicOpEnabled ? | |||
| ctx->Color.LogicOp : GL_COPY)) { | |||
| DBG("%s: blit failure\n", __FUNCTION__); | |||
| UNLOCK_HARDWARE(intel); | |||
| return GL_FALSE; | |||
| } | |||
| } | |||
| } | |||
| out: | |||
| UNLOCK_HARDWARE(intel); | |||
| intel_check_front_buffer_rendering(intel); | |||
| @@ -105,15 +105,12 @@ do_texture_readpixels(GLcontext * ctx, | |||
| return GL_FALSE; | |||
| } | |||
| LOCK_HARDWARE(intel); | |||
| if (intel->driDrawable->numClipRects) { | |||
| intel->vtbl.install_meta_state(intel); | |||
| intel->vtbl.meta_no_depth_write(intel); | |||
| intel->vtbl.meta_no_stencil_write(intel); | |||
| if (!driClipRectToFramebuffer(ctx->ReadBuffer, &x, &y, &width, &height)) { | |||
| UNLOCK_HARDWARE(intel); | |||
| SET_STATE(i830, state); | |||
| if (INTEL_DEBUG & DEBUG_PIXEL) | |||
| fprintf(stderr, "%s: cliprect failed\n", __FUNCTION__); | |||
| @@ -150,7 +147,6 @@ do_texture_readpixels(GLcontext * ctx, | |||
| intel->vtbl.leave_meta_state(intel); | |||
| } | |||
| UNLOCK_HARDWARE(intel); | |||
| intel_region_wait_fence(ctx, dest_region); /* required by GL */ | |||
| return GL_TRUE; | |||
| @@ -224,7 +220,6 @@ do_blit_readpixels(GLcontext * ctx, | |||
| * fire with lock held to guarentee cliprects are correct. | |||
| */ | |||
| intelFlush(&intel->ctx); | |||
| LOCK_HARDWARE(intel); | |||
| if (intel->driReadDrawable->numClipRects) { | |||
| GLboolean all = (width * height * src->cpp == dst->Base.Size && | |||
| @@ -261,12 +256,10 @@ do_blit_readpixels(GLcontext * ctx, | |||
| rect.y2 - src_rect.y2, | |||
| rect.x2 - rect.x1, rect.y2 - rect.y1, | |||
| GL_COPY)) { | |||
| UNLOCK_HARDWARE(intel); | |||
| return GL_FALSE; | |||
| } | |||
| } | |||
| } | |||
| UNLOCK_HARDWARE(intel); | |||
| if (INTEL_DEBUG & DEBUG_PIXEL) | |||
| _mesa_printf("%s - DONE\n", __FUNCTION__); | |||
| @@ -362,14 +362,12 @@ intel_region_data(struct intel_context *intel, | |||
| intel_region_cow(intel, dst); | |||
| } | |||
| LOCK_HARDWARE(intel); | |||
| _mesa_copy_rect(intel_region_map(intel, dst) + dst_offset, | |||
| dst->cpp, | |||
| dst->pitch, | |||
| dstx, dsty, width, height, src, src_pitch, srcx, srcy); | |||
| intel_region_unmap(intel, dst); | |||
| UNLOCK_HARDWARE(intel); | |||
| } | |||
| /* Copy rectangular sub-regions. Need better logic about when to | |||
| @@ -485,7 +483,6 @@ intel_region_cow(struct intel_context *intel, struct intel_region *region) | |||
| /* Now blit from the texture buffer to the new buffer: | |||
| */ | |||
| LOCK_HARDWARE(intel); | |||
| ok = intelEmitCopyBlit(intel, | |||
| region->cpp, | |||
| region->pitch, pbo->buffer, 0, region->tiling, | |||
| @@ -494,7 +491,6 @@ intel_region_cow(struct intel_context *intel, struct intel_region *region) | |||
| region->pitch, region->height, | |||
| GL_COPY); | |||
| assert(ok); | |||
| UNLOCK_HARDWARE(intel); | |||
| } | |||
| dri_bo * | |||
| @@ -517,7 +517,6 @@ intelSpanRenderStart(GLcontext * ctx) | |||
| GLuint i; | |||
| intelFlush(&intel->ctx); | |||
| LOCK_HARDWARE(intel); | |||
| for (i = 0; i < ctx->Const.MaxTextureImageUnits; i++) { | |||
| if (ctx->Texture.Unit[i]._ReallyEnabled) { | |||
| @@ -553,8 +552,6 @@ intelSpanRenderFinish(GLcontext * ctx) | |||
| intel_map_unmap_framebuffer(intel, ctx->DrawBuffer, GL_FALSE); | |||
| if (ctx->ReadBuffer != ctx->DrawBuffer) | |||
| intel_map_unmap_framebuffer(intel, ctx->ReadBuffer, GL_FALSE); | |||
| UNLOCK_HARDWARE(intel); | |||
| } | |||
| @@ -110,7 +110,6 @@ do_copy_texsubimage(struct intel_context *intel, | |||
| } | |||
| /* intelFlush(ctx); */ | |||
| LOCK_HARDWARE(intel); | |||
| { | |||
| drm_intel_bo *dst_bo = intel_region_buffer(intel, | |||
| intelImage->mt->region, | |||
| @@ -132,7 +131,6 @@ do_copy_texsubimage(struct intel_context *intel, | |||
| /* Can't blit to tiled buffers with non-tile-aligned offset. */ | |||
| if (intelImage->mt->region->tiling == I915_TILING_Y) { | |||
| UNLOCK_HARDWARE(intel); | |||
| return GL_FALSE; | |||
| } | |||
| @@ -169,13 +167,10 @@ do_copy_texsubimage(struct intel_context *intel, | |||
| x, y, image_x + dstx, image_y + dsty, | |||
| width, height, | |||
| GL_COPY)) { | |||
| UNLOCK_HARDWARE(intel); | |||
| return GL_FALSE; | |||
| } | |||
| } | |||
| UNLOCK_HARDWARE(intel); | |||
| return GL_TRUE; | |||
| } | |||
| @@ -235,7 +235,6 @@ try_pbo_upload(struct intel_context *intel, | |||
| if (drm_intel_bo_references(intel->batch->buf, dst_buffer)) | |||
| intelFlush(&intel->ctx); | |||
| LOCK_HARDWARE(intel); | |||
| { | |||
| dri_bo *src_buffer = intel_bufferobj_buffer(intel, pbo, INTEL_READ); | |||
| @@ -245,11 +244,9 @@ try_pbo_upload(struct intel_context *intel, | |||
| dst_stride, dst_buffer, 0, GL_FALSE, | |||
| 0, 0, dst_x, dst_y, width, height, | |||
| GL_COPY)) { | |||
| UNLOCK_HARDWARE(intel); | |||
| return GL_FALSE; | |||
| } | |||
| } | |||
| UNLOCK_HARDWARE(intel); | |||
| return GL_TRUE; | |||
| } | |||
| @@ -469,8 +466,6 @@ intelTexImage(GLcontext * ctx, | |||
| pixels, unpack, "glTexImage"); | |||
| } | |||
| LOCK_HARDWARE(intel); | |||
| if (intelImage->mt) { | |||
| if (pixels != NULL) { | |||
| /* Flush any queued rendering with the texture before mapping. */ | |||
| @@ -551,8 +546,6 @@ intelTexImage(GLcontext * ctx, | |||
| intel_miptree_image_unmap(intel, intelImage->mt); | |||
| texImage->Data = NULL; | |||
| } | |||
| UNLOCK_HARDWARE(intel); | |||
| } | |||
| @@ -72,8 +72,6 @@ intelTexSubimage(GLcontext * ctx, | |||
| if (!pixels) | |||
| return; | |||
| LOCK_HARDWARE(intel); | |||
| /* Map buffer if necessary. Need to lock to prevent other contexts | |||
| * from uploading the buffer under us. | |||
| */ | |||
| @@ -129,8 +127,6 @@ intelTexSubimage(GLcontext * ctx, | |||
| intel_miptree_image_unmap(intel, intelImage->mt); | |||
| texImage->Data = NULL; | |||
| } | |||
| UNLOCK_HARDWARE(intel); | |||
| } | |||