-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Kristian Høgsberg wrote:
> diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c
> b/src/mesa/drivers/dri/intel/intel_fbo.c
> index d58ffd9..f816d8c 100644
> --- a/src/mesa/drivers/dri/intel/intel_fbo.c
> +++ b/src/mesa/drivers/dri/intel/intel_fbo.c
> @@ -200,6 +200,35 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct
> gl_renderbuffer *rb,
> }
>
>
> +static void
> +intel_image_target_renderbuffer_storage(GLcontext *ctx,
> + struct gl_renderbuffer *rb,
> + void *image_handle)
> +{
> + struct intel_context *intel = intel_context(ctx);
> + struct intel_renderbuffer *irb;
> + __DRIscreen *screen;
> + __DRIimage *image;
> +
> + screen = intel->intelScreen->driScrnPriv;
> + image = screen->dri2.image->lookupImage(intel->driContext, image_handle,
> + intel->driContext->loaderPrivate);
> + if (image == NULL)
> + return;
> +
> + irb = intel_renderbuffer(rb);
> + if (irb->region)
> + intel_region_release(&irb->region);
> + intel_region_reference(&irb->region, image->region);
> +
> + rb->Width = image->region->width;
> + rb->Height = image->region->height;
> + rb->Format = image->format;
> + rb->DataType = image->data_type;
> + rb->_BaseFormat = _mesa_base_fbo_format(&intel->ctx,
> + image->internal_format);
> +}
> +
There are a couple of failure paths here. How does the caller of
EGLImageTargetRenderbufferStorage detect and propagate failures? It
seems like there should be some _mesa_error calls in here.
Should this function also be under a "#if FEATURE_OES_EGL_image" block?
> /**
> * Called for each hardware renderbuffer when a _window_ is resized.
> * Just update fields.
> @@ -651,4 +680,9 @@ intel_fbo_init(struct intel_context *intel)
> intel->ctx.Driver.ResizeBuffers = intel_resize_buffers;
> intel->ctx.Driver.ValidateFramebuffer = intel_validate_framebuffer;
> intel->ctx.Driver.BlitFramebuffer = _mesa_meta_BlitFramebuffer;
> +
> +#if FEATURE_OES_EGL_image
> + intel->ctx.Driver.EGLImageTargetRenderbufferStorage =
> + intel_image_target_renderbuffer_storage;
> +#endif
> }
> diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c
> b/src/mesa/drivers/dri/intel/intel_tex_image.c
> index d63292e..d9c5363 100644
> --- a/src/mesa/drivers/dri/intel/intel_tex_image.c
> +++ b/src/mesa/drivers/dri/intel/intel_tex_image.c
> @@ -812,6 +812,53 @@ intelSetTexBuffer(__DRIcontext *pDRICtx, GLint target,
> __DRIdrawable *dPriv)
> }
>
>
> +static void
> +intel_image_target_texture_2d(GLcontext *ctx, GLenum target,
> + struct gl_texture_object *texObj,
> + struct gl_texture_image *texImage,
> + 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;
> +
> + screen = intel->intelScreen->driScrnPriv;
> + image = screen->dri2.image->lookupImage(intel->driContext, image_handle,
> + intel->driContext->loaderPrivate);
> + if (image == NULL)
> + return;
> +
> + mt = intel_miptree_create_for_region(intel, target,
> + image->internal_format,
> + 0, 0, image->region, 1, 0);
> + 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);
> +
> + intelImage->face = target_to_face(target);
> + intelImage->level = 0;
> + texImage->TexFormat = image->format;
> + texImage->RowStride = image->region->pitch;
> + intel_miptree_reference(&intelImage->mt, intelObj->mt);
> +
> + if (!intel_miptree_match_image(intelObj->mt, &intelImage->base))
> + fprintf(stderr, "miptree doesn't match image\n");
> +}
> +
Same comments as for intel_image_target_renderbuffer_storage.
> void
> intelInitTextureImageFuncs(struct dd_function_table *functions)
> {
> @@ -822,4 +869,8 @@ intelInitTextureImageFuncs(struct dd_function_table
> *functions)
>
> functions->CompressedTexImage2D = intelCompressedTexImage2D;
> functions->GetCompressedTexImage = intelGetCompressedTexImage;
> +
> +#if FEATURE_OES_EGL_image
> + functions->EGLImageTargetTexture2D = intel_image_target_texture_2d;
> +#endif
> }
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAkt1+SAACgkQX1gOwKyEAw8e0QCfTWIEn3NKmOC74ELcgNSu0pQN
1EwAn1HmdiH4SHUuc+wqgheYKYN+kJXG
=ZeUc
-----END PGP SIGNATURE-----
------------------------------------------------------------------------------
SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
http://p.sf.net/sfu/solaris-dev2dev
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev