summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChia-I Wu <[email protected]>2013-12-26 12:03:44 +0800
committerChia-I Wu <[email protected]>2014-01-08 18:11:35 +0800
commit77e3db464f108531e5d4b3a7547aca234b5619d6 (patch)
treeaa3b048b426123be95e357b7362b6cf2c0a1ce07 /src
parent846f70a6ef8be5297eb6f4cf9cf8dc36ce22b818 (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.h29
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 */