intel: Implement GL_OES_EGL_image entrypoints
This commit is contained in:
parent
c26247100b
commit
10e7962741
|
@ -200,6 +200,37 @@ intel_alloc_renderbuffer_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
|
|||
}
|
||||
|
||||
|
||||
#if FEATURE_OES_EGL_image
|
||||
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->lookupEGLImage(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);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Called for each hardware renderbuffer when a _window_ is resized.
|
||||
* Just update fields.
|
||||
|
@ -651,4 +682,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
|
||||
}
|
||||
|
|
|
@ -814,6 +814,54 @@ intelSetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv)
|
|||
intelSetTexBuffer2(pDRICtx, target, __DRI_TEXTURE_FORMAT_RGBA, dPriv);
|
||||
}
|
||||
|
||||
#if FEATURE_OES_EGL_image
|
||||
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->lookupEGLImage(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");
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
intelInitTextureImageFuncs(struct dd_function_table *functions)
|
||||
|
@ -825,4 +873,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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue