Revert "i965: Delete pre-DRI2.3 viewport hacks."
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 25 Jul 2013 22:11:13 +0000 (15:11 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 25 Jul 2013 22:25:43 +0000 (15:25 -0700)
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: mesa-stable@lists.freedesktop.org
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/intel_context.c
src/mesa/drivers/dri/i965/intel_tex_image.c

index 86f9f716a2b4bce9a7f90e8c3a20d66d47e22c33..2ab150bca1a311cb4f7482df6e09abf78819da74 100644 (file)
@@ -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);
 };
 
 /*======================================================================
index 742bcc3543391a2f8f9c176667d03c7896aef122..2e15a55fc2530e706cd70fd36937ae10267789b5 100644 (file)
@@ -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;
index 9c5d234b12c2d127a121f27c6167d0ffa24e2240..4b551b7c5d030dbc7211cb56cc94669d490dda01 100644 (file)
@@ -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);