summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancisco Jerez <[email protected]>2010-02-08 19:27:58 +0100
committerKristian Høgsberg <[email protected]>2010-02-16 10:38:50 -0500
commitf845e4ff1bf4e7e2f804024157494a12eedec174 (patch)
tree07edb3160feed5280a27feba17a6c801c780637b
parent88a560691b904cc8eacda62d9bf80987d3c430c1 (diff)
st/dri2: Use event-driven buffer validation.
-rw-r--r--src/gallium/state_trackers/dri/dri_context.c6
-rw-r--r--src/gallium/state_trackers/dri/dri_drawable.c13
-rw-r--r--src/gallium/state_trackers/dri/dri_screen.c12
-rw-r--r--src/mesa/SConscript1
-rw-r--r--src/mesa/sources.mak1
-rw-r--r--src/mesa/state_tracker/st_atom.c7
-rw-r--r--src/mesa/state_tracker/st_cb_viewport.c50
-rw-r--r--src/mesa/state_tracker/st_cb_viewport.h29
-rw-r--r--src/mesa/state_tracker/st_context.c2
9 files changed, 33 insertions, 88 deletions
diff --git a/src/gallium/state_trackers/dri/dri_context.c b/src/gallium/state_trackers/dri/dri_context.c
index 5033c3c85b8..908cef454e9 100644
--- a/src/gallium/state_trackers/dri/dri_context.c
+++ b/src/gallium/state_trackers/dri/dri_context.c
@@ -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);
diff --git a/src/gallium/state_trackers/dri/dri_drawable.c b/src/gallium/state_trackers/dri/dri_drawable.c
index 97277c05072..4d7596a831a 100644
--- a/src/gallium/state_trackers/dri/dri_drawable.c
+++ b/src/gallium/state_trackers/dri/dri_drawable.c
@@ -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
diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c
index b36ea43db5f..77d640227fb 100644
--- a/src/gallium/state_trackers/dri/dri_screen.c
+++ b/src/gallium/state_trackers/dri/dri_screen.c
@@ -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
};
diff --git a/src/mesa/SConscript b/src/mesa/SConscript
index ea5bad2825a..0726fcb1a7e 100644
--- a/src/mesa/SConscript
+++ b/src/mesa/SConscript
@@ -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',
diff --git a/src/mesa/sources.mak b/src/mesa/sources.mak
index 12d4c2831d8..354331955ac 100644
--- a/src/mesa/sources.mak
+++ b/src/mesa/sources.mak
@@ -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 \
diff --git a/src/mesa/state_tracker/st_atom.c b/src/mesa/state_tracker/st_atom.c
index 73df44d1988..6a7ebff6cad 100644
--- a/src/mesa/state_tracker/st_atom.c
+++ b/src/mesa/state_tracker/st_atom.c
@@ -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
index b29191abef6..00000000000
--- a/src/mesa/state_tracker/st_cb_viewport.c
+++ /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
index 44948e53166..00000000000
--- a/src/mesa/state_tracker/st_cb_viewport.h
+++ /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);
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index 8f6a0c2423b..5b3987d73ae 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -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;
}