[Beignet] [PATCH] Runtime: re-enable cl_khr_gl_sharing with existing egl extension.
Yang, Rong R
rong.r.yang at intel.com
Mon Sep 5 05:20:47 UTC 2016
Which version is this patch required?
I think it introduce a new dependence, suppose someone has an old verion libegl, will cause build error, even if doesn’t need cl_khr_gl_sharing extension.
Can you add an libegl version check to cmake to avoid it?
> -----Original Message-----
> From: Weng, Chuanbo
> Sent: Monday, September 5, 2016 11:10
> To: Yang, Rong R <rong.r.yang at intel.com>; beignet at lists.freedesktop.org
> Subject: RE: [Beignet] [PATCH] Runtime: re-enable cl_khr_gl_sharing with
> existing egl extension.
>
> This is because of your egl version.
> Please build and install latest mesa code from upstream:
> https://cgit.freedesktop.org/mesa/mesa/
> With the following commands:
> ./autogen.sh --with-dri-drivers="swrast,i965" --with-gallium-drivers="" --
> enable-gles1 --enable-gles2 --with-egl-platforms="x11,drm"
> make
> make install
>
> -----Original Message-----
> From: Yang, Rong R
> Sent: Thursday, September 1, 2016 2:04 PM
> To: Weng, Chuanbo <chuanbo.weng at intel.com>;
> beignet at lists.freedesktop.org
> Cc: Weng, Chuanbo <chuanbo.weng at intel.com>
> Subject: RE: [Beignet] [PATCH] Runtime: re-enable cl_khr_gl_sharing with
> existing egl extension.
>
> After install libegl, there is a build error:
> error: unknown type name ‘EGLImage’
>
> > -----Original Message-----
> > From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf
> Of
> > Chuanbo Weng
> > Sent: Wednesday, August 31, 2016 0:56
> > To: beignet at lists.freedesktop.org
> > Cc: Weng, Chuanbo <chuanbo.weng at intel.com>
> > Subject: [Beignet] [PATCH] Runtime: re-enable cl_khr_gl_sharing with
> > existing egl extension.
> >
> > In order to query low level layout of GL buffer object/texture/render
> > buffer, previous implementation introduced an egl extension and
> > implemented
> > in Beignet side. This way is broken once mesa change its related internal
> > code. In this patch, we use an new egl
> > extension(EGL_MESA_image_dma_buf_export)
> > to query related layout infomations of gl texture. Since this egl extension
> > is already accepted by Khronos, so it's a stable method.
> > This patch just implement GL texture 2d buffer sharing, and we will
> > implement other target type if necessary.
> >
> > Signed-off-by: Chuanbo Weng <chuanbo.weng at intel.com>
> > ---
> > CMake/FindMesaSrc.cmake | 26 ---
> > CMakeLists.txt | 8 -
> > src/CMakeLists.txt | 11 +-
> > src/cl_driver.h | 32 +--
> > src/cl_driver_defs.c | 7 -
> > src/cl_gl_api.c | 17 +-
> > src/cl_mem.h | 10 +-
> > src/cl_mem_gl.c | 7 +-
> > src/intel/intel_cl_gl_share_image_info.h | 18 ++
> > src/intel/intel_dri_resource_sharing.c | 208 --------------------
> > src/intel/intel_dri_resource_sharing.h | 39 ----
> > src/intel/intel_dri_resource_sharing_int.h | 143 --------------
> > src/intel/intel_driver.c | 132 +++++++++----
> > src/x11/mesa_egl_extension.c | 306 -----------------------------
> > src/x11/mesa_egl_extension.h | 20 --
> > src/x11/mesa_egl_res_share.c | 135 -------------
> > src/x11/mesa_egl_res_share.h | 44 -----
> > utests/CMakeLists.txt | 2 +-
> > utests/compiler_fill_gl_image.cpp | 69 ++++---
> > utests/utest_helper.hpp | 7 +-
> > 20 files changed, 174 insertions(+), 1067 deletions(-)
> > delete mode 100644 CMake/FindMesaSrc.cmake
> > create mode 100644 src/intel/intel_cl_gl_share_image_info.h
> > delete mode 100644 src/intel/intel_dri_resource_sharing.c
> > delete mode 100644 src/intel/intel_dri_resource_sharing.h
> > delete mode 100644 src/intel/intel_dri_resource_sharing_int.h
> > delete mode 100644 src/x11/mesa_egl_extension.c
> > delete mode 100644 src/x11/mesa_egl_extension.h
> > delete mode 100644 src/x11/mesa_egl_res_share.c
> > delete mode 100644 src/x11/mesa_egl_res_share.h
> >
> > diff --git a/CMake/FindMesaSrc.cmake b/CMake/FindMesaSrc.cmake
> > deleted file mode 100644
> > index 978cb4e..0000000
> > --- a/CMake/FindMesaSrc.cmake
> > +++ /dev/null
> > @@ -1,26 +0,0 @@
> > -#
> > -# Try to find mesa source code
> > -# Once done this will define
> > -#
> > -# MESA_SOURCE_FOUND
> > -# MESA_SOURCE_INCLUDES
> > -#
> > -
> > -# Find mesa source code.
> > -FIND_PATH(MESA_SOURCE_PREFIX src/mesa/main/texobj.c
> > - $ENV{MESA_SOURCE_DIR}
> > - ${MAKE_CURRENT_SOURCE_DIR}/../mesa
> > - ~/mesa
> > - DOC "The mesa source directory which is needed for cl_khr_gl_sharing.")
> > -
> > -IF(MESA_SOURCE_PREFIX)
> > -SET(MESA_SOURCE_INCLUDES ${MESA_SOURCE_PREFIX}/src/mesa
> > - ${MESA_SOURCE_PREFIX}/include
> > - ${MESA_SOURCE_PREFIX}/src/mapi
> > - ${MESA_SOURCE_PREFIX}/src/mesa/drivers/dri/i965/
> > - ${MESA_SOURCE_PREFIX}/src/mesa/drivers/dri/i915/
> > - ${MESA_SOURCE_PREFIX}/src/mesa/drivers/dri/common/)
> > -SET(MESA_SOURCE_FOUND 1 CACHE STRING "Set to 1 if mesa source
> code
> > is found, 0 otherwise")
> > -ELSE(MESA_SOURCE_PREFIX)
> > -SET(MESA_SOURCE_FOUND 0 CACHE STRING "Set to 1 if mesa source
> code
> > is found, 0 otherwise")
> > -ENDIF(MESA_SOURCE_PREFIX)
> > diff --git a/CMakeLists.txt b/CMakeLists.txt
> > index f0b45ef..472c922 100644
> > --- a/CMakeLists.txt
> > +++ b/CMakeLists.txt
> > @@ -214,14 +214,6 @@ ELSE(EGL_FOUND)
> > MESSAGE(STATUS "Looking for EGL - not found")
> > ENDIF(EGL_FOUND)
> >
> > -# cl_khr_gl_sharing requires to build with mesa source
> > -#Find_Package(MesaSrc)
> > -#IF(MESA_SOURCE_FOUND)
> > -# MESSAGE(STATUS "Looking for mesa source code - found at
> > ${MESA_SOURCE_PREFIX}")
> > -#ELSE(MESA_SOURCE_FOUND)
> > -# MESSAGE(STATUS "Looking for mesa source code - not found,
> > cl_khr_gl_sharing will be disabled.")
> > -#ENDIF(MESA_SOURCE_FOUND)
> > -
> > Find_Package(OCLIcd)
> > IF(OCLIcd_FOUND)
> > MESSAGE(STATUS "Looking for OCL ICD header file - found")
> > diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
> > index a002865..bf1e9ae 100644
> > --- a/src/CMakeLists.txt
> > +++ b/src/CMakeLists.txt
> > @@ -3,7 +3,6 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}
> > ${DRM_INCLUDE_DIRS}/../
> > ${CMAKE_CURRENT_SOURCE_DIR}/../backend/src/backend/
> > ${CMAKE_CURRENT_SOURCE_DIR}/../include
> > - ${MESA_SOURCE_INCLUDES}
> > ${LLVM_INCLUDE_DIR})
> >
> > macro (MakeKernelBinStr KERNEL_PATH KERNEL_FILES)
> > @@ -108,14 +107,14 @@ if (CMRT_FOUND)
> > set(OPENCL_SRC ${OPENCL_SRC} cl_cmrt.cpp)
> > endif (CMRT_FOUND)
> >
> > -if (EGL_FOUND AND MESA_SOURCE_FOUND)
> > - set (OPENCL_SRC ${OPENCL_SRC} cl_mem_gl.c cl_gl_api.c
> > x11/mesa_egl_extension.c x11/mesa_egl_res_share.c
> > intel/intel_dri_resource_sharing.c)
> > +if (EGL_FOUND)
> > + set (OPENCL_SRC ${OPENCL_SRC} cl_mem_gl.c cl_gl_api.c )
> > SET(CMAKE_CXX_FLAGS "-DHAS_EGL ${CMAKE_CXX_FLAGS}")
> > SET(CMAKE_C_FLAGS "-DHAS_EGL ${CMAKE_C_FLAGS}")
> > - SET(OPTIONAL_EGL_LIBRARY "${EGL_LIBRARY}")
> > -else(EGL_FOUND AND MESA_SOURCE_FOUND)
> > + SET(OPTIONAL_EGL_LIBRARY "${EGL_LIBRARIES}")
> > +else(EGL_FOUND)
> > SET(OPTIONAL_EGL_LIBRARY "")
> > -endif (EGL_FOUND AND MESA_SOURCE_FOUND)
> > +endif (EGL_FOUND)
> >
> > if (OCLIcd_FOUND)
> > set (OPENCL_SRC ${OPENCL_SRC} cl_khr_icd.c)
> > diff --git a/src/cl_driver.h b/src/cl_driver.h
> > index 16730db..1a9b607 100644
> > --- a/src/cl_driver.h
> > +++ b/src/cl_driver.h
> > @@ -347,7 +347,7 @@ typedef cl_buffer
> > (cl_buffer_alloc_from_texture_cb)(cl_context, unsigned int, in
> > struct _cl_mem_image *gl_image);
> > extern cl_buffer_alloc_from_texture_cb *cl_buffer_alloc_from_texture;
> >
> > -typedef void (cl_buffer_release_from_texture_cb)(cl_context, unsigned
> int,
> > int, unsigned int);
> > +typedef void (cl_buffer_release_from_texture_cb)(cl_context, struct
> > _cl_mem_gl_image *);
> > extern cl_buffer_release_from_texture_cb
> > *cl_buffer_release_from_texture;
> >
> > typedef cl_buffer (cl_buffer_get_buffer_from_libva_cb)(cl_context ctx,
> > unsigned int bo_name, size_t *sz);
> > @@ -432,35 +432,5 @@ extern cl_driver_get_device_id_cb
> > *cl_driver_get_device_id;
> > typedef void (cl_driver_update_device_info_cb)(cl_device_id device);
> > extern cl_driver_update_device_info_cb *cl_driver_update_device_info;
> >
> > -
> >
> /**********************************************************
> > ****************
> > - * cl_khr_gl_sharing.
> > -
> >
> **********************************************************
> > ****************/
> > -typedef int (cl_gl_acquire_texture_cb)(void *driver, void *ctx, int target,
> > - int level, int texture, void*user_data);
> > -extern cl_gl_acquire_texture_cb *cl_gl_acquire_texture;
> > -
> > -typedef int (cl_gl_release_texture_cb)(void *driver, void *ctx, int target,
> > - int level, int texture);
> > -extern cl_gl_release_texture_cb *cl_gl_release_texture;
> > -
> > -typedef int (cl_gl_acquire_buffer_object_cb)(void *driver, void *ctx,
> > - int bufobj, void* user_data);
> > -extern cl_gl_acquire_buffer_object_cb *cl_gl_acquire_buffer_object;
> > -
> > -typedef int (cl_gl_release_buffer_object_cb)(void *driver, void *ctx, int
> > bufobj);
> > -extern cl_gl_release_buffer_object_cb *cl_gl_release_buffer_object;
> > -
> > -typedef int (cl_gl_acquire_render_buffer_cb)(void *driver, void *ctx,
> > - int rb, void* user_data);
> > -extern cl_gl_acquire_render_buffer_cb *cl_gl_acquire_render_buffer;
> > -
> > -typedef int (cl_gl_release_render_buffer_cb)(void *driver, void *ctx, int
> rb);
> > -extern cl_gl_release_render_buffer_cb *cl_gl_release_render_buffer;
> > -
> > -#ifndef DEFAULT_DRIVER_DIR
> > -/* this is normally defined in Mesa/configs/default with
> > DRI_DRIVER_SEARCH_PATH */
> > -#define DEFAULT_DRIVER_DIR "/usr/local/lib/dri"
> > -#endif
> > -
> > #endif /* __CL_DRIVER_H__ */
> >
> > diff --git a/src/cl_driver_defs.c b/src/cl_driver_defs.c
> > index 31176a4..a4a137d 100644
> > --- a/src/cl_driver_defs.c
> > +++ b/src/cl_driver_defs.c
> > @@ -56,13 +56,6 @@ LOCAL cl_buffer_get_tiling_align_cb
> > *cl_buffer_get_tiling_align = NULL;
> > LOCAL cl_buffer_get_buffer_from_fd_cb *cl_buffer_get_buffer_from_fd
> =
> > NULL;
> > LOCAL cl_buffer_get_image_from_fd_cb *cl_buffer_get_image_from_fd
> =
> > NULL;
> >
> > -/* cl_khr_gl_sharing */
> > -LOCAL cl_gl_acquire_texture_cb *cl_gl_acquire_texture = NULL;
> > -LOCAL cl_gl_release_texture_cb *cl_gl_release_texture = NULL;
> > -LOCAL cl_gl_acquire_buffer_object_cb *cl_gl_acquire_buffer_object =
> > NULL;
> > -LOCAL cl_gl_release_buffer_object_cb *cl_gl_release_buffer_object =
> > NULL;
> > -LOCAL cl_gl_acquire_render_buffer_cb *cl_gl_acquire_render_buffer =
> > NULL;
> > -LOCAL cl_gl_release_render_buffer_cb *cl_gl_release_render_buffer =
> > NULL;
> > /* GPGPU */
> > LOCAL cl_gpgpu_new_cb *cl_gpgpu_new = NULL;
> > LOCAL cl_gpgpu_delete_cb *cl_gpgpu_delete = NULL;
> > diff --git a/src/cl_gl_api.c b/src/cl_gl_api.c
> > index 519aab6..e89bb15 100644
> > --- a/src/cl_gl_api.c
> > +++ b/src/cl_gl_api.c
> > @@ -95,16 +95,7 @@ clCreateFromGLTexture3D(cl_context context,
> > GLuint texture,
> > cl_int * errcode_ret)
> > {
> > - cl_mem mem = NULL;
> > - cl_int err = CL_SUCCESS;
> > - CHECK_CONTEXT (context);
> > - CHECK_GL_CONTEXT (context);
> > -
> > - mem = cl_mem_new_gl_texture(context, flags, texture_target, miplevel,
> > texture, &err);
> > -error:
> > - if (errcode_ret)
> > - *errcode_ret = err;
> > - return mem;
> > + NOT_IMPLEMENTED;
> > }
> >
> > cl_mem
> > @@ -120,6 +111,12 @@ clCreateFromGLTexture(cl_context context,
> > CHECK_CONTEXT (context);
> > CHECK_GL_CONTEXT (context);
> >
> > + //We just support GL_TEXTURE_2D now.
> > + if(target != GL_TEXTURE_2D){
> > + err = CL_INVALID_VALUE;
> > + goto error;
> > + }
> > +
> > mem = cl_mem_new_gl_texture(context, flags, target, miplevel, texture,
> > &err);
> > error:
> > if (errcode_ret)
> > diff --git a/src/cl_mem.h b/src/cl_mem.h
> > index c8f256d..ae85b73 100644
> > --- a/src/cl_mem.h
> > +++ b/src/cl_mem.h
> > @@ -26,6 +26,9 @@
> > #include "cl_khr_icd.h"
> > #include <assert.h>
> > #include <pthread.h>
> > +#if defined(HAS_EGL)
> > +#include "EGL/egl.h"
> > +#endif
> >
> > #ifndef CL_VERSION_1_2
> > #define CL_MEM_OBJECT_IMAGE1D 0x10F4
> > @@ -118,9 +121,10 @@ struct _cl_mem_image {
> >
> > struct _cl_mem_gl_image {
> > struct _cl_mem_image base;
> > - uint32_t target;
> > - int miplevel;
> > - uint32_t texture;
> > + int fd;
> > +#if defined(HAS_EGL)
> > + EGLImage egl_image;
> > +#endif
> > };
> >
> > struct _cl_mem_buffer1d_image {
> > diff --git a/src/cl_mem_gl.c b/src/cl_mem_gl.c
> > index b0b2c1b..fdad067 100644
> > --- a/src/cl_mem_gl.c
> > +++ b/src/cl_mem_gl.c
> > @@ -74,10 +74,6 @@ cl_mem_new_gl_texture(cl_context ctx,
> > goto error;
> > }
> >
> > - cl_mem_gl_image(mem)->target = texture_target;
> > - cl_mem_gl_image(mem)->miplevel = miplevel;
> > - cl_mem_gl_image(mem)->texture = texture;
> > -
> > exit:
> > if (errcode_ret)
> > *errcode_ret = err;
> > @@ -92,6 +88,5 @@ error:
> > LOCAL void cl_mem_gl_delete(struct _cl_mem_gl_image *gl_image)
> > {
> > if (gl_image->base.base.bo != NULL)
> > - cl_buffer_release_from_texture(gl_image->base.base.ctx, gl_image-
> > >target,
> > - gl_image->miplevel, gl_image->texture);
> > + cl_buffer_release_from_texture(gl_image->base.base.ctx, gl_image);
> > }
> > diff --git a/src/intel/intel_cl_gl_share_image_info.h
> > b/src/intel/intel_cl_gl_share_image_info.h
> > new file mode 100644
> > index 0000000..21fbbd1
> > --- /dev/null
> > +++ b/src/intel/intel_cl_gl_share_image_info.h
> > @@ -0,0 +1,18 @@
> > +#ifndef __INTEL_CL_GL_SHARE_IMAGE_INFO_
> > +#define __INTEL_CL_GL_SHARE_IMAGE_INFO_
> > +
> > +struct _intel_cl_gl_share_image_info {
> > + int fd;
> > + size_t w;
> > + size_t h;
> > + size_t depth;
> > + size_t pitch;
> > + int tiling;
> > + size_t offset;
> > + size_t tile_x;
> > + size_t tile_y;
> > + unsigned int gl_format;
> > + size_t row_pitch, slice_pitch;
> > +};
> > +
> > +#endif
> > diff --git a/src/intel/intel_dri_resource_sharing.c
> > b/src/intel/intel_dri_resource_sharing.c
> > deleted file mode 100644
> > index 188c1fa..0000000
> > --- a/src/intel/intel_dri_resource_sharing.c
> > +++ /dev/null
> > @@ -1,208 +0,0 @@
> > -
> >
> /**********************************************************
> > ****************
> > - *
> > - * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
> > - * All Rights Reserved.
> > - *
> > - * Permission is hereby granted, free of charge, to any person obtaining a
> > - * copy of this software and associated documentation files (the
> > - * "Software"), to deal in the Software without restriction, including
> > - * without limitation the rights to use, copy, modify, merge, publish,
> > - * distribute, sub license, and/or sell copies of the Software, and to
> > - * permit persons to whom the Software is furnished to do so, subject to
> > - * the following conditions:
> > - *
> > - * The above copyright notice and this permission notice (including the
> > - * next paragraph) shall be included in all copies or substantial portions
> > - * of the Software.
> > - *
> > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
> KIND,
> > EXPRESS
> > - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-
> > INFRINGEMENT.
> > - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE
> > LIABLE FOR
> > - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
> > CONTRACT,
> > - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
> WITH
> > THE
> > - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> > - *
> > -
> >
> **********************************************************
> > ****************/
> > -
> > -#define HAVE_PTHREAD 1
> > -#include <errno.h>
> > -#include <time.h>
> > -#include "main/context.h"
> > -#include "main/renderbuffer.h"
> > -#include "main/texobj.h"
> > -#include <stdbool.h>
> > -#include <string.h>
> > -#include <drm.h>
> > -#include <i915_drm.h>
> > -#include <intel_bufmgr.h>
> > -#include <GL/internal/dri_interface.h>
> > -#include "intel_mipmap_tree.h"
> > -#include "intel_regions.h"
> > -#include "intel_context.h"
> > -
> > -#include "intel_dri_resource_sharing.h"
> > -#include "intel_dri_resource_sharing_int.h"
> > -
> > -#include <dlfcn.h>
> > -/**
> > - * Sets up a DRIImage structure to point to our shared image in a region
> > - */
> > -static bool
> > -intel_setup_cl_region_from_mipmap_tree(void *driver,
> > - struct intel_context *intel,
> > - struct intel_mipmap_tree *mt,
> > - GLuint level, GLuint zoffset,
> > - struct _intel_dri_share_image_region *region)
> > -{
> > - unsigned int draw_x, draw_y;
> > - uint32_t mask_x, mask_y;
> > - struct intel_region *null_region = (struct intel_region *)NULL;
> > -
> > - intel_miptree_check_level_layer(mt, level, zoffset);
> > -
> > - _intel_region_get_tile_masks(mt->region, &mask_x, &mask_y, false);
> > - _intel_miptree_get_image_offset(mt, level, zoffset, &draw_x,
> &draw_y);
> > -
> > - region->w = mt->level[level].width;
> > - region->h = mt->level[level].height;
> > - region->tile_x = draw_x & mask_x;
> > - region->tile_y = draw_y & mask_y;
> > - region->tiling = mt->region->tiling;
> > - /* XXX hard code to 1 right now. */
> > - region->depth = 1;
> > - region->row_pitch = mt->region->pitch;
> > -
> > - region->offset = _intel_region_get_aligned_offset(mt->region,
> > - draw_x & ~mask_x,
> > - draw_y & ~mask_y,
> > - false);
> > - if (!_intel_region_flink(mt->region, ®ion->name))
> > - return false;
> > - _intel_region_reference(&null_region, mt->region);
> > - return true;
> > -}
> > -
> > -typedef void
> > -_mesa_test_texobj_completeness_t( const struct gl_context *ctx,
> > - struct gl_texture_object *t );
> > -_mesa_test_texobj_completeness_t
> *__mesa_test_texobj_completeness;
> > -
> > -typedef struct gl_texture_object *
> > -_mesa_lookup_texture_t( const struct gl_context *ctx, GLuint id);
> > -_mesa_lookup_texture_t *__mesa_lookup_texture;
> > -
> > -static struct gl_texture_object *
> > -intel_get_gl_obj_from_texture(void *driver,
> > - struct intel_context *intel,
> > - GLenum target, GLint level,
> > - GLuint texture, GLuint face)
> > -{
> > - struct gl_texture_object *obj;
> > - __mesa_lookup_texture = dlsym(driver, "_mesa_lookup_texture");
> > - obj = __mesa_lookup_texture(&intel->ctx, texture);
> > - if (!obj || obj->Target != target) {
> > - return NULL;
> > - }
> > -
> > - __mesa_test_texobj_completeness = dlsym(driver,
> > "_mesa_test_texobj_completeness");
> > - __mesa_test_texobj_completeness(&intel->ctx, obj);
> > - if (!obj->_BaseComplete || (level > 0 && !obj->_MipmapComplete)) {
> > - return NULL;
> > - }
> > -
> > - if (level < obj->BaseLevel || level > obj->_MaxLevel) {
> > - return NULL;
> > - }
> > -
> > - return obj;
> > -}
> > -
> > -static GLenum
> > -get_cl_gl_format(mesa_format format)
> > -{
> > - switch (format) {
> > - case MESA_FORMAT_R8G8B8A8_UNORM:
> > - return GL_RGBA;
> > - case MESA_FORMAT_A8R8G8B8_UNORM:
> > - return GL_BGRA;
> > - default:
> > - return GL_BGRA;
> > - }
> > -}
> > -
> > -static bool
> > -intelAcquireTexture(void *driver, __DRIcontext *context, GLenum target,
> > - GLint level, GLuint texture, void *user_data)
> > -{
> > - struct _intel_dri_share_image_region *region =
> > intel_dri_share_image_region(user_data);
> > - struct intel_context *intel = context->driverPrivate;
> > - struct gl_texture_object *obj;
> > - struct intel_texture_object *iobj;
> > - /* XXX Always be face 0? */
> > - GLuint face = 0;
> > -
> > - obj = intel_get_gl_obj_from_texture(driver, intel, target, level, texture,
> > face);
> > - if (obj == NULL)
> > - return false;
> > - iobj = intel_texture_object(obj);
> > - region->gl_format = get_cl_gl_format(obj->Image[face][level]-
> > >TexFormat);
> > - return intel_setup_cl_region_from_mipmap_tree(driver, intel, iobj->mt,
> > level, 0, region);
> > -}
> > -
> > -static bool
> > -intelReleaseTexture(void *driver, __DRIcontext *context, GLenum target,
> > - GLint level, GLuint texture)
> > -{
> > - struct intel_context *intel = context->driverPrivate;
> > - struct gl_texture_object *obj;
> > - struct intel_texture_object *iobj;
> > - /* XXX Always be face 0? */
> > - GLuint face = 0;
> > -
> > - obj = intel_get_gl_obj_from_texture(driver, intel, target, level, texture,
> > face);
> > - if (obj == NULL)
> > - return false;
> > -
> > - iobj = intel_texture_object(obj);
> > - _intel_region_release(&iobj->mt->region);
> > - return true;
> > -}
> > -
> > -static bool
> > -intelAcquireBufferObj(void *driver, __DRIcontext *driContextPriv,
> > - GLuint bufobj, void *user_data)
> > -{
> > - return false;
> > -}
> > -
> > -static bool
> > -intelReleaseBufferObj(void *driver, __DRIcontext *driContextPriv, GLuint
> > bufobj)
> > -{
> > - return false;
> > -}
> > -
> > -static bool
> > -intelAcquireRenderBuffer(void *driver, __DRIcontext *driContextPriv,
> > - GLuint bufobj, void *user_data)
> > -{
> > - return false;
> > -}
> > -
> > -static bool
> > -intelReleaseRenderBuffer(void *driver, __DRIcontext *driContextPriv,
> > GLuint bufobj)
> > -{
> > - return false;
> > -}
> > -
> > -#include "cl_driver.h"
> > -void
> > -intel_set_cl_gl_callbacks(void)
> > -{
> > - cl_gl_acquire_texture = (cl_gl_acquire_texture_cb*)intelAcquireTexture;
> > - cl_gl_release_texture = (cl_gl_release_texture_cb*)intelReleaseTexture;
> > - cl_gl_acquire_buffer_object =
> > (cl_gl_acquire_buffer_object_cb*)intelAcquireBufferObj;
> > - cl_gl_release_buffer_object =
> > (cl_gl_release_buffer_object_cb*)intelReleaseBufferObj;
> > - cl_gl_acquire_render_buffer =
> > (cl_gl_acquire_render_buffer_cb*)intelAcquireRenderBuffer;
> > - cl_gl_release_render_buffer =
> > (cl_gl_release_render_buffer_cb*)intelReleaseRenderBuffer;
> > -}
> > diff --git a/src/intel/intel_dri_resource_sharing.h
> > b/src/intel/intel_dri_resource_sharing.h
> > deleted file mode 100644
> > index 6d2ce4d..0000000
> > --- a/src/intel/intel_dri_resource_sharing.h
> > +++ /dev/null
> > @@ -1,39 +0,0 @@
> > -#ifndef __INTEL_DRI_RESOURCE_SHARING_H__
> > -#define __INTEL_DRI_RESOURCE_SHARING_H__
> > -
> > -struct _intel_dri_share_image_region {
> > - unsigned int name;
> > - size_t w;
> > - size_t h;
> > - size_t depth;
> > - size_t pitch;
> > - int tiling;
> > - size_t offset;
> > - size_t tile_x;
> > - size_t tile_y;
> > - unsigned int gl_format;
> > - size_t row_pitch, slice_pitch;
> > -};
> > -
> > -struct _intel_dri_share_buffer_object {
> > - unsigned int name;
> > - size_t sz;
> > - size_t offset;
> > -};
> > -
> > -inline static struct _intel_dri_share_image_region *
> > -intel_dri_share_image_region(void *user_data)
> > -{
> > - return (struct _intel_dri_share_image_region *)user_data;
> > -}
> > -
> > -inline static struct _intel_dri_share_buffer_object *
> > -intel_dri_share_buffer_object(void *user_data)
> > -{
> > - return (struct _intel_dri_share_buffer_object *)user_data;
> > -}
> > -
> > -extern void intel_set_cl_gl_callbacks(void);
> > -
> > -
> > -#endif
> > diff --git a/src/intel/intel_dri_resource_sharing_int.h
> > b/src/intel/intel_dri_resource_sharing_int.h
> > deleted file mode 100644
> > index c7b283a..0000000
> > --- a/src/intel/intel_dri_resource_sharing_int.h
> > +++ /dev/null
> > @@ -1,143 +0,0 @@
> > -
> >
> /**********************************************************
> > *******
> > - * The following functions are copied from i965 driver, commit
> > - * id 292368570a13501dfa95b1b0dd70966caf6ffc6b. Need to keep
> consistant
> > - * with the dri driver installed on current system.
> > -
> >
> **********************************************************
> > *******/
> > -static bool
> > -_intel_region_flink(struct intel_region *region, uint32_t *name)
> > -{
> > - if (region->name == 0) {
> > - if (drm_intel_bo_flink(region->bo, ®ion->name))
> > - return false;
> > - }
> > -
> > - *name = region->name;
> > -
> > - return true;
> > -}
> > -
> > -#define _DBG(...)
> > -static void
> > -_intel_region_release(struct intel_region **region_handle)
> > -{
> > - struct intel_region *region = *region_handle;
> > -
> > - if (region == NULL) {
> > - _DBG("%s NULL\n", __FUNCTION__);
> > - return;
> > - }
> > -
> > - _DBG("%s %p %d\n", __FUNCTION__, region, region->refcount - 1);
> > -
> > - ASSERT(region->refcount > 0);
> > - region->refcount--;
> > -
> > - if (region->refcount == 0) {
> > - drm_intel_bo_unreference(region->bo);
> > -
> > - free(region);
> > - }
> > - *region_handle = NULL;
> > -}
> > -
> > -static void
> > -_intel_region_reference(struct intel_region **dst, struct intel_region *src)
> > -{
> > - _DBG("%s: %p(%d) -> %p(%d)\n", __FUNCTION__,
> > - *dst, *dst ? (*dst)->refcount : 0, src, src ? src->refcount : 0);
> > -
> > - if (src != *dst) {
> > - if (*dst)
> > - _intel_region_release(dst);
> > -
> > - if (src)
> > - src->refcount++;
> > - *dst = src;
> > - }
> > -}
> > -
> > -/**
> > - * This function computes masks that may be used to select the bits of the
> X
> > - * and Y coordinates that indicate the offset within a tile. If the region is
> > - * untiled, the masks are set to 0.
> > - */
> > -static void
> > -_intel_region_get_tile_masks(struct intel_region *region,
> > - uint32_t *mask_x, uint32_t *mask_y,
> > - bool map_stencil_as_y_tiled)
> > -{
> > - int cpp = region->cpp;
> > - uint32_t tiling = region->tiling;
> > -
> > - if (map_stencil_as_y_tiled)
> > - tiling = I915_TILING_Y;
> > -
> > - switch (tiling) {
> > - default:
> > - assert(false);
> > - case I915_TILING_NONE:
> > - *mask_x = *mask_y = 0;
> > - break;
> > - case I915_TILING_X:
> > - *mask_x = 512 / cpp - 1;
> > - *mask_y = 7;
> > - break;
> > - case I915_TILING_Y:
> > - *mask_x = 128 / cpp - 1;
> > - *mask_y = 31;
> > - break;
> > - }
> > -}
> > -
> > -/**
> > - * Compute the offset (in bytes) from the start of the region to the given x
> > - * and y coordinate. For tiled regions, caller must ensure that x and y are
> > - * multiples of the tile size.
> > - */
> > -static uint32_t
> > -_intel_region_get_aligned_offset(struct intel_region *region, uint32_t x,
> > - uint32_t y, bool map_stencil_as_y_tiled)
> > -{
> > - int cpp = region->cpp;
> > - uint32_t pitch = region->pitch;
> > - uint32_t tiling = region->tiling;
> > -
> > - if (map_stencil_as_y_tiled) {
> > - tiling = I915_TILING_Y;
> > -
> > - /* When mapping a W-tiled stencil buffer as Y-tiled, each 64-high W-tile
> > - * gets transformed into a 32-high Y-tile. Accordingly, the pitch of
> > - * the resulting region is twice the pitch of the original region, since
> > - * each row in the Y-tiled view corresponds to two rows in the actual
> > - * W-tiled surface. So we need to correct the pitch before computing
> > - * the offsets.
> > - */
> > - pitch *= 2;
> > - }
> > -
> > - switch (tiling) {
> > - default:
> > - assert(false);
> > - case I915_TILING_NONE:
> > - return y * pitch + x * cpp;
> > - case I915_TILING_X:
> > - assert((x % (512 / cpp)) == 0);
> > - assert((y % 8) == 0);
> > - return y * pitch + x / (512 / cpp) * 4096;
> > - case I915_TILING_Y:
> > - assert((x % (128 / cpp)) == 0);
> > - assert((y % 32) == 0);
> > - return y * pitch + x / (128 / cpp) * 4096;
> > - }
> > -}
> > -
> > -static void
> > -_intel_miptree_get_image_offset(struct intel_mipmap_tree *mt,
> > - GLuint level, GLuint slice,
> > - GLuint *x, GLuint *y)
> > -{
> > - assert(slice < mt->level[level].depth);
> > -
> > - *x = mt->level[level].slice[slice].x_offset;
> > - *y = mt->level[level].slice[slice].y_offset;
> > -}
> > diff --git a/src/intel/intel_driver.c b/src/intel/intel_driver.c
> > index e561725..6d3337a 100644
> > --- a/src/intel/intel_driver.c
> > +++ b/src/intel/intel_driver.c
> > @@ -47,9 +47,10 @@
> > */
> >
> > #if defined(HAS_EGL)
> > +#define EGL_EGLEXT_PROTOTYPES
> > #include "GL/gl.h"
> > #include "EGL/egl.h"
> > -#include "x11/mesa_egl_extension.h"
> > +#include <EGL/eglext.h>
> > #endif
> >
> > #ifdef HAS_X11
> > @@ -537,8 +538,25 @@ static uint32_t
> > intel_buffer_get_tiling_align(cl_context ctx, uint32_t tiling_mo
> > }
> >
> > #if defined(HAS_EGL)
> > -#include "intel_dri_resource_sharing.h"
> > +#include "intel_cl_gl_share_image_info.h"
> > #include "cl_image.h"
> > +
> > +static PFNEGLEXPORTDMABUFIMAGEMESAPROC
> > eglExportDMABUFImageMESA_func = NULL;
> > +
> > +static int
> > +get_required_egl_extensions(){
> > +
> > + if(eglExportDMABUFImageMESA_func == NULL){
> > + eglExportDMABUFImageMESA_func =
> > (PFNEGLEXPORTDMABUFIMAGEMESAPROC)
> > eglGetProcAddress("eglExportDMABUFImageMESA");
> > + if(eglExportDMABUFImageMESA_func == NULL){
> > + fprintf(stderr, "Failed to get EGL extension function
> > eglExportDMABUFImageMESA\n");
> > + return -1;
> > + }
> > + }
> > + return 0;
> > +}
> > +
> > +
> > static int cl_get_clformat_from_texture(GLint tex_format,
> cl_image_format
> > * cl_format)
> > {
> > cl_int ret = CL_SUCCESS;
> > @@ -627,29 +645,68 @@ intel_alloc_buffer_from_texture_egl(cl_context
> > ctx, unsigned int target,
> > int miplevel, unsigned int texture,
> > struct _cl_mem_image *image)
> > {
> > - cl_buffer bo = (cl_buffer) NULL;
> > - struct _intel_dri_share_image_region region;
> > + drm_intel_bo *intel_bo = NULL;
> > + struct _intel_cl_gl_share_image_info info;
> > unsigned int bpp, intel_fmt;
> > cl_image_format cl_format;
> > EGLBoolean ret;
> > - EGLint attrib_list[] = { EGL_GL_TEXTURE_ID_MESA, texture,
> > - EGL_GL_TEXTURE_LEVEL_MESA, miplevel,
> > - EGL_GL_TEXTURE_TARGET_MESA, target,
> > - EGL_NONE};
> > - ret = eglAcquireResourceMESA(EGL_DISP(ctx), EGL_CTX(ctx),
> > - EGL_GL_TEXTURE_MESA,
> > - &attrib_list[0], ®ion);
> > - if (!ret)
> > - goto out;
> > -
> > - bo = (cl_buffer)intel_driver_share_buffer((intel_driver_t *)ctx->drv,
> > "rendering buffer", region.name);
> >
> > - if (bo == NULL) {
> > - eglReleaseResourceMESA(EGL_DISP(ctx), EGL_CTX(ctx),
> > EGL_GL_TEXTURE_MESA, &attrib_list[0]);
> > - goto out;
> > + EGLenum e_target;
> > + //We just support GL_TEXTURE_2D because we can't query info like
> > slice_pitch now.
> > + if(target == GL_TEXTURE_2D)
> > + e_target = EGL_GL_TEXTURE_2D;
> > + else
> > + return NULL;
> > +
> > + if(get_required_egl_extensions() != 0)
> > + return NULL;
> > +
> > + EGLAttrib attrib_list[] = {EGL_GL_TEXTURE_LEVEL, miplevel,
> > + EGL_NONE};
> > + EGLImage e_image = eglCreateImage(EGL_DISP(ctx), EGL_CTX(ctx),
> > e_target,
> > + (EGLClientBuffer)texture, &attrib_list[0]);
> > + if(e_image == EGL_NO_IMAGE)
> > + return NULL;
> > +
> > + int fd, stride, offset;
> > + ret = eglExportDMABUFImageMESA_func(EGL_DISP(ctx), e_image, &fd,
> > &stride, &offset);
> > + if(ret != EGL_TRUE){
> > + eglDestroyImage(EGL_DISP(ctx), e_image);
> > + return NULL;
> > + }
> > + info.fd = fd;
> > +
> > + /* The size argument just takes effect in
> > intel_driver_share_buffer_from_fd when
> > + * Linux kernel is older than 3.12, so it doesn't matter we set to 0 here.
> > + */
> > + int size = 0;
> > + intel_bo = intel_driver_share_buffer_from_fd((intel_driver_t *)ctx->drv,
> > fd, size);
> > +
> > + if (intel_bo == NULL) {
> > + eglDestroyImage(EGL_DISP(ctx), e_image);
> > + return NULL;
> > }
> > - region.tiling = get_cl_tiling(region.tiling);
> > - if (cl_get_clformat_from_texture(region.gl_format, &cl_format) != 0)
> > +
> > + GLint param_value;
> > + glGetTexLevelParameteriv(target, miplevel, GL_TEXTURE_WIDTH,
> > ¶m_value);
> > + info.w = param_value;
> > + glGetTexLevelParameteriv(target, miplevel, GL_TEXTURE_HEIGHT,
> > ¶m_value);
> > + info.h = param_value;
> > + glGetTexLevelParameteriv(target, miplevel, GL_TEXTURE_DEPTH,
> > ¶m_value);
> > + info.depth = 1;
> > + info.pitch = stride;
> > + uint32_t tiling_mode, swizzle_mode;
> > + drm_intel_bo_get_tiling(intel_bo, &tiling_mode, &swizzle_mode);
> > + info.offset = offset;
> > + info.tile_x = 0;
> > + info.tile_y = 0;
> > + glGetTexLevelParameteriv(target, miplevel,
> > GL_TEXTURE_INTERNAL_FORMAT, ¶m_value);
> > + info.gl_format = param_value;
> > + info.row_pitch = stride;
> > + info.slice_pitch = 0;
> > +
> > + info.tiling = get_cl_tiling(tiling_mode);
> > + if (cl_get_clformat_from_texture(info.gl_format, &cl_format) != 0)
> > goto error;
> >
> > if (cl_image_byte_per_pixel(&cl_format, &bpp) != CL_SUCCESS)
> > @@ -661,17 +718,22 @@ intel_alloc_buffer_from_texture_egl(cl_context
> > ctx, unsigned int target,
> > if (get_mem_type_from_target(target, &image_type) != 0)
> > goto error;
> >
> > - cl_mem_image_init(image, region.w, region.h,
> > - image_type, region.depth, cl_format,
> > - intel_fmt, bpp, region.row_pitch,
> > - region.slice_pitch, region.tiling,
> > - region.tile_x, region.tile_y, region.offset);
> > -out:
> > - return bo;
> > + cl_mem_image_init(image, info.w, info.h,
> > + image_type, info.depth, cl_format,
> > + intel_fmt, bpp, info.row_pitch,
> > + info.slice_pitch, info.tiling,
> > + info.tile_x, info.tile_y, info.offset);
> > +
> > + struct _cl_mem_gl_image *gl_image = (struct
> _cl_mem_gl_image*)image;
> > + gl_image->fd = fd;
> > + gl_image->egl_image = e_image;
> > +
> > + return (cl_buffer) intel_bo;
> >
> > error:
> > - cl_buffer_unreference(bo);
> > - eglReleaseResourceMESA(EGL_DISP(ctx), EGL_CTX(ctx),
> > EGL_GL_TEXTURE_MESA, &attrib_list[0]);
> > + drm_intel_bo_unreference(intel_bo);
> > + close(fd);
> > + eglDestroyImage(EGL_DISP(ctx), e_image);
> > return NULL;
> > }
> >
> > @@ -688,16 +750,11 @@ intel_alloc_buffer_from_texture(cl_context ctx,
> > unsigned int target,
> > }
> >
> > static int
> > -intel_release_buffer_from_texture(cl_context ctx, unsigned int target,
> > - int miplevel, unsigned int texture)
> > +intel_release_buffer_from_texture(cl_context ctx, struct
> > _cl_mem_gl_image *gl_image)
> > {
> > if (IS_EGL_CONTEXT(ctx)) {
> > - EGLint attrib_list[] = { EGL_GL_TEXTURE_ID_MESA, texture,
> > - EGL_GL_TEXTURE_LEVEL_MESA, miplevel,
> > - EGL_GL_TEXTURE_TARGET_MESA, target,
> > - EGL_NONE};
> > -
> > - eglReleaseResourceMESA(EGL_DISP(ctx), EGL_CTX(ctx),
> > EGL_GL_TEXTURE_MESA, &attrib_list[0]);
> > + close(gl_image->fd);
> > + eglDestroyImage(EGL_DISP(ctx), gl_image->egl_image);
> > return CL_SUCCESS;
> > }
> > return -1;
> > @@ -931,7 +988,6 @@ intel_setup_callbacks(void)
> > #if defined(HAS_EGL)
> > cl_buffer_alloc_from_texture = (cl_buffer_alloc_from_texture_cb *)
> > intel_alloc_buffer_from_texture;
> > cl_buffer_release_from_texture = (cl_buffer_release_from_texture_cb
> *)
> > intel_release_buffer_from_texture;
> > - intel_set_cl_gl_callbacks();
> > #endif
> > cl_buffer_get_buffer_from_libva =
> (cl_buffer_get_buffer_from_libva_cb
> > *) intel_share_buffer_from_libva;
> > cl_buffer_get_image_from_libva = (cl_buffer_get_image_from_libva_cb
> *)
> > intel_share_image_from_libva;
> > diff --git a/src/x11/mesa_egl_extension.c b/src/x11/mesa_egl_extension.c
> > deleted file mode 100644
> > index 4a3e89c..0000000
> > --- a/src/x11/mesa_egl_extension.c
> > +++ /dev/null
> > @@ -1,306 +0,0 @@
> > -#include <stdio.h>
> > -#include "mesa_egl_extension.h"
> > -#include "mesa_egl_res_share.h"
> > -#include "src/cl_driver.h"
> > -
> > -struct _egl_display;
> > -struct _egl_resource;
> > -struct _egl_thread_info;
> > -struct _egl_config;
> > -struct _egl_surface;
> > -struct _egl_driver;
> > -
> > -typedef struct _egl_display _EGLDisplay;
> > -typedef struct _egl_resource _EGLResource;
> > -typedef struct _egl_thread_info _EGLThreadInfo;
> > -typedef struct _egl_config _EGLConfig;
> > -typedef struct _egl_surface _EGLSurface;
> > -typedef struct _egl_driver _EGLDriver;
> > -
> > -/**
> > - * A resource of a display.
> > - */
> > -struct _egl_resource
> > -{
> > - /* which display the resource belongs to */
> > - _EGLDisplay *Display;
> > - EGLBoolean IsLinked;
> > - EGLint RefCount;
> > -
> > - /* used to link resources of the same type */
> > - _EGLResource *Next;
> > -};
> > -
> > -/**
> > - * "Base" class for device driver contexts.
> > - */
> > -struct _egl_context
> > -{
> > - /* A context is a display resource */
> > - _EGLResource Resource;
> > -
> > - /* The bound status of the context */
> > - _EGLThreadInfo *Binding;
> > - _EGLSurface *DrawSurface;
> > - _EGLSurface *ReadSurface;
> > -
> > - _EGLConfig *Config;
> > -
> > - EGLint ClientAPI; /**< EGL_OPENGL_ES_API, EGL_OPENGL_API,
> > EGL_OPENVG_API */
> > - EGLint ClientMajorVersion;
> > - EGLint ClientMinorVersion;
> > - EGLint Flags;
> > - EGLint Profile;
> > - EGLint ResetNotificationStrategy;
> > -
> > - /* The real render buffer when a window surface is bound */
> > - EGLint WindowRenderBuffer;
> > -};
> > -
> > -typedef struct _egl_context _EGLContext;
> > -
> > -struct dri2_egl_display
> > -{
> > - int dri2_major;
> > - int dri2_minor;
> > - __DRIscreen *dri_screen;
> > - int own_dri_screen;
> > - const __DRIconfig **driver_configs;
> > - void *driver;
> > -};
> > -
> > -enum _egl_platform_type {
> > - _EGL_PLATFORM_WINDOWS,
> > - _EGL_PLATFORM_X11,
> > - _EGL_PLATFORM_WAYLAND,
> > - _EGL_PLATFORM_DRM,
> > - _EGL_PLATFORM_FBDEV,
> > - _EGL_PLATFORM_NULL,
> > - _EGL_PLATFORM_ANDROID,
> > -
> > - _EGL_NUM_PLATFORMS,
> > - _EGL_INVALID_PLATFORM = -1
> > -};
> > -typedef enum _egl_platform_type _EGLPlatformType;
> > -
> > -typedef pthread_mutex_t _EGLMutex;
> > -
> > -struct _egl_display
> > -{
> > - /* used to link displays */
> > - _EGLDisplay *Next;
> > -
> > - _EGLMutex Mutex;
> > -
> > - _EGLPlatformType Platform; /**< The type of the platform display */
> > - void *PlatformDisplay; /**< A pointer to the platform display */
> > -
> > - _EGLDriver *Driver; /**< Matched driver of the display */
> > - EGLBoolean Initialized; /**< True if the display is initialized */
> > -
> > - /* options that affect how the driver initializes the display */
> > - struct {
> > - EGLBoolean TestOnly; /**< Driver should not set fields when true */
> > - EGLBoolean UseFallback; /**< Use fallback driver (sw or less features)
> */
> > - } Options;
> > -
> > - /* these fields are set by the driver during init */
> > - void *DriverData; /**< Driver private data */
> > -};
> > -
> > -static struct dri2_egl_display *
> > -dri2_egl_display(_EGLDisplay *dpy)
> > -{
> > - return (struct dri2_egl_display *)dpy->DriverData;
> > -}
> > -
> > -static _EGLDisplay *
> > -_eglLockDisplay(EGLDisplay dpy)
> > -{
> > - return (_EGLDisplay *)dpy;
> > -}
> > -
> > -static _EGLContext *
> > -_eglLookupContext(EGLContext ctx, EGLDisplay disp)
> > -{
> > - return (_EGLContext *) ctx;
> > -}
> > -
> > -struct dri2_egl_context
> > -{
> > - _EGLContext base;
> > - __DRIcontext *dri_context;
> > -};
> > -
> > -static struct dri2_egl_context *
> > -dri2_egl_context(_EGLContext *ctx)
> > -{
> > - return (struct dri2_egl_context *)ctx;
> > -}
> > -
> > -static EGLBoolean
> > -dri2_acquire_texture(_EGLDisplay *disp,
> > - _EGLContext *ctx,
> > - const EGLint *attr_list,
> > - void *user_data)
> > -{
> > - struct dri2_egl_context *dri2_ctx = dri2_egl_context(ctx);
> > - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> > - GLuint texture = 0;
> > - GLenum gl_target = 0;
> > - GLint level = 0;
> > - GLboolean ret;
> > -
> > - if (_eglParseTextureAttribList(&texture, &gl_target, &level, attr_list) !=
> > EGL_SUCCESS)
> > - return EGL_FALSE;
> > -
> > - ret = cl_gl_acquire_texture(dri2_dpy->driver,
> > - dri2_ctx->dri_context,
> > - gl_target, level, texture,
> > - user_data);
> > - return ret;
> > -}
> > -
> > -static EGLBoolean
> > -dri2_release_texture(_EGLDisplay *disp, _EGLContext *ctx, const EGLint
> > *attr_list)
> > -{
> > - struct dri2_egl_context *dri2_ctx = dri2_egl_context(ctx);
> > - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> > - GLuint texture = 0;
> > - GLenum gl_target = 0;
> > - GLint level = 0;
> > - GLboolean ret;
> > -
> > - if (_eglParseTextureAttribList(&texture, &gl_target, &level, attr_list) !=
> > EGL_SUCCESS)
> > - return EGL_FALSE;
> > -
> > - ret = cl_gl_release_texture(dri2_dpy->driver, dri2_ctx->dri_context,
> > - gl_target, level, texture);
> > - return ret;
> > -}
> > -
> > -static EGLBoolean
> > -dri2_acquire_buffer_object(_EGLDisplay *disp, _EGLContext *ctx, const
> > EGLint *attr_list,
> > - void *user_data)
> > -{
> > - struct dri2_egl_context *dri2_ctx = dri2_egl_context(ctx);
> > - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> > - GLuint bufobj = 0;
> > - GLboolean ret;
> > -
> > - if (_eglParseBufferObjAttribList(&bufobj, attr_list) != EGL_SUCCESS)
> > - return EGL_FALSE;
> > -
> > - ret = cl_gl_acquire_buffer_object(dri2_dpy->driver,
> > - dri2_ctx->dri_context,
> > - bufobj, user_data);
> > - return ret;
> > -}
> > -
> > -static EGLBoolean
> > -dri2_release_buffer_object(_EGLDisplay *disp, _EGLContext *ctx, const
> > EGLint *attr_list)
> > -{
> > - struct dri2_egl_context *dri2_ctx = dri2_egl_context(ctx);
> > - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> > - GLuint bufobj = 0;
> > - GLboolean ret;
> > -
> > - if (_eglParseBufferObjAttribList(&bufobj, attr_list) != EGL_SUCCESS)
> > - return EGL_FALSE;
> > -
> > - ret = cl_gl_release_buffer_object(dri2_dpy->driver,
> > - dri2_ctx->dri_context,
> > - bufobj);
> > - return ret;
> > -}
> > -
> > -static EGLBoolean
> > -dri2_acquire_render_buffer(_EGLDisplay *disp,
> > - _EGLContext *ctx,
> > - const EGLint *attr_list,
> > - void *user_data)
> > -{
> > - struct dri2_egl_context *dri2_ctx = dri2_egl_context(ctx);
> > - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> > - GLuint rb = 0;
> > - GLboolean ret;
> > -
> > - if (_eglParseBufferObjAttribList(&rb, attr_list) != EGL_SUCCESS)
> > - return EGL_FALSE;
> > -
> > - ret = cl_gl_acquire_render_buffer(dri2_dpy->driver,
> > - dri2_ctx->dri_context,
> > - rb, user_data);
> > - return ret;
> > -}
> > -
> > -static EGLBoolean
> > -dri2_release_render_buffer(_EGLDisplay *disp, _EGLContext *ctx, const
> > EGLint *attr_list)
> > -{
> > - struct dri2_egl_context *dri2_ctx = dri2_egl_context(ctx);
> > - struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> > - GLuint rb = 0;
> > - GLboolean ret;
> > -
> > - if (_eglParseBufferObjAttribList(&rb, attr_list) != EGL_SUCCESS)
> > - return EGL_FALSE;
> > -
> > - ret = cl_gl_release_render_buffer(dri2_dpy->driver,
> > - dri2_ctx->dri_context,
> > - rb);
> > - return ret;
> > -}
> > -
> > -static EGLBoolean
> > -dri2_acquire_resource_mesa(_EGLDisplay *disp, _EGLContext *ctx, const
> > EGLenum target,
> > - const EGLint *attrib_list, void *user_data)
> > -{
> > - switch (target) {
> > - case EGL_GL_TEXTURE_MESA:
> > - return dri2_acquire_texture(disp, ctx, attrib_list, user_data);
> > - case EGL_GL_BUFFER_OBJECT_MESA:
> > - return dri2_acquire_buffer_object(disp, ctx, attrib_list, user_data);
> > - case EGL_GL_RENDER_BUFFER_MESA:
> > - return dri2_acquire_render_buffer(disp, ctx, attrib_list, user_data);
> > - default:
> > - fprintf(stderr, "bad resource target value 0x%04x",
> > - target);
> > - }
> > - return EGL_FALSE;
> > -}
> > -
> > -static EGLBoolean
> > -dri2_release_resource_mesa(_EGLDisplay *disp, _EGLContext *ctx, const
> > EGLenum target,
> > - const EGLint *attrib_list)
> > -{
> > - switch (target) {
> > - case EGL_GL_TEXTURE_MESA:
> > - return dri2_release_texture(disp, ctx, attrib_list);
> > - case EGL_GL_BUFFER_OBJECT_MESA:
> > - return dri2_release_buffer_object(disp, ctx, attrib_list);
> > - case EGL_GL_RENDER_BUFFER_MESA:
> > - return dri2_release_render_buffer(disp, ctx, attrib_list);
> > - default:
> > - fprintf(stderr, "bad resource target value 0x%04x",
> > - target);
> > - }
> > - return EGL_FALSE;
> > -}
> > -
> > -EGLBoolean
> > -eglAcquireResourceMESA(EGLDisplay dpy, EGLContext ctx, EGLenum
> target,
> > const EGLint *attrib_list, void *user)
> > -{
> > - _EGLDisplay *disp = _eglLockDisplay(dpy);
> > - _EGLContext *context = _eglLookupContext(ctx, disp);
> > -
> > - return dri2_acquire_resource_mesa(disp, context, target, attrib_list,
> user);
> > -}
> > -
> > -EGLBoolean
> > -eglReleaseResourceMESA(EGLDisplay dpy, EGLContext ctx, EGLenum
> target,
> > const EGLint *attrib_list)
> > -{
> > - _EGLDisplay *disp = _eglLockDisplay(dpy);
> > - _EGLContext *context = _eglLookupContext(ctx, disp);
> > -
> > - return dri2_release_resource_mesa(disp, context, target, attrib_list);
> > -}
> > diff --git a/src/x11/mesa_egl_extension.h
> b/src/x11/mesa_egl_extension.h
> > deleted file mode 100644
> > index 39ea134..0000000
> > --- a/src/x11/mesa_egl_extension.h
> > +++ /dev/null
> > @@ -1,20 +0,0 @@
> > -#ifndef __MESA_EGL_EXTENSION_H__
> > -#define __MESA_EGL_EXTENSION_H__
> > -
> > -#include <EGL/egl.h>
> > -#include <GL/gl.h>
> > -#include <GL/internal/dri_interface.h>
> > -
> > -#define EGL_GL_TEXTURE_MESA 0x3300 /* eglAcuireResource
> target
> > */
> > -#define EGL_GL_BUFFER_OBJECT_MESA 0x3301 /* eglAcuireResource
> > target */
> > -#define EGL_GL_RENDER_BUFFER_MESA 0x3302 /* eglAcuireResource
> > target */
> > -#define EGL_GL_TEXTURE_ID_MESA 0x3303 /* eglAcuireResource
> > attribute */
> > -#define EGL_GL_TEXTURE_LEVEL_MESA 0x3304 /* eglAcuireResource
> > attribute */
> > -#define EGL_GL_TEXTURE_TARGET_MESA 0x3305 /*
> eglAcuireResource
> > attribute */
> > -#define EGL_GL_BUFFER_OBJECT_ID_MESA 0x3306 /*
> eglAcuireResource
> > attribute */
> > -#define EGL_GL_RENDER_BUFFER_ID_MESA 0x3307 /*
> > eglAcuireResource attribute */
> > -
> > -EGLBoolean eglAcquireResourceMESA(EGLDisplay dpy, EGLContext ctx,
> > EGLenum target, const EGLint *attrib_list, void * user_data);
> > -EGLBoolean eglReleaseResourceMESA(EGLDisplay dpy, EGLContext ctx,
> > EGLenum target, const EGLint *attrib_list);
> > -
> > -#endif
> > diff --git a/src/x11/mesa_egl_res_share.c b/src/x11/mesa_egl_res_share.c
> > deleted file mode 100644
> > index 93e9454..0000000
> > --- a/src/x11/mesa_egl_res_share.c
> > +++ /dev/null
> > @@ -1,135 +0,0 @@
> > -
> >
> /**********************************************************
> > ****************
> > - *
> > - * Copyright 2013-2014 Zhigang Gong <zhigang.gong at linux.intel.com>
> > - * Copyright 2013-2014 Intel, Inc.
> > - * All Rights Reserved.
> > - *
> > - * Permission is hereby granted, free of charge, to any person obtaining a
> > - * copy of this software and associated documentation files (the
> > - * "Software"), to deal in the Software without restriction, including
> > - * without limitation the rights to use, copy, modify, merge, publish,
> > - * distribute, sub license, and/or sell copies of the Software, and to
> > - * permit persons to whom the Software is furnished to do so, subject to
> > - * the following conditions:
> > - *
> > - * The above copyright notice and this permission notice (including the
> > - * next paragraph) shall be included in all copies or substantial portions
> > - * of the Software.
> > - *
> > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
> KIND,
> > EXPRESS OR
> > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > MERCHANTABILITY,
> > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
> > EVENT SHALL
> > - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
> > DAMAGES OR OTHER
> > - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > ARISING
> > - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
> OR
> > OTHER
> > - * DEALINGS IN THE SOFTWARE.
> > - *
> > -
> >
> **********************************************************
> > ****************/
> > -
> > -
> > -#include <assert.h>
> > -#include <string.h>
> > -
> > -#include "mesa_egl_extension.h"
> > -#include "mesa_egl_res_share.h"
> > -
> > -/**
> > - * Parse the list of share texture attributes and return the proper error
> code.
> > - */
> > -EGLint
> > -_eglParseTextureAttribList(unsigned int *texture, EGLenum *gl_target,
> > EGLint *level,
> > - const EGLint *attrib_list)
> > -{
> > - EGLint i, err = EGL_SUCCESS;
> > -
> > - *texture = 0;
> > - *gl_target = 0;
> > - *level = 0;
> > -
> > - if (!attrib_list)
> > - return EGL_BAD_ATTRIBUTE;
> > -
> > - for (i = 0; attrib_list[i] != EGL_NONE; i++) {
> > - EGLint attr = attrib_list[i++];
> > - EGLint val = attrib_list[i];
> > -
> > - switch (attr) {
> > - case EGL_GL_TEXTURE_LEVEL_MESA:
> > - *level = val;
> > - break;
> > - case EGL_GL_TEXTURE_ID_MESA:
> > - *texture = val;
> > - break;
> > - case EGL_GL_TEXTURE_TARGET_MESA:
> > - *gl_target = val;
> > - break;
> > - default:
> > - /* unknown attrs are ignored */
> > - break;
> > - }
> > - }
> > -
> > - return err;
> > -}
> > -
> > -/**
> > - * Parse the list of share texture attributes and return the proper error
> code.
> > - */
> > -EGLint
> > -_eglParseBufferObjAttribList(unsigned int *bufobj, const EGLint
> *attrib_list)
> > -{
> > - EGLint i, err = EGL_SUCCESS;
> > - *bufobj = 0;
> > -
> > - if (!attrib_list)
> > - return EGL_BAD_ATTRIBUTE;
> > -
> > - for (i = 0; attrib_list[i] != EGL_NONE; i++) {
> > - EGLint attr = attrib_list[i++];
> > - EGLint val = attrib_list[i];
> > -
> > - switch (attr) {
> > - case EGL_GL_BUFFER_OBJECT_ID_MESA:
> > - *bufobj = val;
> > - break;
> > - default:
> > - /* unknown attrs are ignored */
> > - break;
> > - }
> > - }
> > - if (*bufobj == 0)
> > - err = EGL_BAD_ATTRIBUTE;
> > -
> > - return err;
> > -}
> > -
> > -/**
> > - * Parse the list of share texture attributes and return the proper error
> code.
> > - */
> > -EGLint
> > -_eglParseRenderBufferAttribList(unsigned int *rb, const EGLint *attrib_list)
> > -{
> > - EGLint i, err = EGL_SUCCESS;
> > - *rb = 0;
> > -
> > - if (!attrib_list)
> > - return EGL_BAD_ATTRIBUTE;
> > -
> > - for (i = 0; attrib_list[i] != EGL_NONE; i++) {
> > - EGLint attr = attrib_list[i++];
> > - EGLint val = attrib_list[i];
> > -
> > - switch (attr) {
> > - case EGL_GL_RENDER_BUFFER_ID_MESA:
> > - *rb = val;
> > - break;
> > - default:
> > - /* unknown attrs are ignored */
> > - break;
> > - }
> > - }
> > - if (*rb == 0)
> > - err = EGL_BAD_ATTRIBUTE;
> > -
> > - return err;
> > -}
> > diff --git a/src/x11/mesa_egl_res_share.h
> b/src/x11/mesa_egl_res_share.h
> > deleted file mode 100644
> > index 43e746e..0000000
> > --- a/src/x11/mesa_egl_res_share.h
> > +++ /dev/null
> > @@ -1,44 +0,0 @@
> > -
> >
> /**********************************************************
> > ****************
> > - *
> > - * Copyright 2013-2014 Zhigang Gong <zhigang.gong at linux.intel.com>
> > - * Copyright 2013-2014 Intel, Inc.
> > - * All Rights Reserved.
> > - *
> > - * Permission is hereby granted, free of charge, to any person obtaining a
> > - * copy of this software and associated documentation files (the
> > - * "Software"), to deal in the Software without restriction, including
> > - * without limitation the rights to use, copy, modify, merge, publish,
> > - * distribute, sub license, and/or sell copies of the Software, and to
> > - * permit persons to whom the Software is furnished to do so, subject to
> > - * the following conditions:
> > - *
> > - * The above copyright notice and this permission notice (including the
> > - * next paragraph) shall be included in all copies or substantial portions
> > - * of the Software.
> > - *
> > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
> KIND,
> > EXPRESS OR
> > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > MERCHANTABILITY,
> > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
> > EVENT SHALL
> > - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
> > DAMAGES OR OTHER
> > - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > ARISING
> > - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
> OR
> > OTHER
> > - * DEALINGS IN THE SOFTWARE.
> > - *
> > -
> >
> **********************************************************
> > ****************/
> > -
> > -
> > -#ifndef EGLRESSHARE_INCLUDED
> > -#define EGLRESSHARE_INCLUDED
> > -
> > -#include <EGL/egl.h>
> > -
> > -EGLint
> > -_eglParseTextureAttribList(unsigned int *texture, EGLenum *gl_target,
> > - EGLint *level, const EGLint *attrib_list);
> > -EGLint
> > -_eglParseBufferObjAttribList(unsigned int *bufobj,
> > - const EGLint *attrib_list);
> > -
> > -EGLint
> > -_eglParseRenderBufferAttribList(unsigned int *rb, const EGLint
> *attrib_list);
> > -#endif
> > diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt
> > index 0c3cb00..e7da976 100644
> > --- a/utests/CMakeLists.txt
> > +++ b/utests/CMakeLists.txt
> > @@ -340,7 +340,7 @@ add_custom_target(utest_generator
> > WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> > )
> >
> > -if (EGL_FOUND AND MESA_SOURCE_FOUND)
> > +if (EGL_FOUND)
> > SET(utests_sources ${utests_sources} compiler_fill_gl_image.cpp)
> > SET(CMAKE_CXX_FLAGS "-DHAS_EGL ${CMAKE_CXX_FLAGS}
> > ${DEF_OCL_PCH_PCM_PATH}")
> > SET(CMAKE_C_FLAGS "-DHAS_EGL ${CMAKE_C_FLAGS}
> > ${DEF_OCL_PCH_PCM_PATH}")
> > diff --git a/utests/compiler_fill_gl_image.cpp
> > b/utests/compiler_fill_gl_image.cpp
> > index f1eb8e7..b9d74d1 100644
> > --- a/utests/compiler_fill_gl_image.cpp
> > +++ b/utests/compiler_fill_gl_image.cpp
> > @@ -1,36 +1,14 @@
> > #include "utest_helper.hpp"
> >
> > -static void read_back(int tex, int width, int height, uint32_t * resultColor)
> > -{
> > - float vertices[8] = {-1, 1, 1, 1, 1, -1, -1, -1};
> > - float tex_coords[8] = {0, 0, 1, 0, 1, 1, 0, 1};
> > -
> > - glBindTexture(GL_TEXTURE_2D, tex);
> > - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
> > - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
> > - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
> > GL_NEAREST);
> > - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
> > GL_NEAREST);
> > - glEnable(GL_TEXTURE_2D);
> > - glDisable(GL_BLEND);
> > - glVertexPointer(2, GL_FLOAT, sizeof(float) * 2, vertices);
> > - glEnableClientState(GL_VERTEX_ARRAY);
> > - glClientActiveTexture(GL_TEXTURE0);
> > - glTexCoordPointer(2, GL_FLOAT, sizeof(float) * 2, tex_coords);
> > - glEnableClientState(GL_TEXTURE_COORD_ARRAY);
> > - glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
> > - glFlush();
> > - OCL_SWAP_EGL_BUFFERS();
> > -
> > - glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8,
> > resultColor);
> > -}
> > -
> >
> > static void compiler_fill_gl_image(void)
> > {
> > const size_t w = EGL_WINDOW_WIDTH;
> > const size_t h = EGL_WINDOW_HEIGHT;
> > - uint32_t color = 0x123456FF;
> > - uint32_t *resultColor;
> > + uint32_t color0 = 0x123456FF;
> > + uint32_t color1 = 0x789ABCDE;
> > + uint32_t *resultColor0;
> > + uint32_t *resultColor1;
> > GLuint tex;
> >
> > if (eglContext == EGL_NO_CONTEXT) {
> > @@ -44,13 +22,15 @@ static void compiler_fill_gl_image(void)
> > glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
> > GL_NEAREST);
> > glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
> > GL_NEAREST);
> > glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA,
> > GL_UNSIGNED_INT_8_8_8_8, NULL);
> > + glGenerateMipmap(GL_TEXTURE_2D);
> > + glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, w/2, h/2, 0, GL_RGBA,
> > GL_UNSIGNED_INT_8_8_8_8, NULL);
> >
> > OCL_CREATE_KERNEL("test_fill_gl_image");
> > + //Create cl image from miplevel 0
> > OCL_CREATE_GL_IMAGE(buf[0], 0, GL_TEXTURE_2D, 0, tex);
> > -
> > // Run the kernel
> > OCL_SET_ARG(0, sizeof(cl_mem), &buf[0]);
> > - OCL_SET_ARG(1, sizeof(color), &color);
> > + OCL_SET_ARG(1, sizeof(color0), &color0);
> > globals[0] = w;
> > globals[1] = h;
> > locals[0] = 16;
> > @@ -59,18 +39,37 @@ static void compiler_fill_gl_image(void)
> > OCL_ENQUEUE_ACQUIRE_GL_OBJECTS(0);
> > OCL_NDRANGE(2);
> > OCL_FLUSH();
> > + OCL_ENQUEUE_RELEASE_GL_OBJECTS(0);
> >
> > // Check result
> > - resultColor = new uint32_t[w * h * 4];
> > - if (resultColor == NULL)
> > + resultColor0 = new uint32_t[w * h];
> > + if (resultColor0 == NULL)
> > assert(0);
> > -
> > - read_back(tex, w, h, resultColor);
> > + glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA,
> > GL_UNSIGNED_INT_8_8_8_8, resultColor0);
> > for (uint32_t j = 0; j < h; ++j)
> > for (uint32_t i = 0; i < w; i++)
> > - OCL_ASSERT(resultColor[j * w + i] == color);
> > - OCL_UNMAP_BUFFER(0);
> > - delete[] resultColor;
> > + OCL_ASSERT(resultColor0[j * w + i] == color0);
> > +
> > +
> > + //Create cl image from miplevel 1
> > + OCL_CREATE_GL_IMAGE(buf[1], 0, GL_TEXTURE_2D, 1, tex);
> > + OCL_SET_ARG(0, sizeof(cl_mem), &buf[1]);
> > + OCL_SET_ARG(1, sizeof(color1), &color1);
> > + globals[0] = w/2;
> > + globals[1] = h/2;
> > + OCL_ENQUEUE_ACQUIRE_GL_OBJECTS(1);
> > + OCL_NDRANGE(2);
> > + OCL_FLUSH();
> > + OCL_ENQUEUE_RELEASE_GL_OBJECTS(1);
> > +
> > + // Check result
> > + resultColor1 = new uint32_t[(w/2)*(h/2)];
> > + glGetTexImage(GL_TEXTURE_2D, 1, GL_RGBA,
> > GL_UNSIGNED_INT_8_8_8_8, resultColor1);
> > + for (uint32_t j = 0; j < h/2; ++j)
> > + for (uint32_t i = 0; i < w/2; i++)
> > + OCL_ASSERT(resultColor1[j * (w/2) + i] == color1);
> > + delete[] resultColor0;
> > + delete[] resultColor1;
> > }
> >
> > MAKE_UTEST_FROM_FUNCTION(compiler_fill_gl_image);
> > diff --git a/utests/utest_helper.hpp b/utests/utest_helper.hpp
> > index 5f2fea6..213766f 100644
> > --- a/utests/utest_helper.hpp
> > +++ b/utests/utest_helper.hpp
> > @@ -42,10 +42,12 @@
> > #ifdef HAS_EGL
> > #define EGL_WINDOW_WIDTH 256
> > #define EGL_WINDOW_HEIGHT 256
> > +#define GL_GLEXT_PROTOTYPES
> > #include <GL/gl.h>
> > +#include <GL/glext.h>
> > #include <EGL/egl.h>
> > #include <EGL/eglext.h>
> > -#include <CL/cl_gl.h>
> > +#include <CL/cl_gl.h>
> >
> > extern EGLDisplay eglDisplay;
> > extern EGLContext eglContext;
> > @@ -126,6 +128,9 @@ union uint32_cast {
> > #define OCL_ENQUEUE_ACQUIRE_GL_OBJECTS(ID) \
> > OCL_CALL(clEnqueueAcquireGLObjects, queue, 1, &buf[ID], 0, 0, 0)
> >
> > +#define OCL_ENQUEUE_RELEASE_GL_OBJECTS(ID) \
> > + OCL_CALL(clEnqueueReleaseGLObjects, queue, 1, &buf[ID], 0, 0, 0)
> > +
> > #define OCL_SWAP_EGL_BUFFERS() \
> > eglSwapBuffers(eglDisplay, eglSurface);
> >
> > --
> > 1.9.1
> >
> > _______________________________________________
> > Beignet mailing list
> > Beignet at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list