[Mesa-dev] [PATCH 1/2] st/dri: move fourcc->format conversion to a common place
Dave Airlie
airlied at gmail.com
Tue Dec 17 16:03:33 PST 2013
From: Dave Airlie <airlied at redhat.com>
Before I cut-n-paste this a 3rd time lets consolidate it.
Signed-off-by: Dave Airlie <airlied at redhat.com>
---
src/gallium/state_trackers/dri/drm/dri2.c | 81 +++++++++++++------------------
1 file changed, 35 insertions(+), 46 deletions(-)
diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c
index 8ff77b3..2d713aa 100644
--- a/src/gallium/state_trackers/dri/drm/dri2.c
+++ b/src/gallium/state_trackers/dri/drm/dri2.c
@@ -42,6 +42,37 @@
#include "dri_drawable.h"
#include "dri2_buffer.h"
+static int convert_fourcc(int format, int *dri_components_p)
+{
+ int dri_components;
+ switch(format) {
+ case __DRI_IMAGE_FOURCC_RGB565:
+ format = __DRI_IMAGE_FORMAT_RGB565;
+ dri_components = __DRI_IMAGE_COMPONENTS_RGB;
+ break;
+ case __DRI_IMAGE_FOURCC_ARGB8888:
+ format = __DRI_IMAGE_FORMAT_ARGB8888;
+ dri_components = __DRI_IMAGE_COMPONENTS_RGBA;
+ break;
+ case __DRI_IMAGE_FOURCC_XRGB8888:
+ format = __DRI_IMAGE_FORMAT_XRGB8888;
+ dri_components = __DRI_IMAGE_COMPONENTS_RGB;
+ break;
+ case __DRI_IMAGE_FOURCC_ABGR8888:
+ format = __DRI_IMAGE_FORMAT_ABGR8888;
+ dri_components = __DRI_IMAGE_COMPONENTS_RGBA;
+ break;
+ case __DRI_IMAGE_FOURCC_XBGR8888:
+ format = __DRI_IMAGE_FORMAT_XBGR8888;
+ dri_components = __DRI_IMAGE_COMPONENTS_RGB;
+ break;
+ default:
+ return -1;
+ }
+ *dri_components_p = dri_components;
+ return format;
+}
+
/**
* DRI2 flush extension.
*/
@@ -810,30 +841,9 @@ dri2_from_names(__DRIscreen *screen, int width, int height, int format,
if (offsets[0] != 0)
return NULL;
- switch(format) {
- case __DRI_IMAGE_FOURCC_RGB565:
- format = __DRI_IMAGE_FORMAT_RGB565;
- dri_components = __DRI_IMAGE_COMPONENTS_RGB;
- break;
- case __DRI_IMAGE_FOURCC_ARGB8888:
- format = __DRI_IMAGE_FORMAT_ARGB8888;
- dri_components = __DRI_IMAGE_COMPONENTS_RGBA;
- break;
- case __DRI_IMAGE_FOURCC_XRGB8888:
- format = __DRI_IMAGE_FORMAT_XRGB8888;
- dri_components = __DRI_IMAGE_COMPONENTS_RGB;
- break;
- case __DRI_IMAGE_FOURCC_ABGR8888:
- format = __DRI_IMAGE_FORMAT_ABGR8888;
- dri_components = __DRI_IMAGE_COMPONENTS_RGBA;
- break;
- case __DRI_IMAGE_FOURCC_XBGR8888:
- format = __DRI_IMAGE_FORMAT_XBGR8888;
- dri_components = __DRI_IMAGE_COMPONENTS_RGB;
- break;
- default:
+ format = convert_fourcc(format, &dri_components);
+ if (format == -1)
return NULL;
- }
/* Strides are in bytes not pixels. */
stride = strides[0] /4;
@@ -946,30 +956,9 @@ dri2_from_fds(__DRIscreen *screen, int width, int height, int fourcc,
if (offsets[0] != 0)
return NULL;
- switch(fourcc) {
- case __DRI_IMAGE_FOURCC_RGB565:
- format = __DRI_IMAGE_FORMAT_RGB565;
- dri_components = __DRI_IMAGE_COMPONENTS_RGB;
- break;
- case __DRI_IMAGE_FOURCC_ARGB8888:
- format = __DRI_IMAGE_FORMAT_ARGB8888;
- dri_components = __DRI_IMAGE_COMPONENTS_RGBA;
- break;
- case __DRI_IMAGE_FOURCC_XRGB8888:
- format = __DRI_IMAGE_FORMAT_XRGB8888;
- dri_components = __DRI_IMAGE_COMPONENTS_RGB;
- break;
- case __DRI_IMAGE_FOURCC_ABGR8888:
- format = __DRI_IMAGE_FORMAT_ABGR8888;
- dri_components = __DRI_IMAGE_COMPONENTS_RGBA;
- break;
- case __DRI_IMAGE_FOURCC_XBGR8888:
- format = __DRI_IMAGE_FORMAT_XBGR8888;
- dri_components = __DRI_IMAGE_COMPONENTS_RGB;
- break;
- default:
+ format = convert_fourcc(fourcc, &dri_components);
+ if (format == -1)
return NULL;
- }
/* Strides are in bytes not pixels. */
stride = strides[0] /4;
--
1.8.3.1
More information about the mesa-dev
mailing list