radeon/r300: don't flush cmdbuf if not necessary
authorMaciej Cencora <m.cencora@gmail.com>
Wed, 11 Nov 2009 12:50:06 +0000 (13:50 +0100)
committerMaciej Cencora <m.cencora@gmail.com>
Sat, 14 Nov 2009 13:43:10 +0000 (14:43 +0100)
src/mesa/drivers/dri/r300/r300_tex.c
src/mesa/drivers/dri/radeon/radeon_texture.c

index 27b78a9..427237d 100644 (file)
@@ -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)
index baa99b7..59bc8c3 100644 (file)
@@ -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) {