summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-04-16 17:06:55 +0200
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-05-18 17:58:35 +0200
commit4f52b7eb7f3591904e2caf288232370ad97d7610 (patch)
tree6b2c8208a66e7b221c221bda5770ea6d58aa48d0
parent45899a5d7ed19ed1b35f168f035e0a741f2fd4a6 (diff)
intel: implement createImageFromName2().
Add basic implementation for createImageFromName2() as the default entry-point. i.e. wrap the older createImageFromName() into the new function.
-rw-r--r--src/mesa/drivers/dri/intel/intel_screen.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_screen.c b/src/mesa/drivers/dri/intel/intel_screen.c
index 5a4ab65f0b..4dddee0439 100644
--- a/src/mesa/drivers/dri/intel/intel_screen.c
+++ b/src/mesa/drivers/dri/intel/intel_screen.c
@@ -176,11 +176,13 @@ static const struct __DRI2flushExtensionRec intelFlushExtension = {
};
static __DRIimage *
-intel_create_image_from_name(__DRIscreen *screen,
- int width, int height, int format,
- int name, int pitch, void *loaderPrivate)
+intel_create_image_from_name2(__DRIscreen *screen,
+ int name, unsigned int offset,
+ const __DRIimageAttrs *attrs,
+ void *loaderPrivate)
{
struct intel_screen *intelScreen = screen->driverPrivate;
+ struct intel_region_attributes region_attrs;
__DRIimage *image;
int cpp;
@@ -188,9 +190,9 @@ intel_create_image_from_name(__DRIscreen *screen,
if (image == NULL)
return NULL;
- image->dri_format = format;
+ image->dri_format = attrs->format;
- switch (format) {
+ switch (attrs->format) {
case __DRI_IMAGE_FORMAT_RGB565:
image->format = MESA_FORMAT_RGB565;
image->internal_format = GL_RGB;
@@ -224,9 +226,12 @@ intel_create_image_from_name(__DRIscreen *screen,
image->data = loaderPrivate;
cpp = _mesa_get_format_bytes(image->format);
- image->region = intel_region_alloc_for_handle(intelScreen,
- cpp, width, height,
- pitch, name, "image");
+ region_attrs.cpp = cpp;
+ region_attrs.width = attrs->width;
+ region_attrs.height = attrs->height;
+ region_attrs.pitch = attrs->pitch;
+ image->region = intel_region_alloc_for_handle2(intelScreen, name, "image",
+ &region_attrs);
if (image->region == NULL) {
FREE(image);
return NULL;
@@ -236,6 +241,22 @@ intel_create_image_from_name(__DRIscreen *screen,
}
static __DRIimage *
+intel_create_image_from_name(__DRIscreen *screen,
+ int width, int height, int format,
+ int name, int pitch, void *loaderPrivate)
+{
+ __DRIimageAttrs attrs;
+
+ attrs.plane_id = 0;
+ attrs.format = format;
+ attrs.width = width;
+ attrs.height = height;
+ attrs.pitch = pitch;
+ attrs.structure = __DRI_IMAGE_STRUCTURE_FRAME;
+ return intel_create_image_from_name2(screen, name, 0, &attrs, loaderPrivate);
+}
+
+static __DRIimage *
intel_create_image_from_renderbuffer(__DRIcontext *context,
int renderbuffer, void *loaderPrivate)
{
@@ -447,7 +468,8 @@ static struct __DRIimageExtensionRec intelImageExtension = {
intel_query_image,
intel_dup_image,
intel_validate_usage,
- intel_image_write
+ intel_image_write,
+ intel_create_image_from_name2
};
static const __DRIextension *intelScreenExtensions[] = {