ilo: add flags to texture slices
authorChia-I Wu <olvaffe@gmail.com>
Thu, 26 Dec 2013 04:03:44 +0000 (12:03 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Wed, 8 Jan 2014 10:11:35 +0000 (18:11 +0800)
The flags are used to mark who (CPU, BLT, or RENDER) has accessed the resource
and how (READ or WRITE).

src/gallium/drivers/ilo/ilo_resource.h

index d23622a..124581a 100644 (file)
 
 #include "ilo_common.h"
 
+enum ilo_texture_flags {
+   ILO_TEXTURE_RENDER_WRITE   = 1 << 0,
+   ILO_TEXTURE_BLT_WRITE      = 1 << 1,
+   ILO_TEXTURE_CPU_WRITE      = 1 << 2,
+   ILO_TEXTURE_RENDER_READ    = 1 << 3,
+   ILO_TEXTURE_BLT_READ       = 1 << 4,
+   ILO_TEXTURE_CPU_READ       = 1 << 5,
+   ILO_TEXTURE_CLEAR          = 1 << 6,
+};
+
 struct ilo_screen;
 
 struct ilo_buffer {
@@ -48,6 +58,7 @@ struct ilo_buffer {
 struct ilo_texture_slice {
    /* 2D offset to the slice */
    unsigned x, y;
+   unsigned flags;
 };
 
 struct ilo_texture {
@@ -130,4 +141,22 @@ ilo_texture_get_slice_offset(const struct ilo_texture *tex,
                              unsigned level, unsigned slice,
                              unsigned *x_offset, unsigned *y_offset);
 
+static inline void
+ilo_texture_set_slice_flags(struct ilo_texture *tex, unsigned level,
+                            unsigned first_slice, unsigned num_slices,
+                            unsigned mask, unsigned value)
+{
+   struct ilo_texture_slice *slice =
+      ilo_texture_get_slice(tex, level, first_slice);
+
+   assert(first_slice + num_slices - 1 <
+         ((tex->base.target == PIPE_TEXTURE_3D) ?
+          u_minify(tex->base.depth0, level) : tex->base.array_size));
+
+   while (num_slices--) {
+      slice->flags = (slice->flags & ~mask) | (value & mask);
+      slice++;
+   }
+}
+
 #endif /* ILO_RESOURCE_H */