summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2011-11-11 15:55:30 +0000
committerDave Airlie <[email protected]>2011-12-05 11:31:15 +0000
commit4ed8a585840865550bb9acac38c5ef26670a1fb8 (patch)
tree91112a5ac82924f09bfe86002d93d504afe623e8
parent6d573c4dd7d90eb2c1748102924bdac1bb8fd50a (diff)
radeon: update flush according to glXMakeCurrent man page
This also copies code from intel driver to do this. Signed-off-by: Dave Airlie <[email protected]>
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_common_context.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.c b/src/mesa/drivers/dri/radeon/radeon_common_context.c
index bb0168e6cd9..ceaefdad91c 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common_context.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common_context.c
@@ -38,6 +38,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "drivers/common/meta.h"
#include "main/context.h"
#include "main/framebuffer.h"
+#include "main/fbobject.h"
#include "main/renderbuffer.h"
#include "main/state.h"
#include "main/simple_list.h"
@@ -564,8 +565,22 @@ GLboolean radeonMakeCurrent(__DRIcontext * driContextPriv,
__DRIdrawable * driReadPriv)
{
radeonContextPtr radeon;
+ GET_CURRENT_CONTEXT(curCtx);
struct gl_framebuffer *drfb, *readfb;
+ if (driContextPriv)
+ radeon = (radeonContextPtr)driContextPriv->driverPrivate;
+ else
+ radeon = NULL;
+ /* According to the glXMakeCurrent() man page: "Pending commands to
+ * the previous context, if any, are flushed before it is released."
+ * But only flush if we're actually changing contexts.
+ */
+
+ if ((radeonContextPtr)curCtx && (radeonContextPtr)curCtx != radeon) {
+ _mesa_flush(curCtx);
+ }
+
if (!driContextPriv) {
if (RADEON_DEBUG & RADEON_DRI)
fprintf(stderr, "%s ctx is null\n", __FUNCTION__);
@@ -573,8 +588,6 @@ GLboolean radeonMakeCurrent(__DRIcontext * driContextPriv,
return GL_TRUE;
}
- radeon = (radeonContextPtr) driContextPriv->driverPrivate;
-
if(driDrawPriv == NULL && driReadPriv == NULL) {
drfb = _mesa_create_framebuffer(&radeon->glCtx->Visual);
readfb = drfb;