st/dri2: Use event-driven buffer validation.
authorFrancisco Jerez <currojerez@riseup.net>
Mon, 8 Feb 2010 18:27:58 +0000 (19:27 +0100)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 16 Feb 2010 15:38:50 +0000 (10:38 -0500)
src/gallium/state_trackers/dri/dri_context.c
src/gallium/state_trackers/dri/dri_drawable.c
src/gallium/state_trackers/dri/dri_screen.c
src/mesa/SConscript
src/mesa/sources.mak
src/mesa/state_tracker/st_atom.c
src/mesa/state_tracker/st_cb_viewport.c [deleted file]
src/mesa/state_tracker/st_cb_viewport.h [deleted file]
src/mesa/state_tracker/st_context.c

index 5033c3c85b8762447d332f0265b94895879dc8d7..908cef454e9b70424872496464eaff24373bf738 100644 (file)
@@ -166,10 +166,8 @@ dri_make_current(__DRIcontext * cPriv,
       if (__dri1_api_hooks) {
         dri1_update_drawables(ctx, draw, read);
       } else {
-        if (driDrawPriv)
-           dri_get_buffers(driDrawPriv);
-        if (driDrawPriv != driReadPriv && driReadPriv)
-           dri_get_buffers(driReadPriv);
+        dri_update_buffer(ctx->pipe->screen,
+                          ctx->pipe->priv);
       }
    } else {
       st_make_current(NULL, NULL, NULL);
index 97277c05072dc8145af38530ffac7a15f407bf33..4d7596a831abd92e143e7d0f4af447dea07fad48 100644 (file)
@@ -284,7 +284,20 @@ dri_update_buffer(struct pipe_screen *screen, void *context_private)
 {
    struct dri_context *ctx = (struct dri_context *)context_private;
 
+   if (ctx->d_stamp == *ctx->dPriv->pStamp &&
+       ctx->r_stamp == *ctx->rPriv->pStamp)
+      return;
+
+   ctx->d_stamp = *ctx->dPriv->pStamp;
+   ctx->r_stamp = *ctx->rPriv->pStamp;
+
+   st_flush(ctx->st, PIPE_FLUSH_RENDER_CACHE, NULL);
+
+   /* Ask the X server for new renderbuffers. */
    dri_get_buffers(ctx->dPriv);
+   if (ctx->dPriv != ctx->rPriv)
+      dri_get_buffers(ctx->rPriv);
+
 }
 
 void
index b36ea43db5faf9ca35bfe87d1a3e1d8da5a45407..77d640227fb6cb7992b161cf2d66fb2ee098ab23 100644 (file)
@@ -61,6 +61,17 @@ static const __DRItexBufferExtension dri2TexBufferExtension = {
    dri2_set_tex_buffer2,
 };
 
+static void
+dri2_flush_drawable(__DRIdrawable *draw)
+{
+}
+
+static const __DRI2flushExtension dri2FlushExtension = {
+    { __DRI2_FLUSH, __DRI2_FLUSH_VERSION },
+    dri2_flush_drawable,
+    dri2InvalidateDrawable,
+};
+
    static const __DRIextension *dri_screen_extensions[] = {
       &driReadDrawableExtension,
       &driCopySubBufferExtension.base,
@@ -68,6 +79,7 @@ static const __DRItexBufferExtension dri2TexBufferExtension = {
       &driFrameTrackingExtension.base,
       &driMediaStreamCounterExtension.base,
       &dri2TexBufferExtension.base,
+      &dri2FlushExtension.base,
       NULL
    };
 
index ea5bad2825a040d7ae720bc4737c50dff92a47a4..0726fcb1a7e84d32033b0157476e09bf956cb5f5 100644 (file)
@@ -174,7 +174,6 @@ if env['platform'] != 'winddk':
                'state_tracker/st_cb_readpixels.c',
                'state_tracker/st_cb_strings.c',
                'state_tracker/st_cb_texture.c',
-               'state_tracker/st_cb_viewport.c',
                'state_tracker/st_context.c',
                'state_tracker/st_debug.c',
                'state_tracker/st_draw.c',
index 12d4c2831d864512002d2008bdc1dbf16376d6ad..354331955ac2adc3bd947bf136669e6b23c772f1 100644 (file)
@@ -204,7 +204,6 @@ STATETRACKER_SOURCES = \
        state_tracker/st_cb_readpixels.c \
        state_tracker/st_cb_strings.c \
        state_tracker/st_cb_texture.c \
-       state_tracker/st_cb_viewport.c \
        state_tracker/st_context.c \
        state_tracker/st_debug.c \
        state_tracker/st_draw.c \
index 73df44d1988ef8cf6e94fde0019193b700fecdbd..6a7ebff6cad805100ab7b43dc5b146860e0ca20a 100644 (file)
@@ -35,7 +35,8 @@
 #include "st_cb_bitmap.h"
 #include "st_program.h"
 
-       
+#include "pipe/p_context.h"
+
 
 /**
  * This is used to initialize st->atoms[].
@@ -135,6 +136,10 @@ void st_validate_state( struct st_context *st )
 
    check_program_state( st );
 
+   if (st->pipe->screen->update_buffer)
+      st->pipe->screen->update_buffer(st->pipe->screen,
+                                     st->pipe->priv);
+
    if (state->st == 0)
       return;
 
diff --git a/src/mesa/state_tracker/st_cb_viewport.c b/src/mesa/state_tracker/st_cb_viewport.c
deleted file mode 100644 (file)
index b29191a..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2009 VMware, Inc.
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-#include "main/glheader.h"
-#include "st_context.h"
-#include "st_cb_viewport.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_state.h"
-#include "pipe/p_defines.h"
-
-
-static void st_viewport(GLcontext * ctx, GLint x, GLint y,
-                        GLsizei width, GLsizei height)
-{
-   struct st_context *st = ctx->st;
-
-   if (st->pipe->screen && st->pipe->screen->update_buffer)
-      st->pipe->screen->update_buffer( st->pipe->screen,
-                                       st->pipe->priv );
-}
-
-void st_init_viewport_functions(struct dd_function_table *functions)
-{
-   functions->Viewport = st_viewport;
-}
diff --git a/src/mesa/state_tracker/st_cb_viewport.h b/src/mesa/state_tracker/st_cb_viewport.h
deleted file mode 100644 (file)
index 44948e5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2009 VMware, Inc.
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
-extern void
-st_init_viewport_functions(struct dd_function_table *functions);
index 8f6a0c2423b1fea315b77bec12a12d1090a1e456..5b3987d73aeb68f7e637f8597fecbc1b7ac9d010 100644 (file)
@@ -56,7 +56,6 @@
 #include "st_cb_texture.h"
 #include "st_cb_flush.h"
 #include "st_cb_strings.h"
-#include "st_cb_viewport.h"
 #include "st_atom.h"
 #include "st_draw.h"
 #include "st_extensions.h"
@@ -343,7 +342,6 @@ void st_init_driver_functions(struct dd_function_table *functions)
    st_init_texture_functions(functions);
    st_init_flush_functions(functions);
    st_init_string_functions(functions);
-   st_init_viewport_functions(functions);
 
    functions->UpdateState = st_invalidate_state;
 }