diff options
author | Kenneth Graunke <[email protected]> | 2013-07-25 15:11:13 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2013-07-25 15:25:43 -0700 |
commit | 0e9549e2bd57168086421468cbf1db0821c36730 (patch) | |
tree | 9ad57fd702f4c8bec818d9bbfe490e848fd0b258 | |
parent | a8c8c5f8d228db7b85e981fc9abb3940debd599c (diff) |
Revert "i965: Delete pre-DRI2.3 viewport hacks."
This reverts commit c9db037dc999eadbcaa8816c814e6ec1776d1a40.
Eric believes that the viewport hacks are still necessary for EGL;
invalidate events aren't hooked up properly.
This commit caused a regression where EFL applications wouldn't show
anything other than window decorations; GLBenchmark also showed issues.
The revert had conflicts due to the intel_context/brw_context merge.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=66606
Cc: [email protected]
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_context.c | 21 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_tex_image.c | 3 |
3 files changed, 25 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 86f9f716a2b..2ab150bca1a 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -1239,6 +1239,8 @@ struct brw_context __DRIcontext *driContext; struct intel_screen *intelScreen; + void (*saved_viewport)(struct gl_context *ctx, + GLint x, GLint y, GLsizei width, GLsizei height); }; /*====================================================================== diff --git a/src/mesa/drivers/dri/i965/intel_context.c b/src/mesa/drivers/dri/i965/intel_context.c index 742bcc35433..2e15a55fc25 100644 --- a/src/mesa/drivers/dri/i965/intel_context.c +++ b/src/mesa/drivers/dri/i965/intel_context.c @@ -288,6 +288,21 @@ intel_prepare_render(struct brw_context *brw) } } +static void +intel_viewport(struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h) +{ + struct brw_context *brw = brw_context(ctx); + __DRIcontext *driContext = brw->driContext; + + if (brw->saved_viewport) + brw->saved_viewport(ctx, x, y, w, h); + + if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) { + dri2InvalidateDrawable(driContext->driDrawablePriv); + dri2InvalidateDrawable(driContext->driReadablePriv); + } +} + static const struct dri_debug_control debug_control[] = { { "tex", DEBUG_TEXTURE}, { "state", DEBUG_STATE}, @@ -454,6 +469,12 @@ intelInitContext(struct brw_context *brw, dri_ctx_error)) return false; + /* Can't rely on invalidate events, fall back to glViewport hack */ + if (!driContextPriv->driScreenPriv->dri2.useInvalidate) { + brw->saved_viewport = functions->Viewport; + functions->Viewport = intel_viewport; + } + if (mesaVis == NULL) { memset(&visual, 0, sizeof visual); mesaVis = &visual; diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c index 9c5d234b12c..4b551b7c5d0 100644 --- a/src/mesa/drivers/dri/i965/intel_tex_image.c +++ b/src/mesa/drivers/dri/i965/intel_tex_image.c @@ -307,7 +307,8 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, if (!intelObj) return; - if (dPriv->lastStamp != dPriv->dri2.stamp) + if (dPriv->lastStamp != dPriv->dri2.stamp || + !pDRICtx->driScreenPriv->dri2.useInvalidate) intel_update_renderbuffers(pDRICtx, dPriv); rb = intel_get_renderbuffer(fb, BUFFER_FRONT_LEFT); |