diff options
Diffstat (limited to 'src/gallium/state_trackers/xa')
-rw-r--r-- | src/gallium/state_trackers/xa/Makefile | 2 | ||||
-rw-r--r-- | src/gallium/state_trackers/xa/xa_symbols | 1 | ||||
-rw-r--r-- | src/gallium/state_trackers/xa/xa_tracker.c | 30 | ||||
-rw-r--r-- | src/gallium/state_trackers/xa/xa_tracker.h | 10 |
4 files changed, 35 insertions, 8 deletions
diff --git a/src/gallium/state_trackers/xa/Makefile b/src/gallium/state_trackers/xa/Makefile index 92edfd09340..a31db6eb370 100644 --- a/src/gallium/state_trackers/xa/Makefile +++ b/src/gallium/state_trackers/xa/Makefile @@ -4,7 +4,7 @@ include $(TOP)/configs/current ##### MACROS ##### XA_MAJOR = 0 -XA_MINOR = 3 +XA_MINOR = 4 XA_TINY = 0 XA_CFLAGS = -g -fPIC -Wall diff --git a/src/gallium/state_trackers/xa/xa_symbols b/src/gallium/state_trackers/xa/xa_symbols index f1eabea1cfb..6da701f9702 100644 --- a/src/gallium/state_trackers/xa/xa_symbols +++ b/src/gallium/state_trackers/xa/xa_symbols @@ -9,6 +9,7 @@ xa_surface_map xa_surface_unmap xa_surface_format xa_surface_handle +xa_format_check_supported xa_context_default xa_context_create xa_context_destroy diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c index 8d58e5a6f13..50922d38378 100644 --- a/src/gallium/state_trackers/xa/xa_tracker.c +++ b/src/gallium/state_trackers/xa/xa_tracker.c @@ -248,6 +248,29 @@ xa_get_format_stype_depth(struct xa_tracker *xa, return fdesc; } +int +xa_format_check_supported(struct xa_tracker *xa, + enum xa_formats xa_format, unsigned int flags) +{ + struct xa_format_descriptor fdesc = xa_get_pipe_format(xa_format); + unsigned int bind; + + if (fdesc.xa_format == xa_format_unknown) + return -XA_ERR_INVAL; + + bind = stype_bind[xa_format_type(fdesc.xa_format)]; + if (flags & XA_FLAG_SHARED) + bind |= PIPE_BIND_SHARED; + if (flags & XA_FLAG_RENDER_TARGET) + bind |= PIPE_BIND_RENDER_TARGET; + + if (!xa->screen->is_format_supported(xa->screen, fdesc.format, + PIPE_TEXTURE_2D, 0, bind)) + return -XA_ERR_INVAL; + + return XA_ERR_NONE; +} + struct xa_surface * xa_surface_create(struct xa_tracker *xa, int width, @@ -309,8 +332,8 @@ xa_surface_redefine(struct xa_surface *srf, int depth, enum xa_surface_type stype, enum xa_formats xa_format, - unsigned int add_flags, - unsigned int remove_flags, int copy_contents) + unsigned int new_flags, + int copy_contents) { struct pipe_resource *template = &srf->template; struct pipe_resource *texture; @@ -318,7 +341,6 @@ xa_surface_redefine(struct xa_surface *srf, struct xa_tracker *xa = srf->xa; int save_width; int save_height; - unsigned int new_flags = (srf->flags | add_flags) & ~(remove_flags); struct xa_format_descriptor fdesc; if (xa_format == xa_format_unknown) @@ -422,5 +444,5 @@ xa_surface_handle(struct xa_surface *srf, enum xa_formats xa_surface_format(const struct xa_surface *srf) { - return srf->fdesc.format; + return srf->fdesc.xa_format; } diff --git a/src/gallium/state_trackers/xa/xa_tracker.h b/src/gallium/state_trackers/xa/xa_tracker.h index 8c9dd5e167d..62f8a210fb6 100644 --- a/src/gallium/state_trackers/xa/xa_tracker.h +++ b/src/gallium/state_trackers/xa/xa_tracker.h @@ -37,7 +37,7 @@ #include <stdint.h> #define XA_TRACKER_VERSION_MAJOR 0 -#define XA_TRACKER_VERSION_MINOR 3 +#define XA_TRACKER_VERSION_MINOR 4 #define XA_TRACKER_VERSION_PATCH 0 #define XA_FLAG_SHARED (1 << 0) @@ -147,6 +147,10 @@ extern struct xa_tracker *xa_tracker_create(int drm_fd); extern void xa_tracker_destroy(struct xa_tracker *xa); +extern int xa_format_check_supported(struct xa_tracker *xa, + enum xa_formats xa_format, + unsigned int flags); + extern struct xa_surface *xa_surface_create(struct xa_tracker *xa, int width, int height, @@ -165,8 +169,8 @@ extern int xa_surface_redefine(struct xa_surface *srf, int depth, enum xa_surface_type stype, enum xa_formats rgb_format, - unsigned int add_flags, - unsigned int remove_flags, int copy_contents); + unsigned int new_flags, + int copy_contents); extern int xa_surface_handle(struct xa_surface *srf, uint32_t * handle, unsigned int *byte_stride); |