vc4: Use the blit interface for updating shadow textures.
authorEric Anholt <eric@anholt.net>
Wed, 8 Apr 2015 20:11:01 +0000 (13:11 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 13 Apr 2015 17:39:24 +0000 (10:39 -0700)
This lets us plug in a better blit implementation and have it impact the
shadow update, too.

src/gallium/drivers/vc4/vc4_resource.c

index cbb334ff13a08cbcfb798c67892f4125d427960b..10e1d6c34ed6bf9710c1a055473e9b3bc92f3246 100644 (file)
@@ -651,20 +651,38 @@ vc4_update_shadow_baselevel_texture(struct pipe_context *pctx,
                 return;
 
         for (int i = 0; i <= shadow->base.b.last_level; i++) {
-                struct pipe_box box = {
-                        .x = 0,
-                        .y = 0,
-                        .z = 0,
-                        .width = u_minify(shadow->base.b.width0, i),
-                        .height = u_minify(shadow->base.b.height0, i),
-                        .depth = 1,
+                unsigned width = u_minify(shadow->base.b.width0, i);
+                unsigned height = u_minify(shadow->base.b.height0, i);
+                struct pipe_blit_info info = {
+                        .dst = {
+                                .resource = &shadow->base.b,
+                                .level = i,
+                                .box = {
+                                        .x = 0,
+                                        .y = 0,
+                                        .z = 0,
+                                        .width = width,
+                                        .height = height,
+                                        .depth = 1,
+                                },
+                                .format = shadow->base.b.format,
+                        },
+                        .src = {
+                                .resource = &orig->base.b,
+                                .level = view->u.tex.first_level + i,
+                                .box = {
+                                        .x = 0,
+                                        .y = 0,
+                                        .z = 0,
+                                        .width = width,
+                                        .height = height,
+                                        .depth = 1,
+                                },
+                                .format = orig->base.b.format,
+                        },
+                        .mask = ~0,
                 };
-
-                util_resource_copy_region(pctx,
-                                          &shadow->base.b, i, 0, 0, 0,
-                                          &orig->base.b,
-                                          view->u.tex.first_level + i,
-                                          &box);
+                pctx->blit(pctx, &info);
         }
 
         shadow->writes = orig->writes;