Module: Mesa Branch: master Commit: a572e3198d19b88a5418e12376e233a583b5977a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a572e3198d19b88a5418e12376e233a583b5977a
Author: ben <benjaminfran...@googlemail.com> Date: Thu Aug 26 17:31:42 2010 +0200 st/dri: support EGL_MESA_image_drm: createImage Signed-off-by: Jakob Bornecrantz <wallbra...@gmail.com> --- src/gallium/state_trackers/dri/drm/dri2.c | 58 +++++++++++++++++++++++++++++ 1 files changed, 58 insertions(+), 0 deletions(-) diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c index f68b695..2fa71ba 100644 --- a/src/gallium/state_trackers/dri/drm/dri2.c +++ b/src/gallium/state_trackers/dri/drm/dri2.c @@ -380,6 +380,63 @@ dri2_create_image_from_renderbuffer(__DRIcontext *context, return NULL; } +static __DRIimage * +dri2_create_image(__DRIscreen *_screen, + int width, int height, int format, + unsigned int use, void *loaderPrivate) +{ + struct dri_screen *screen = dri_screen(_screen); + __DRIimage *img; + struct pipe_resource templ; + unsigned tex_usage; + enum pipe_format pf; + + tex_usage = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW; + + switch (format) { + case __DRI_IMAGE_FORMAT_RGB565: + pf = PIPE_FORMAT_B5G6R5_UNORM; + break; + case __DRI_IMAGE_FORMAT_XRGB8888: + pf = PIPE_FORMAT_B8G8R8X8_UNORM; + break; + case __DRI_IMAGE_FORMAT_ARGB8888: + pf = PIPE_FORMAT_B8G8R8A8_UNORM; + break; + default: + pf = PIPE_FORMAT_NONE; + break; + } + if (pf == PIPE_FORMAT_NONE) + return NULL; + + img = CALLOC_STRUCT(__DRIimageRec); + if (!img) + return NULL; + + memset(&templ, 0, sizeof(templ)); + templ.bind = tex_usage; + templ.format = pf; + templ.target = PIPE_TEXTURE_2D; + templ.last_level = 0; + templ.width0 = width; + templ.height0 = height; + templ.depth0 = 1; + + img->texture = screen->base.screen->resource_create(screen->base.screen, &templ); + if (!img->texture) { + FREE(img); + return NULL; + } + + img->face = 0; + img->level = 0; + img->zslice = 0; + + img->loader_private = loaderPrivate; + return img; +} + static void dri2_destroy_image(__DRIimage *img) { @@ -392,6 +449,7 @@ static struct __DRIimageExtensionRec dri2ImageExtension = { dri2_create_image_from_name, dri2_create_image_from_renderbuffer, dri2_destroy_image, + dri2_create_image, }; /* _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit