From 77e3db464f108531e5d4b3a7547aca234b5619d6 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 26 Dec 2013 12:03:44 +0800 Subject: ilo: add flags to texture slices 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 | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/gallium/drivers/ilo/ilo_resource.h b/src/gallium/drivers/ilo/ilo_resource.h index d23622af9f3..124581ab665 100644 --- a/src/gallium/drivers/ilo/ilo_resource.h +++ b/src/gallium/drivers/ilo/ilo_resource.h @@ -32,6 +32,16 @@ #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 */ -- cgit v1.2.3