Merge commit 'origin/master' into radeon-rewrite
authorJerome Glisse <glisse@freedesktop.org>
Sun, 10 May 2009 14:57:22 +0000 (16:57 +0200)
committerJerome Glisse <glisse@freedesktop.org>
Sun, 10 May 2009 14:57:22 +0000 (16:57 +0200)
Conflicts:
src/mesa/drivers/dri/r200/r200_state.c
src/mesa/drivers/dri/r300/r300_context.h
src/mesa/drivers/dri/r300/r300_fragprog.c
src/mesa/drivers/dri/r300/r300_state.c
src/mesa/drivers/dri/r300/r300_texmem.c
src/mesa/drivers/dri/r300/r300_texstate.c
src/mesa/drivers/dri/r300/r500_fragprog.c
src/mesa/drivers/dri/radeon/radeon_screen.c
src/mesa/drivers/dri/radeon/radeon_state.c

1  2 
configure.ac
src/mesa/drivers/dri/r200/r200_state.c
src/mesa/drivers/dri/r300/r300_state.c

diff --cc configure.ac
Simple merge
index ebf389efe26fc6091801b67af2b586aded1b1aab,81ee1ed022c72d1b317e68667c5b58227ce6755b..a06ea17e7995d0da63b8e2a7c1375959052d5c39
@@@ -2270,66 -2432,61 +2270,66 @@@ static void update_texturematrix( GLcon
     }
  }
  
 -
 -
 -/**
 - * Tell the card where to render (offset, pitch).
 - * Effected by glDrawBuffer, etc
 - */
 -void
 -r200UpdateDrawBuffer(GLcontext *ctx)
 +static GLboolean r200ValidateBuffers(GLcontext *ctx)
  {
     r200ContextPtr rmesa = R200_CONTEXT(ctx);
 -   struct gl_framebuffer *fb = ctx->DrawBuffer;
 -   driRenderbuffer *drb;
 +   struct radeon_renderbuffer *rrb;
 +   int i;
  
 -   if (fb->_ColorDrawBufferIndexes[0] == BUFFER_FRONT_LEFT) {
 -      /* draw to front */
 -      drb = (driRenderbuffer *) fb->Attachment[BUFFER_FRONT_LEFT].Renderbuffer;
 -   }
 -   else if (fb->_ColorDrawBufferIndexes[0] == BUFFER_BACK_LEFT) {
 -      /* draw to back */
 -      drb = (driRenderbuffer *) fb->Attachment[BUFFER_BACK_LEFT].Renderbuffer;
 -   }
 -   else {
 -      /* drawing to multiple buffers, or none */
 -      return;
 +   radeon_validate_reset_bos(&rmesa->radeon);
 +   
 +   rrb = radeon_get_colorbuffer(&rmesa->radeon);
 +   /* color buffer */
 +   if (rrb && rrb->bo) {
 +     radeon_validate_bo(&rmesa->radeon, rrb->bo,
 +                      0, RADEON_GEM_DOMAIN_VRAM);
     }
  
 -   assert(drb);
 -   assert(drb->flippedPitch);
 +   /* depth buffer */
 +   rrb = radeon_get_depthbuffer(&rmesa->radeon);
 +   /* color buffer */
 +   if (rrb && rrb->bo) {
 +     radeon_validate_bo(&rmesa->radeon, rrb->bo,
 +                      0, RADEON_GEM_DOMAIN_VRAM);
 +   }
  
 -   R200_STATECHANGE( rmesa, ctx );
 +   for (i = 0; i < ctx->Const.MaxTextureImageUnits; ++i) {
 +      radeonTexObj *t;
 +      
 +      if (!ctx->Texture.Unit[i]._ReallyEnabled)
 +       continue;
  
 -   /* Note: we used the (possibly) page-flipped values */
 -   rmesa->hw.ctx.cmd[CTX_RB3D_COLOROFFSET]
 -     = ((drb->flippedOffset + rmesa->r200Screen->fbLocation)
 -      & R200_COLOROFFSET_MASK);
 -   rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] = drb->flippedPitch;
 -   if (rmesa->sarea->tiling_enabled) {
 -      rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |= R200_COLOR_TILE_ENABLE;
 +      t = radeon_tex_obj(ctx->Texture.Unit[i]._Current);
 +      if (t->image_override && t->bo)
 +      radeon_validate_bo(&rmesa->radeon, t->bo,
 +                         RADEON_GEM_DOMAIN_GTT | RADEON_GEM_DOMAIN_VRAM, 0);
 +      else if (t->mt->bo)
 +      radeon_validate_bo(&rmesa->radeon, t->mt->bo,
 +                         RADEON_GEM_DOMAIN_GTT | RADEON_GEM_DOMAIN_VRAM, 0);
     }
 -}
  
 +   if (rmesa->radeon.dma.current)
 +      radeon_validate_bo(&rmesa->radeon, rmesa->radeon.dma.current, RADEON_GEM_DOMAIN_GTT, 0);
  
 +   return radeon_revalidate_bos(ctx);
 +}
  
 -void r200ValidateState( GLcontext *ctx )
 +GLboolean r200ValidateState( GLcontext *ctx )
  {
     r200ContextPtr rmesa = R200_CONTEXT(ctx);
 -   GLuint new_state = rmesa->NewGLState;
 +   GLuint new_state = rmesa->radeon.NewGLState;
  
 -   if (new_state & _NEW_BUFFERS) {
 -     r200UpdateDrawBuffer(ctx);
 +   if (new_state & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL)) {
 +      _mesa_update_framebuffer(ctx);
 +      /* this updates the DrawBuffer's Width/Height if it's a FBO */
 +      _mesa_update_draw_buffer_bounds(ctx);
 +      
 +      R200_STATECHANGE(rmesa, ctx);
     }
  
-    if (new_state & (_NEW_TEXTURE | _NEW_PROGRAM)) {
+    if (new_state & (_NEW_TEXTURE | _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS)) {
        r200UpdateTextureState( ctx );
 -      new_state |= rmesa->NewGLState; /* may add TEXTURE_MATRIX */
 +      new_state |= rmesa->radeon.NewGLState; /* may add TEXTURE_MATRIX */
        r200UpdateLocalViewer( ctx );
     }