ilo: set ILO_TEXTURE_CPU_WRITE for imported textures
authorChia-I Wu <olvaffe@gmail.com>
Tue, 14 Jan 2014 15:35:43 +0000 (23:35 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Sat, 22 Feb 2014 14:45:12 +0000 (22:45 +0800)
Assume the bo has been written by another process, which will trigger a HiZ
resolve.

src/gallium/drivers/ilo/ilo_resource.c

index f9a53318613af50e3eaae9c24b80e68bef63a3e7..f6d3f747407e80ca320717ae82c76be87c5753e9 100644 (file)
@@ -1133,6 +1133,7 @@ tex_create_hiz(struct ilo_texture *tex, const struct tex_layout *layout)
     */
    for (lv = 0; lv <= templ->last_level; lv++) {
       unsigned align_w = 8, align_h = 4;
+      unsigned flags = 0;
 
       switch (templ->nr_samples) {
       case 0:
@@ -1154,11 +1155,17 @@ tex_create_hiz(struct ilo_texture *tex, const struct tex_layout *layout)
 
       if (u_minify(templ->width0, lv) % align_w == 0 &&
           u_minify(templ->height0, lv) % align_h == 0) {
+         flags |= ILO_TEXTURE_HIZ;
+
+         /* this will trigger a HiZ resolve */
+         if (tex->imported)
+            flags |= ILO_TEXTURE_CPU_WRITE;
+      }
+
+      if (flags) {
          const unsigned num_slices = (templ->target == PIPE_TEXTURE_3D) ?
             u_minify(templ->depth0, lv) : templ->array_size;
-
-         ilo_texture_set_slice_flags(tex, lv, 0, num_slices,
-               ILO_TEXTURE_HIZ, ILO_TEXTURE_HIZ);
+         ilo_texture_set_slice_flags(tex, lv, 0, num_slices, flags, flags);
       }
    }