ilo: add pipe_texture_target to ilo_image
[mesa.git] / src / gallium / drivers / ilo / ilo_transfer.h
index 25bcc442ffc60b0065013aae601e1a2645c3b953..e41edc1aa5326ff8e0393ca80b4f2889f2fe93c3 100644 (file)
 #ifndef ILO_TRANSFER_H
 #define ILO_TRANSFER_H
 
+#include "pipe/p_state.h"
+
 #include "ilo_common.h"
 
+/*
+ * Direct mappings are always page aligned, but ILO_TRANSFER_MAP_STAGING is
+ * not.
+ */
+#define ILO_TRANSFER_MAP_BUFFER_ALIGNMENT 64
+
+enum ilo_transfer_map_method {
+   /* map() / map_gtt() / map_gtt_async() */
+   ILO_TRANSFER_MAP_CPU,
+   ILO_TRANSFER_MAP_GTT,
+   ILO_TRANSFER_MAP_GTT_ASYNC,
+
+   /* use staging resource */
+   ILO_TRANSFER_MAP_STAGING,
+
+   /* use staging system buffer */
+   ILO_TRANSFER_MAP_SW_CONVERT,
+   ILO_TRANSFER_MAP_SW_ZS,
+};
+
+struct ilo_transfer {
+   struct pipe_transfer base;
+
+   enum ilo_transfer_map_method method;
+   /* pipe_resource, system memory, or garbage depending on the method */
+   union {
+      struct pipe_resource *res;
+      void *sys;
+   } staging;
+};
+
 struct ilo_context;
 
+static inline struct ilo_transfer *
+ilo_transfer(struct pipe_transfer *transfer)
+{
+   return (struct ilo_transfer *) transfer;
+}
+
 void
 ilo_init_transfer_functions(struct ilo_context *ilo);