From: Ian Romanick <ian.d.roman...@intel.com>

Signed-off-by: Ian Romanick <ian.d.roman...@intel.com>
---
 src/mesa/drivers/dri/radeon/radeon_common.c        | 37 ++++++++--------------
 .../drivers/dri/radeon/radeon_common_context.c     | 10 +++---
 .../drivers/dri/radeon/radeon_common_context.h     | 17 ----------
 3 files changed, 18 insertions(+), 46 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c 
b/src/mesa/drivers/dri/radeon/radeon_common.c
index 1ba61c8..e786f73 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common.c
@@ -324,22 +324,17 @@ void radeonDrawBuffer( struct gl_context *ctx, GLenum 
mode )
                fprintf(stderr, "%s %s\n", __func__,
                        _mesa_enum_to_string( mode ));
 
-       if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) {
+       if (_mesa_is_front_buffer_drawing(ctx->DrawBuffer)) {
                radeonContextPtr radeon = RADEON_CONTEXT(ctx);
 
-               const GLboolean was_front_buffer_rendering =
-                       radeon->is_front_buffer_rendering;
-
-               radeon->is_front_buffer_rendering = (mode == GL_FRONT_LEFT) ||
-                                            (mode == GL_FRONT);
-
-      /* If we weren't front-buffer rendering before but we are now, make sure
-       * that the front-buffer has actually been allocated.
-       */
-               if (!was_front_buffer_rendering && 
radeon->is_front_buffer_rendering) {
-                       radeon_update_renderbuffers(radeon->driContext,
-                               radeon->driContext->driDrawablePriv, GL_FALSE);
-      }
+               /* If we might be front-buffer rendering on this buffer for
+                * the first time, invalidate our DRI drawable so we'll ask
+                * for new buffers (including the fake front) before we start
+                * rendering again.
+                */
+               radeon_update_renderbuffers(radeon->driContext,
+                                           radeon->driContext->driDrawablePriv,
+                                           GL_FALSE);
        }
 
        radeon_draw_buffer(ctx, ctx->DrawBuffer);
@@ -347,16 +342,10 @@ void radeonDrawBuffer( struct gl_context *ctx, GLenum 
mode )
 
 void radeonReadBuffer( struct gl_context *ctx, GLenum mode )
 {
-       if (ctx->DrawBuffer && _mesa_is_winsys_fbo(ctx->DrawBuffer)) {
+       if (_mesa_is_front_buffer_reading(ctx->ReadBuffer)) {
                struct radeon_context *const rmesa = RADEON_CONTEXT(ctx);
-               const GLboolean was_front_buffer_reading = 
rmesa->is_front_buffer_reading;
-               rmesa->is_front_buffer_reading = (mode == GL_FRONT_LEFT)
-                                       || (mode == GL_FRONT);
-
-               if (!was_front_buffer_reading && 
rmesa->is_front_buffer_reading) {
-                       radeon_update_renderbuffers(rmesa->driContext,
-                                                   
rmesa->driContext->driReadablePriv, GL_FALSE);
-               }
+               radeon_update_renderbuffers(rmesa->driContext,
+                                           rmesa->driContext->driReadablePriv, 
GL_FALSE);
        }
        /* nothing, until we implement h/w glRead/CopyPixels or CopyTexImage */
        if (ctx->ReadBuffer == ctx->DrawBuffer) {
@@ -382,7 +371,7 @@ void radeon_viewport(struct gl_context *ctx)
        void (*old_viewport)(struct gl_context *ctx);
 
        if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) {
-               if (radeon->is_front_buffer_rendering) {
+               if (_mesa_is_front_buffer_drawing(ctx->DrawBuffer)) {
                        ctx->Driver.Flush(ctx);
                }
                radeon_update_renderbuffers(driContext, 
driContext->driDrawablePriv, GL_FALSE);
diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.c 
b/src/mesa/drivers/dri/radeon/radeon_common_context.c
index 4660d98..4d993f7 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common_context.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.c
@@ -352,7 +352,7 @@ void radeon_prepare_render(radeonContextPtr radeon)
      * that will happen next will probably dirty the front buffer.  So
      * mark it as dirty here.
      */
-    if (radeon->is_front_buffer_rendering)
+    if (_mesa_is_front_buffer_drawing(radeon->glCtx.DrawBuffer))
        radeon->front_buffer_dirty = GL_TRUE;
 }
 
@@ -389,10 +389,10 @@ radeon_update_renderbuffers(__DRIcontext *context, 
__DRIdrawable *drawable,
                struct radeon_renderbuffer *stencil_rb;
 
                i = 0;
-               if ((front_only || radeon->is_front_buffer_rendering ||
-                    radeon->is_front_buffer_reading ||
-                    !draw->color_rb[1])
-                   && draw->color_rb[0]) {
+                if ((front_only || _mesa_is_front_buffer_drawing(&draw->base) 
||
+                     _mesa_is_front_buffer_reading(&draw->base) ||
+                     !draw->color_rb[1])
+                    && draw->color_rb[0]) {
                        attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
                        attachments[i++] = 
radeon_bits_per_pixel(draw->color_rb[0]);
                }
diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.h 
b/src/mesa/drivers/dri/radeon/radeon_common_context.h
index d142a87..6008a1e 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common_context.h
+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.h
@@ -427,23 +427,6 @@ struct radeon_context {
     */
    GLboolean front_buffer_dirty;
 
-   /**
-    * Track whether front-buffer rendering is currently enabled
-    *
-    * A separate flag is used to track this in order to support MRT more
-    * easily.
-    */
-   GLboolean is_front_buffer_rendering;
-
-   /**
-    * Track whether front-buffer is the current read target.
-    *
-    * This is closely associated with is_front_buffer_rendering, but may
-    * be set separately.  The DRI2 fake front buffer must be referenced
-    * either way.
-    */
-   GLboolean is_front_buffer_reading;
-
    struct {
        struct radeon_query_object *current;
        struct radeon_state_atom queryobj;
-- 
2.1.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to