Mesa (master): st/dri: support EGL_MESA_image_drm: createImage

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Thu Sep 9 20:48:46 UTC 2010


Module: Mesa
Branch: master
Commit: a572e3198d19b88a5418e12376e233a583b5977a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a572e3198d19b88a5418e12376e233a583b5977a

Author: ben <benjaminfranzke at googlemail.com>
Date:   Thu Aug 26 17:31:42 2010 +0200

st/dri: support EGL_MESA_image_drm: createImage

Signed-off-by: Jakob Bornecrantz <wallbraker at 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,
 };
 
 /*




More information about the mesa-commit mailing list