Mesa (mesa_7_7_branch): radeon/r300: don't flush cmdbuf if not necessary

Maciej Cencora osiris at kemper.freedesktop.org
Wed Nov 18 21:23:02 UTC 2009


Module: Mesa
Branch: mesa_7_7_branch
Commit: d3fa67c9b83b5736724ca57a0487857631e6c415
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3fa67c9b83b5736724ca57a0487857631e6c415

Author: Maciej Cencora <m.cencora at gmail.com>
Date:   Wed Nov 11 13:50:06 2009 +0100

radeon/r300: don't flush cmdbuf if not necessary

---

 src/mesa/drivers/dri/r300/r300_tex.c         |    6 +++++-
 src/mesa/drivers/dri/radeon/radeon_texture.c |   16 ++++++++++++++--
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/r300_tex.c b/src/mesa/drivers/dri/r300/r300_tex.c
index 27b78a9..427237d 100644
--- a/src/mesa/drivers/dri/r300/r300_tex.c
+++ b/src/mesa/drivers/dri/r300/r300_tex.c
@@ -270,7 +270,11 @@ static void r300DeleteTexture(GLcontext * ctx, struct gl_texture_object *texObj)
 
 	if (rmesa) {
 		int i;
-		radeon_firevertices(&rmesa->radeon);
+		struct radeon_bo *bo;
+		bo = !t->mt ? t->bo : t->mt->bo;
+		if (bo && radeon_bo_is_referenced_by_cs(bo, rmesa->radeon.cmdbuf.cs)) {
+			radeon_firevertices(&rmesa->radeon);
+		}
 
 		for(i = 0; i < R300_MAX_TEXTURE_UNITS; ++i)
 			if (rmesa->hw.textures[i] == t)
diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c b/src/mesa/drivers/dri/radeon/radeon_texture.c
index baa99b7..59bc8c3 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texture.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texture.c
@@ -534,7 +534,13 @@ static void radeon_teximage(
 	GLuint texelBytes;
 	GLuint face = radeon_face_for_target(target);
 
-	radeon_firevertices(rmesa);
+	{
+		struct radeon_bo *bo;
+		bo = !image->mt ? image->bo : image->mt->bo;
+		if (bo && radeon_bo_is_referenced_by_cs(bo, rmesa->cmdbuf.cs)) {
+			radeon_firevertices(rmesa);
+		}
+	}
 
 	t->validated = GL_FALSE;
 
@@ -731,7 +737,13 @@ static void radeon_texsubimage(GLcontext* ctx, int dims, GLenum target, int leve
 	radeonTexObj* t = radeon_tex_obj(texObj);
 	radeon_texture_image* image = get_radeon_texture_image(texImage);
 
-	radeon_firevertices(rmesa);
+	{
+		struct radeon_bo *bo;
+		bo = !image->mt ? image->bo : image->mt->bo;
+		if (bo && radeon_bo_is_referenced_by_cs(bo, rmesa->cmdbuf.cs)) {
+			radeon_firevertices(rmesa);
+		}
+	}
 
 	t->validated = GL_FALSE;
 	if (compressed) {




More information about the mesa-commit mailing list