ilo: update headers from i965
[mesa.git] / src / gallium / drivers / ilo / ilo_resource.h
index bfc506de7116fcbb4588ee3ebdf162ecc14c8951..fd36242d798f55b691792b01d7f0d4049095d14c 100644 (file)
 #ifndef ILO_RESOURCE_H
 #define ILO_RESOURCE_H
 
+#include "intel_winsys.h"
+
 #include "ilo_common.h"
 
 struct ilo_screen;
-struct ilo_context;
+
+struct ilo_buffer {
+   struct pipe_resource base;
+
+   struct intel_bo *bo;
+   unsigned bo_size;
+   unsigned bo_flags;
+};
+
+struct ilo_texture {
+   struct pipe_resource base;
+
+   bool imported;
+   unsigned bo_flags;
+
+   enum pipe_format bo_format;
+   struct intel_bo *bo;
+
+   /*
+    * These are the values passed to or returned from winsys for bo
+    * allocation.  As such,
+    *
+    *  - width and height are in blocks,
+    *  - cpp is the block size in bytes, and
+    *  - stride is the distance in bytes between two block rows.
+    */
+   int bo_width, bo_height, bo_cpp, bo_stride;
+   enum intel_tiling_mode tiling;
+
+   bool compressed;
+   unsigned block_width;
+   unsigned block_height;
+
+   /* true if the mip level alignments are stricter */
+   bool halign_8, valign_4;
+   /* true if space is reserved between layers */
+   bool array_spacing_full;
+   /* true if samples are interleaved */
+   bool interleaved;
+
+   /* 2D offsets into a layer/slice/face */
+   struct ilo_texture_slice {
+      unsigned x;
+      unsigned y;
+   } *slice_offsets[PIPE_MAX_TEXTURE_LEVELS];
+
+   struct ilo_texture *separate_s8;
+};
+
+static inline struct ilo_buffer *
+ilo_buffer(struct pipe_resource *res)
+{
+   return (struct ilo_buffer *)
+      ((res && res->target == PIPE_BUFFER) ? res : NULL);
+}
+
+static inline struct ilo_texture *
+ilo_texture(struct pipe_resource *res)
+{
+   return (struct ilo_texture *)
+      ((res && res->target != PIPE_BUFFER) ? res : NULL);
+}
 
 void
 ilo_init_resource_functions(struct ilo_screen *is);
 
-void
-ilo_init_transfer_functions(struct ilo_context *ilo);
+bool
+ilo_buffer_alloc_bo(struct ilo_buffer *buf);
+
+bool
+ilo_texture_alloc_bo(struct ilo_texture *tex);
+
+unsigned
+ilo_texture_get_slice_offset(const struct ilo_texture *tex,
+                             int level, int slice,
+                             unsigned *x_offset, unsigned *y_offset);
 
 #endif /* ILO_RESOURCE_H */