summaryrefslogtreecommitdiffstats
path: root/src/gbm/main/gbm.h
diff options
context:
space:
mode:
authorRob Herring <[email protected]>2016-05-03 21:02:47 -0500
committerEmil Velikov <[email protected]>2016-05-23 12:07:46 +0100
commit8aeb6d768b4285f600d09f38d0b406adf46c251d (patch)
treec4ad438adb7e6862da2b8dbc77a3963a9188f073 /src/gbm/main/gbm.h
parent1f4869a2089c6172feff382e177d74ac68c241a7 (diff)
gbm: Add map/unmap functions
This adds map and unmap functions to GBM utilizing the DRIimage extension mapImage/unmapImage functions or existing internal mapping for dumb buffers. Unlike prior attempts, this version provides a region to map and usage flags for the mapping. The operation follows the same semantics as the gallium transfer_map() function. This was tested with GBM based gralloc on Android. Signed-off-by: Rob Herring <[email protected]> [Emil Velikov: drop no longer relevant hunk from commit message.] Reviewed-by: Emil Velikov <[email protected]> Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/gbm/main/gbm.h')
-rw-r--r--src/gbm/main/gbm.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/gbm/main/gbm.h b/src/gbm/main/gbm.h
index 63d9a9edfd6..8a2f2a6a8cc 100644
--- a/src/gbm/main/gbm.h
+++ b/src/gbm/main/gbm.h
@@ -253,6 +253,41 @@ struct gbm_bo *
gbm_bo_import(struct gbm_device *gbm, uint32_t type,
void *buffer, uint32_t usage);
+/**
+ * Flags to indicate the type of mapping for the buffer - these are
+ * passed into gbm_bo_map(). The caller must set the union of all the
+ * flags that are appropriate.
+ *
+ * These flags are independent of the GBM_BO_USE_* creation flags. However,
+ * mapping the buffer may require copying to/from a staging buffer.
+ *
+ * See also: pipe_transfer_usage
+ */
+enum gbm_bo_transfer_flags {
+ /**
+ * Buffer contents read back (or accessed directly) at transfer
+ * create time.
+ */
+ GBM_BO_TRANSFER_READ = (1 << 0),
+ /**
+ * Buffer contents will be written back at unmap time
+ * (or modified as a result of being accessed directly).
+ */
+ GBM_BO_TRANSFER_WRITE = (1 << 1),
+ /**
+ * Read/modify/write
+ */
+ GBM_BO_TRANSFER_READ_WRITE = (GBM_BO_TRANSFER_READ | GBM_BO_TRANSFER_WRITE),
+};
+
+void *
+gbm_bo_map(struct gbm_bo *bo,
+ uint32_t x, uint32_t y, uint32_t width, uint32_t height,
+ uint32_t flags, uint32_t *stride, void **map_data);
+
+void
+gbm_bo_unmap(struct gbm_bo *bo, void *map_data);
+
uint32_t
gbm_bo_get_width(struct gbm_bo *bo);