Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 6113 → Rev 6114

/contrib/sdk/sources/Mesa/mesa-9.2.5/src/egl/drivers/dri2/egl_dri2.c
41,6 → 41,7
#define EGL_EGLEXT_PROTOTYPES
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include <wayland-kos32.h>
 
#include "eglmode.h"
#include "eglscreen.h"
1227,8 → 1228,6
return dri2_create_image(disp, dri_image);
}
 
#ifdef HAVE_WAYLAND_PLATFORM
 
/* This structure describes how a wl_buffer maps to one or more
* __DRIimages. A wl_drm_buffer stores the wl_drm format code and the
* offsets and strides of the planes in the buffer. This table maps a
1247,6 → 1246,7
{ __DRI_IMAGE_COMPONENTS_Y_XUXV, EGL_TEXTURE_Y_XUXV_WL, 2 },
};
 
#if 0
static _EGLImage *
dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx,
EGLClientBuffer _buffer,
1692,6 → 1692,104
#endif
 
static void
dri2_reference_planar_buffer(struct dri2_egl_display *dri2_dpy, uint32_t name,
struct egl_planar_buffer *buffer)
{
__DRIimage *img;
int i, dri_components = 0;
 
img = dri2_dpy->image->createImageFromNames(dri2_dpy->dri_screen,
buffer->width,
buffer->height,
buffer->format,
(int*)&name, 1,
buffer->stride,
buffer->offset,
NULL);
 
if (img == NULL)
return;
 
dri2_dpy->image->queryImage(img, __DRI_IMAGE_ATTRIB_COMPONENTS, &dri_components);
 
buffer->driver_format = NULL;
for (i = 0; i < ARRAY_SIZE(wl_drm_components); i++)
if (wl_drm_components[i].dri_components == dri_components)
buffer->driver_format = &wl_drm_components[i];
 
if (buffer->driver_format == NULL)
dri2_dpy->image->destroyImage(img);
else
buffer->driver_buffer = img;
}
 
_EGLImage *
dri2_create_planar_image(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx,
EGLClientBuffer clbuffer, const EGLint *attrib_list)
{
struct dri2_egl_display *dri2_dpy = dri2_egl_display(dpy);
_EGLImageAttribs attrs;
struct egl_planar_buffer *buffer;
 
EGLint name, err;
 
name = (EGLint) (uintptr_t) clbuffer;
 
err = _eglParseImageAttribList(&attrs, dpy, attrib_list);
if (err != EGL_SUCCESS)
return NULL;
 
if (attrs.Width <= 0 || attrs.Height <= 0 )
{
_eglError(EGL_BAD_PARAMETER,
"bad width, height or stride");
return NULL;
}
 
switch (attrs.DRMBufferFormatMESA)
{
case WL_DRM_FORMAT_YUV410:
case WL_DRM_FORMAT_YUV411:
case WL_DRM_FORMAT_YUV420:
case WL_DRM_FORMAT_YUV422:
case WL_DRM_FORMAT_YUV444:
case WL_DRM_FORMAT_NV12:
case WL_DRM_FORMAT_NV16:
break;
default:
_eglError(EGL_BAD_PARAMETER, "invalid format");
return NULL;
}
 
buffer = calloc(1, sizeof *buffer);
if (buffer == NULL) {
_eglError(EGL_BAD_ALLOC, "planar buffer");
return NULL;
}
 
buffer->width = attrs.Width;
buffer->height = attrs.Height;
buffer->format = attrs.DRMBufferFormatMESA;
buffer->offset[0] = attrs.Plane0_offset;
buffer->stride[0] = attrs.Plane0_pitch;
buffer->offset[1] = attrs.Plane1_offset;
buffer->stride[1] = attrs.Plane1_pitch;
buffer->offset[2] = attrs.Plane2_offset;
buffer->stride[2] = attrs.Plane2_pitch;
 
dri2_reference_planar_buffer(dri2_dpy, name, buffer);
if (buffer->driver_buffer == NULL)
{
_eglError(EGL_BAD_PARAMETER,"invalid name\n");
free(buffer);
return NULL;
};
 
return (_EGLImage*)buffer;
}
 
 
static void
dri2_unload(_EGLDriver *drv)
{
struct dri2_egl_driver *dri2_drv = dri2_egl_driver(drv);
1766,6 → 1864,8
dri2_drv->base.API.ReleaseTexImage = dri2_release_tex_image;
dri2_drv->base.API.CreateImageKHR = dri2_create_image_khr;
dri2_drv->base.API.DestroyImageKHR = dri2_destroy_image_khr;
dri2_drv->base.API.CreatePlanarImage = dri2_create_planar_image;
dri2_drv->base.API.DestroyPlanarImage = NULL;
dri2_drv->base.API.CreateDRMImageMESA = dri2_create_drm_image_mesa;
dri2_drv->base.API.ExportDRMImageMESA = dri2_export_drm_image_mesa;
#ifdef HAVE_WAYLAND_PLATFORM