[Mesa-dev] [PATCH 2/2] gbm/dri: Add more color formats support.
Kristian Høgsberg
krh at bitplanet.net
Tue Feb 14 14:31:45 PST 2012
On Tue, Feb 14, 2012 at 2:53 AM, <zhigang.gong at linux.intel.com> wrote:
> From: Zhigang Gong <zhigang.gong at linux.intel.com>
>
> Added two color formats RGB565 and A8 to gbm layer.
> Added A8 to dri layer.
I was planning something like this:
http://people.freedesktop.org/~krh/gbm-get-format.patch
where we reuse the format codes introduced in drm. Also we rename the
formats to just GBM_FORMAT_* since we're planning to introduce a
struct gbm_surface, and need the formats for that too. The patch is
not complete, we need to query the DRI image format when we create a
gbm_bo through the gbm_bo_create_from_egl_image entry point. We need
a new __DRIimage function for that but it should be straight forward.
Kristian
> Signed-off-by: Zhigang Gong <zhigang.gong at linux.intel.com>
> ---
> include/GL/internal/dri_interface.h | 1 +
> src/gbm/backends/dri/gbm_dri.c | 6 ++++++
> src/gbm/main/gbm.h | 6 +++++-
> src/mesa/drivers/dri/intel/intel_screen.c | 5 +++++
> 4 files changed, 17 insertions(+), 1 deletions(-)
>
> diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h
> index 701e83e..b98ee3d 100644
> --- a/include/GL/internal/dri_interface.h
> +++ b/include/GL/internal/dri_interface.h
> @@ -906,6 +906,7 @@ struct __DRIdri2ExtensionRec {
> #define __DRI_IMAGE_FORMAT_XRGB8888 0x1002
> #define __DRI_IMAGE_FORMAT_ARGB8888 0x1003
> #define __DRI_IMAGE_FORMAT_ABGR8888 0x1004
> +#define __DRI_IMAGE_FORMAT_A8 0x1005
>
> #define __DRI_IMAGE_USE_SHARE 0x0001
> #define __DRI_IMAGE_USE_SCANOUT 0x0002
> diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c
> index 7932d12..d5a73f2 100644
> --- a/src/gbm/backends/dri/gbm_dri.c
> +++ b/src/gbm/backends/dri/gbm_dri.c
> @@ -224,6 +224,12 @@ gbm_dri_match_format(enum gbm_bo_format format, int *dri_format)
> case GBM_BO_FORMAT_ARGB8888:
> *dri_format = __DRI_IMAGE_FORMAT_ARGB8888;
> break;
> + case GBM_BO_FORMAT_RGB565:
> + *dri_format = __DRI_IMAGE_FORMAT_RGB565;
> + break;
> + case GBM_BO_FORMAT_A8:
> + *dri_format = __DRI_IMAGE_FORMAT_A8;
> + break;
> default:
> return -1;
> }
> diff --git a/src/gbm/main/gbm.h b/src/gbm/main/gbm.h
> index ec64b94..2880872 100644
> --- a/src/gbm/main/gbm.h
> +++ b/src/gbm/main/gbm.h
> @@ -72,7 +72,11 @@ enum gbm_bo_format {
> /** RGB with 8 bits per channel in a 32 bit value */
> GBM_BO_FORMAT_XRGB8888,
> /** ARGB with 8 bits per channel in a 32 bit value */
> - GBM_BO_FORMAT_ARGB8888
> + GBM_BO_FORMAT_ARGB8888,
> + /* RGB with 5 bits red channel, 6 bits green channel and 5 bits blue channel*/
> + GBM_BO_FORMAT_RGB565,
> + /* Alpha with 8 bits alpha channel. */
> + GBM_BO_FORMAT_A8
> };
>
> /**
> diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
> index 60781e5..f0fc5a4 100644
> --- a/src/mesa/drivers/dri/intel/intel_screen.c
> +++ b/src/mesa/drivers/dri/intel/intel_screen.c
> @@ -147,6 +147,11 @@ intel_create_image_from_name(__DRIscreen *screen,
> return NULL;
>
> switch (format) {
> + case __DRI_IMAGE_FORMAT_A8:
> + image->format = MESA_FORMAT_A8;
> + image->internal_format = GL_ALPHA;
> + image->data_type = GL_UNSIGNED_BYTE;
> + break;
> case __DRI_IMAGE_FORMAT_RGB565:
> image->format = MESA_FORMAT_RGB565;
> image->internal_format = GL_RGB;
> --
> 1.7.4.4
>
More information about the mesa-dev
mailing list