Browse Source

intel: Drop LOCK/UNLOCK_HARDWARE()

tags/7.8-rc1
Kristian Høgsberg 16 years ago
parent
commit
01dc463e5d

+ 0
- 4
src/mesa/drivers/dri/i965/brw_draw.c View File

@@ -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);


+ 2
- 18
src/mesa/drivers/dri/intel/intel_batchbuffer.c View File

@@ -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");

+ 0
- 6
src/mesa/drivers/dri/intel/intel_blit.c View File

@@ -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

+ 1
- 130
src/mesa/drivers/dri/intel/intel_context.c View File

@@ -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);
}


+ 0
- 9
src/mesa/drivers/dri/intel/intel_context.h View File

@@ -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);


+ 0
- 3
src/mesa/drivers/dri/intel/intel_pixel_bitmap.c View File

@@ -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);

+ 0
- 4
src/mesa/drivers/dri/intel/intel_pixel_copy.c View File

@@ -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);


+ 0
- 7
src/mesa/drivers/dri/intel/intel_pixel_read.c View File

@@ -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__);

+ 0
- 4
src/mesa/drivers/dri/intel/intel_regions.c View File

@@ -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 *

+ 0
- 3
src/mesa/drivers/dri/intel/intel_span.c View File

@@ -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);
}



+ 0
- 5
src/mesa/drivers/dri/intel/intel_tex_copy.c View File

@@ -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;
}


+ 0
- 7
src/mesa/drivers/dri/intel/intel_tex_image.c View File

@@ -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);
}



+ 0
- 4
src/mesa/drivers/dri/intel/intel_tex_subimage.c View File

@@ -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);
}



Loading…
Cancel
Save