#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);