diff options
author | Chia-I Wu <[email protected]> | 2013-12-26 12:03:44 +0800 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2014-01-08 18:11:35 +0800 |
commit | 77e3db464f108531e5d4b3a7547aca234b5619d6 (patch) | |
tree | aa3b048b426123be95e357b7362b6cf2c0a1ce07 /src | |
parent | 846f70a6ef8be5297eb6f4cf9cf8dc36ce22b818 (diff) |
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).
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/ilo/ilo_resource.h | 29 |
1 files changed, 29 insertions, 0 deletions
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 */ |