main: Refactor _mesa_update_framebuffer.
authorLaura Ekstrand <laura@jlekstrand.net>
Tue, 3 Feb 2015 19:03:01 +0000 (11:03 -0800)
committerFredrik Höglund <fredrik@kde.org>
Thu, 14 May 2015 13:48:14 +0000 (15:48 +0200)
_mesa_update_framebuffer now operates on arbitrary read and draw framebuffers.
This allows BlitNamedFramebuffer to update the state of its arbitrary read and
draw framebuffers.

Reviewed-by: Fredrik Höglund <fredrik@kde.org>
Signed-off-by: Fredrik Höglund <fredrik@kde.org>
src/mesa/drivers/dri/i915/i830_vtbl.c
src/mesa/drivers/dri/i915/i915_vtbl.c
src/mesa/drivers/dri/r200/r200_state.c
src/mesa/drivers/dri/radeon/radeon_common.c
src/mesa/drivers/dri/radeon/radeon_state.c
src/mesa/main/framebuffer.c
src/mesa/main/framebuffer.h
src/mesa/main/state.c

index 91da977aceecc65e0f41d6f599b254092de3a91d..4fff29ee88a05bfc67896a4dde1614526d5e9b16 100644 (file)
@@ -730,7 +730,7 @@ i830_update_draw_buffer(struct intel_context *intel)
     */
    if (ctx->NewState & _NEW_BUFFERS) {
       /* this updates the DrawBuffer->_NumColorDrawBuffers fields, etc */
-      _mesa_update_framebuffer(ctx);
+      _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
       /* this updates the DrawBuffer's Width/Height if it's a FBO */
       _mesa_update_draw_buffer_bounds(ctx);
    }
index 97bf81ed7594db027e34eb71a5dee652f33af9b1..02ff312c2e6d2f421a3142624000fb71d5203820 100644 (file)
@@ -732,7 +732,7 @@ i915_update_draw_buffer(struct intel_context *intel)
     */
    if (ctx->NewState & _NEW_BUFFERS) {
       /* this updates the DrawBuffer->_NumColorDrawBuffers fields, etc */
-      _mesa_update_framebuffer(ctx);
+      _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
       /* this updates the DrawBuffer's Width/Height if it's a FBO */
       _mesa_update_draw_buffer_bounds(ctx);
    }
index b0a6bd573b6221b1bf188a6a9e6d449e35a0245a..de5296d8e2fc22c1e347b20a64f1a647c63f1c38 100644 (file)
@@ -2215,7 +2215,7 @@ GLboolean r200ValidateState( struct gl_context *ctx )
    GLuint new_state = rmesa->radeon.NewGLState;
 
    if (new_state & _NEW_BUFFERS) {
-      _mesa_update_framebuffer(ctx);
+      _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
       /* this updates the DrawBuffer's Width/Height if it's a FBO */
       _mesa_update_draw_buffer_bounds(ctx);
 
index 0ca526d2a025820a88dc49a7526e4243412fdf21..12502d5f9a3bea108fa7b58f9ce814dc815acc02 100644 (file)
@@ -220,7 +220,7 @@ void radeon_draw_buffer(struct gl_context *ctx, struct gl_framebuffer *fb)
         */
        if (ctx->NewState & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL)) {
                /* this updates the DrawBuffer->_NumColorDrawBuffers fields, etc */
-               _mesa_update_framebuffer(ctx);
+               _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
                /* this updates the DrawBuffer's Width/Height if it's a FBO */
                _mesa_update_draw_buffer_bounds(ctx);
        }
index c45bb513dca4ef48fc0bc6b5ed69cb55bc9d1789..7bff1d46c05d98dbb4ac93eba964c3f423233c8b 100644 (file)
@@ -1994,7 +1994,7 @@ GLboolean radeonValidateState( struct gl_context *ctx )
    GLuint new_state = rmesa->radeon.NewGLState;
 
    if (new_state & _NEW_BUFFERS) {
-     _mesa_update_framebuffer(ctx);
+     _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
      /* this updates the DrawBuffer's Width/Height if it's a FBO */
      _mesa_update_draw_buffer_bounds(ctx);
      RADEON_STATECHANGE(rmesa, ctx);
index 4f7736a64d04c526a8456bcf9fd7443bd7df3020..74e5739e6fdcd554014c12cbe17e0da52410416c 100644 (file)
@@ -678,17 +678,14 @@ update_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
 
 
 /**
- * Update state related to the current draw/read framebuffers.
+ * Update state related to the draw/read framebuffers.
  */
 void
-_mesa_update_framebuffer(struct gl_context *ctx)
+_mesa_update_framebuffer(struct gl_context *ctx,
+                         struct gl_framebuffer *readFb,
+                         struct gl_framebuffer *drawFb)
 {
-   struct gl_framebuffer *drawFb;
-   struct gl_framebuffer *readFb;
-
    assert(ctx);
-   drawFb = ctx->DrawBuffer;
-   readFb = ctx->ReadBuffer;
 
    update_framebuffer(ctx, drawFb);
    if (readFb != drawFb)
index a4274216ec2205138d9d0be29a7f11d393b77f86..d3b7e584ca4728ef4c276a1b37c881b06237e297 100644 (file)
@@ -84,7 +84,9 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx,
                                struct gl_framebuffer *fb);
 
 extern void
-_mesa_update_framebuffer(struct gl_context *ctx);
+_mesa_update_framebuffer(struct gl_context *ctx,
+                         struct gl_framebuffer *readFb,
+                         struct gl_framebuffer *drawFb);
 
 extern GLboolean
 _mesa_source_buffer_exists(struct gl_context *ctx, GLenum format);
index 99db37bafd7eb6b76b1ff32ad19bea13d6299550..3688736cb79efbc1c19c94e736e5da54d67faaea 100644 (file)
@@ -389,7 +389,7 @@ _mesa_update_state_locked( struct gl_context *ctx )
       update_frontbit( ctx );
 
    if (new_state & _NEW_BUFFERS)
-      _mesa_update_framebuffer(ctx);
+      _mesa_update_framebuffer(ctx, ctx->ReadBuffer, ctx->DrawBuffer);
 
    if (new_state & (_NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT))
       _mesa_update_draw_buffer_bounds( ctx );