i965: Setup framebuffer texture in meta_draw_region.
authorKristian Høgsberg <krh@redhat.com>
Tue, 26 Feb 2008 22:57:41 +0000 (17:57 -0500)
committerKristian Høgsberg <krh@redhat.com>
Tue, 26 Feb 2008 23:01:13 +0000 (18:01 -0500)
With DRI2 we there is no screen region until a drawable is bound to
the context.  Set up the framebuffer texture in meta_draw_region instead
which should also handle the case where the draw region changes as a
result of resizing a redirected window or resizing the screen.

src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_metaops.c
src/mesa/drivers/dri/i965/brw_tex.c

index de0b74a8cbb5249dbb8e7c09b38155351aed4610..2d32f1d6147f5f2dce933fa08d989caf28217798 100644 (file)
@@ -194,8 +194,6 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
 
    brw_ProgramCacheInit( ctx );
 
-   brw_FrameBufferTexInit( brw );
-
    return GL_TRUE;
 }
 
index a6c60aa45932aa325989e7b847108aa676140902..49e739b0ad8cd76c9b993b874e755089364d2ffc 100644 (file)
@@ -653,7 +653,8 @@ void brw_debug_batch(struct intel_context *intel);
  * brw_tex.c
  */
 void brwUpdateTextureState( struct intel_context *intel );
-void brw_FrameBufferTexInit( struct brw_context *brw );
+void brw_FrameBufferTexInit( struct brw_context *brw,
+                            struct intel_region *region );
 void brw_FrameBufferTexDestroy( struct brw_context *brw );
 void brw_validate_textures( struct brw_context *brw );
 
index 525748408d6f70a65b685cfe8104f4640bfd46ac..3f5df27b887353720d3cf4e53212ade1af45f626 100644 (file)
@@ -369,6 +369,11 @@ static void meta_draw_region( struct intel_context *intel,
    brw->state.draw_region = draw_region;
    brw->state.depth_region = depth_region;
 
+   if (intel->frame_buffer_texobj != NULL)
+      brw_FrameBufferTexDestroy(brw);
+
+   brw_FrameBufferTexInit(brw, draw_region);
+
    brw->state.dirty.mesa |= _NEW_BUFFERS;
 }
 
index 05f724cc234f2c1e254bf7ef8c61dec6ad1af7df..ef14b8e89f837096a9ca3d2032319110b2290c64 100644 (file)
 #include "brw_defines.h"
 
 
-void brw_FrameBufferTexInit( struct brw_context *brw )
+void brw_FrameBufferTexInit( struct brw_context *brw,
+                            struct intel_region *region )
 {
    struct intel_context *intel = &brw->intel;
    GLcontext *ctx = &intel->ctx;
-   struct intel_region *region = intel->front_region;
    struct gl_texture_object *obj;
    struct gl_texture_image *img;
    
@@ -74,8 +74,9 @@ void brw_FrameBufferTexInit( struct brw_context *brw )
 
 void brw_FrameBufferTexDestroy( struct brw_context *brw )
 {
-   brw->intel.ctx.Driver.DeleteTexture( &brw->intel.ctx,
-                                       brw->intel.frame_buffer_texobj );
+   if (brw->intel.frame_buffer_texobj != NULL)
+      brw->intel.ctx.Driver.DeleteTexture( &brw->intel.ctx,
+                                          brw->intel.frame_buffer_texobj );
 }
 
 /**