mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 07:18:17 +02:00
intel: Drop LOCK/UNLOCK_HARDWARE()
This commit is contained in:
parent
3566bc7584
commit
01dc463e5d
13 changed files with 3 additions and 204 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue