summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/xa
diff options
context:
space:
mode:
authorThomas Hellstrom <thellstrom@vmware.com>2011-11-01 17:42:21 +0100
committerThomas Hellstrom <thellstrom@vmware.com>2011-11-01 18:18:14 +0100
commitdc4ef916016dc4237551bad132325c71f4eb28e2 (patch)
treea17d19329662b52e23f95dc82ff459612a0a3358 /src/gallium/state_trackers/xa
parent48a4b9b70cd0020ad09d605672a53dd7be86b3af (diff)
downloadexternal_mesa3d-dc4ef916016dc4237551bad132325c71f4eb28e2.zip
external_mesa3d-dc4ef916016dc4237551bad132325c71f4eb28e2.tar.gz
external_mesa3d-dc4ef916016dc4237551bad132325c71f4eb28e2.tar.bz2
st/xa: Add a scanout flag for surfaces
Bump minor to signal availability. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
Diffstat (limited to 'src/gallium/state_trackers/xa')
-rw-r--r--src/gallium/state_trackers/xa/xa_tracker.c12
-rw-r--r--src/gallium/state_trackers/xa/xa_tracker.h3
2 files changed, 14 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c
index 50bf4b7..529279a 100644
--- a/src/gallium/state_trackers/xa/xa_tracker.c
+++ b/src/gallium/state_trackers/xa/xa_tracker.c
@@ -220,6 +220,12 @@ xa_flags_compat(unsigned int old_flags, unsigned int new_flags)
return ((new_flags & XA_FLAG_RENDER_TARGET) == 0);
/*
+ * Don't recreate if we're dropping the scanout flag.
+ */
+ if (flag_diff & XA_FLAG_SCANOUT)
+ return ((new_flags & XA_FLAG_SCANOUT) == 0);
+
+ /*
* Always recreate for unknown / unimplemented flags.
*/
return 0;
@@ -263,6 +269,8 @@ xa_format_check_supported(struct xa_tracker *xa,
bind |= PIPE_BIND_SHARED;
if (flags & XA_FLAG_RENDER_TARGET)
bind |= PIPE_BIND_RENDER_TARGET;
+ if (flags & XA_FLAG_SCANOUT)
+ bind |= PIPE_BIND_SCANOUT;
if (!xa->screen->is_format_supported(xa->screen, fdesc.format,
PIPE_TEXTURE_2D, 0, bind))
@@ -309,6 +317,8 @@ xa_surface_create(struct xa_tracker *xa,
template->bind |= PIPE_BIND_SHARED;
if (flags & XA_FLAG_RENDER_TARGET)
template->bind |= PIPE_BIND_RENDER_TARGET;
+ if (flags & XA_FLAG_SCANOUT)
+ template->bind |= PIPE_BIND_SCANOUT;
srf->tex = xa->screen->resource_create(xa->screen, template);
if (!srf->tex)
@@ -359,6 +369,8 @@ xa_surface_redefine(struct xa_surface *srf,
template->bind |= PIPE_BIND_SHARED;
if (new_flags & XA_FLAG_RENDER_TARGET)
template->bind |= PIPE_BIND_RENDER_TARGET;
+ if (new_flags & XA_FLAG_SCANOUT)
+ template->bind |= PIPE_BIND_SCANOUT;
if (copy_contents) {
if (!xa_format_type_is_color(fdesc.xa_format) ||
diff --git a/src/gallium/state_trackers/xa/xa_tracker.h b/src/gallium/state_trackers/xa/xa_tracker.h
index 62f8a21..abc2457 100644
--- a/src/gallium/state_trackers/xa/xa_tracker.h
+++ b/src/gallium/state_trackers/xa/xa_tracker.h
@@ -37,11 +37,12 @@
#include <stdint.h>
#define XA_TRACKER_VERSION_MAJOR 0
-#define XA_TRACKER_VERSION_MINOR 4
+#define XA_TRACKER_VERSION_MINOR 5
#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)