diff options
| -rw-r--r-- | src/mesa/drivers/dri/i915/intel_tris.c | 1 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/i965/brw_state_upload.c | 3 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/intel/intel_buffers.c | 21 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/intel/intel_buffers.h | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/intel/intel_span.c | 2 | 
5 files changed, 27 insertions, 2 deletions
| diff --git a/src/mesa/drivers/dri/i915/intel_tris.c b/src/mesa/drivers/dri/i915/intel_tris.c index c3cbba8404..bc527aae47 100644 --- a/src/mesa/drivers/dri/i915/intel_tris.c +++ b/src/mesa/drivers/dri/i915/intel_tris.c @@ -1088,6 +1088,7 @@ intelRenderStart(GLcontext * ctx)  {     struct intel_context *intel = intel_context(ctx); +   intel_check_front_buffer_rendering(intel);     intel->vtbl.render_start(intel_context(ctx));     intel->vtbl.emit_state(intel);  } diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c index ee447afa62..f4283bda1b 100644 --- a/src/mesa/drivers/dri/i965/brw_state_upload.c +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c @@ -34,6 +34,7 @@  #include "brw_context.h"  #include "brw_state.h"  #include "intel_batchbuffer.h" +#include "intel_buffers.h"  /* This is used to initialize brw->state.atoms[].  We could use this   * list directly except for a single atom, brw_constant_buffer, which @@ -324,6 +325,8 @@ void brw_validate_state( struct brw_context *brw )        }     } +   intel_check_front_buffer_rendering(intel); +     /* Make sure that the textures which are referenced by the current      * brw fragment program are actually present/valid.      * If this fails, we can experience GPU lock-ups. diff --git a/src/mesa/drivers/dri/intel/intel_buffers.c b/src/mesa/drivers/dri/intel/intel_buffers.c index 639ffa6437..6b12d484d8 100644 --- a/src/mesa/drivers/dri/intel/intel_buffers.c +++ b/src/mesa/drivers/dri/intel/intel_buffers.c @@ -133,6 +133,25 @@ intel_get_cliprects(struct intel_context *intel,  /** + * Check if we're about to draw into the front color buffer. + * If so, set the intel->front_buffer_dirty field to true. + */ +void +intel_check_front_buffer_rendering(struct intel_context *intel) +{ +   const struct gl_framebuffer *fb = intel->ctx.DrawBuffer; +   if (fb->Name == 0) { +      /* drawing to window system buffer */ +      if (fb->_NumColorDrawBuffers > 0) { +         if (fb->_ColorDrawBufferIndexes[0] == BUFFER_FRONT_LEFT) { +	    intel->front_buffer_dirty = GL_TRUE; +	 } +      } +   } +} + + +/**   * Update the hardware state for drawing into a window or framebuffer object.   *   * Called by glDrawBuffer, glBindFramebufferEXT, MakeCurrent, and other @@ -202,8 +221,6 @@ intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb)  	       intel_batchbuffer_flush(intel->batch);  	    intel->front_cliprects = GL_TRUE;  	    colorRegions[0] = intel_get_rb_region(fb, BUFFER_FRONT_LEFT); - -	    intel->front_buffer_dirty = GL_TRUE;  	 }  	 else {  	    if (!intel->constant_cliprect && intel->front_cliprects) diff --git a/src/mesa/drivers/dri/intel/intel_buffers.h b/src/mesa/drivers/dri/intel/intel_buffers.h index 6069d38e9e..d7800f2ca2 100644 --- a/src/mesa/drivers/dri/intel/intel_buffers.h +++ b/src/mesa/drivers/dri/intel/intel_buffers.h @@ -45,6 +45,8 @@ extern struct intel_region *intel_readbuf_region(struct intel_context *intel);  extern struct intel_region *intel_drawbuf_region(struct intel_context *intel); +extern void intel_check_front_buffer_rendering(struct intel_context *intel); +  extern void intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb);  extern void intelInitBufferFuncs(struct dd_function_table *functions); diff --git a/src/mesa/drivers/dri/intel/intel_span.c b/src/mesa/drivers/dri/intel/intel_span.c index 638e05f2ad..bab13e3665 100644 --- a/src/mesa/drivers/dri/intel/intel_span.c +++ b/src/mesa/drivers/dri/intel/intel_span.c @@ -501,6 +501,8 @@ intel_map_unmap_framebuffer(struct intel_context *intel,        else           intel_renderbuffer_unmap(intel, fb->_StencilBuffer->Wrapped);     } + +   intel_check_front_buffer_rendering(intel);  }  /** | 
