summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers
diff options
context:
space:
mode:
authorThomas Hellstrom <[email protected]>2012-09-20 11:41:23 +0200
committerThomas Hellstrom <[email protected]>2013-12-17 09:01:29 +0100
commit3e2b0f801d7c8d80f6c0d9da3813d7ed8b84e3dd (patch)
treede9926617e5b6c2a79a1a038fa726c3ff76160bb /src/gallium/state_trackers
parent56d920a5c1b64868e77a97604c01d3a63916a6ca (diff)
st/xa: Add new map flags
Replicate some of the gallium pipe transfer functionality. Also bump minor to signal availability of this feature. Signed-off-by: Thomas Hellstrom <[email protected]> Reviewed-by: Jakob Bornecrantz <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r--src/gallium/state_trackers/xa/xa_context.c20
-rw-r--r--src/gallium/state_trackers/xa/xa_tracker.h10
2 files changed, 21 insertions, 9 deletions
diff --git a/src/gallium/state_trackers/xa/xa_context.c b/src/gallium/state_trackers/xa/xa_context.c
index 50ef469ed6d..c2dc53bd83a 100644
--- a/src/gallium/state_trackers/xa/xa_context.c
+++ b/src/gallium/state_trackers/xa/xa_context.c
@@ -132,7 +132,7 @@ xa_surface_map(struct xa_context *ctx,
struct xa_surface *srf, unsigned int usage)
{
void *map;
- unsigned int transfer_direction = 0;
+ unsigned int gallium_usage = 0;
struct pipe_context *pipe = ctx->pipe;
/*
@@ -142,15 +142,23 @@ xa_surface_map(struct xa_context *ctx,
return NULL;
if (usage & XA_MAP_READ)
- transfer_direction |= PIPE_TRANSFER_READ;
+ gallium_usage |= PIPE_TRANSFER_READ;
if (usage & XA_MAP_WRITE)
- transfer_direction |= PIPE_TRANSFER_WRITE;
-
- if (!transfer_direction)
+ gallium_usage |= PIPE_TRANSFER_WRITE;
+ if (usage & XA_MAP_MAP_DIRECTLY)
+ gallium_usage |= PIPE_TRANSFER_MAP_DIRECTLY;
+ if (usage & XA_MAP_UNSYNCHRONIZED)
+ gallium_usage |= PIPE_TRANSFER_UNSYNCHRONIZED;
+ if (usage & XA_MAP_DONTBLOCK)
+ gallium_usage |= PIPE_TRANSFER_DONTBLOCK;
+ if (usage & XA_MAP_DISCARD_WHOLE_RESOURCE)
+ gallium_usage |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE;
+
+ if (!(gallium_usage & (PIPE_TRANSFER_READ_WRITE)))
return NULL;
map = pipe_transfer_map(pipe, srf->tex, 0, 0,
- transfer_direction, 0, 0,
+ gallium_usage, 0, 0,
srf->tex->width0, srf->tex->height0,
&srf->transfer);
if (!map)
diff --git a/src/gallium/state_trackers/xa/xa_tracker.h b/src/gallium/state_trackers/xa/xa_tracker.h
index 1230dabc8f4..43e56ff0c77 100644
--- a/src/gallium/state_trackers/xa/xa_tracker.h
+++ b/src/gallium/state_trackers/xa/xa_tracker.h
@@ -37,15 +37,19 @@
#include <stdint.h>
#define XA_TRACKER_VERSION_MAJOR 2
-#define XA_TRACKER_VERSION_MINOR 0
+#define XA_TRACKER_VERSION_MINOR 1
#define XA_TRACKER_VERSION_PATCH 0
#define XA_FLAG_SHARED (1 << 0)
#define XA_FLAG_RENDER_TARGET (1 << 1)
#define XA_FLAG_SCANOUT (1 << 2)
-#define XA_MAP_READ (1 << 0)
-#define XA_MAP_WRITE (1 << 1)
+#define XA_MAP_READ (1 << 0)
+#define XA_MAP_WRITE (1 << 1)
+#define XA_MAP_MAP_DIRECTLY (1 << 2)
+#define XA_MAP_UNSYNCHRONIZED (1 << 3)
+#define XA_MAP_DONTBLOCK (1 << 4)
+#define XA_MAP_DISCARD_WHOLE_RESOURCE (1 << 5)
#define XA_ERR_NONE 0
#define XA_ERR_NORES 1