texObj, texImage, GL_TRUE);
}
+/**
+ * Binds a region to a texture image, like it was uploaded by glTexImage2D().
+ *
+ * Used for GLX_EXT_texture_from_pixmap and EGL image extensions,
+ */
+static void
+intel_set_texture_image_region(struct gl_context *ctx,
+ struct gl_texture_image *image,
+ struct intel_region *region,
+ GLenum target,
+ GLenum internalFormat,
+ gl_format format)
+{
+ struct intel_context *intel = intel_context(ctx);
+ struct intel_texture_image *intel_image = intel_texture_image(image);
+ struct gl_texture_object *texobj = image->TexObject;
+ struct intel_texture_object *intel_texobj = intel_texture_object(texobj);
+
+ _mesa_init_teximage_fields(&intel->ctx, target, image,
+ region->width, region->height, 1,
+ 0, internalFormat, format);
+
+ if (intel_image->mt) {
+ intel_miptree_release(intel, &intel_image->mt);
+ assert(!image->Data);
+ }
+
+ intel_image->mt = intel_miptree_create_for_region(intel, target,
+ image->TexFormat,
+ region);
+ if (intel_image->mt == NULL)
+ return;
+
+ image->RowStride = region->pitch;
+
+ /* Immediately validate the image to the object. */
+ if (intel_texobj->mt)
+ intel_miptree_release(intel, &intel_texobj->mt);
+ intel_miptree_reference(&intel_texobj->mt, intel_image->mt);
+
+ if (!intel_miptree_match_image(intel_texobj->mt, &intel_image->base.Base))
+ fprintf(stderr, "miptree doesn't match image\n");
+}
+
void
intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
GLint texture_format,
struct intel_context *intel = pDRICtx->driverPrivate;
struct gl_context *ctx = &intel->ctx;
struct intel_texture_object *intelObj;
- struct intel_texture_image *intelImage;
- struct intel_mipmap_tree *mt;
struct intel_renderbuffer *rb;
struct gl_texture_object *texObj;
struct gl_texture_image *texImage;
texFormat = MESA_FORMAT_ARGB8888;
}
- mt = intel_miptree_create_for_region(intel, target, texFormat, rb->region);
- if (mt == NULL)
- return;
-
_mesa_lock_texture(&intel->ctx, texObj);
-
- texImage = _mesa_get_tex_image(&intel->ctx, texObj, target, level);
- intelImage = intel_texture_image(texImage);
-
- if (intelImage->mt) {
- intel_miptree_release(intel, &intelImage->mt);
- assert(!texImage->Data);
- }
- if (intelObj->mt)
- intel_miptree_release(intel, &intelObj->mt);
-
- intelObj->mt = mt;
-
- _mesa_init_teximage_fields(&intel->ctx, target, texImage,
- rb->region->width, rb->region->height, 1,
- 0, internalFormat, texFormat);
-
- texImage->RowStride = rb->region->pitch;
- intel_miptree_reference(&intelImage->mt, intelObj->mt);
-
- if (!intel_miptree_match_image(intelObj->mt, &intelImage->base.Base)) {
- fprintf(stderr, "miptree doesn't match image\n");
- }
-
+ texImage = _mesa_get_tex_image(ctx, texObj, target, level);
+ intel_set_texture_image_region(ctx, texImage, rb->region, target,
+ internalFormat, texFormat);
_mesa_unlock_texture(&intel->ctx, texObj);
}
GLeglImageOES image_handle)
{
struct intel_context *intel = intel_context(ctx);
- struct intel_texture_object *intelObj = intel_texture_object(texObj);
- struct intel_texture_image *intelImage = intel_texture_image(texImage);
- struct intel_mipmap_tree *mt;
__DRIscreen *screen;
__DRIimage *image;
if (image == NULL)
return;
- mt = intel_miptree_create_for_region(intel, target, image->format,
- image->region);
- if (mt == NULL)
- return;
-
- if (intelImage->mt) {
- intel_miptree_release(intel, &intelImage->mt);
- assert(!texImage->Data);
- }
- if (intelObj->mt)
- intel_miptree_release(intel, &intelObj->mt);
-
- intelObj->mt = mt;
- _mesa_init_teximage_fields(&intel->ctx, target, texImage,
- image->region->width, image->region->height, 1,
- 0, image->internal_format, image->format);
-
- texImage->RowStride = image->region->pitch;
- intel_miptree_reference(&intelImage->mt, intelObj->mt);
-
- if (!intel_miptree_match_image(intelObj->mt, &intelImage->base.Base))
- fprintf(stderr, "miptree doesn't match image\n");
+ intel_set_texture_image_region(ctx, texImage, image->region,
+ target, image->internal_format, image->format);
}
#endif