LGTM, thanks, will push it later.
> -----Original Message----- > From: Beignet [mailto:[email protected]] On Behalf Of > Chuanbo Weng > Sent: Wednesday, September 7, 2016 18:59 > To: [email protected] > Cc: Weng, Chuanbo <[email protected]> > Subject: [Beignet] [PATCH v2] 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. > > v2: > Add CMake build option to enable cl_khr_gl_sharing(default off). > Clean up related CMake code. > > Signed-off-by: Chuanbo Weng <[email protected]> > --- > CMake/FindMesaSrc.cmake | 26 --- > CMakeLists.txt | 39 ++-- > src/CMakeLists.txt | 22 +-- > src/cl_driver.h | 32 +-- > src/cl_driver_defs.c | 7 - > src/cl_extensions.c | 4 +- > src/cl_gl_api.c | 19 +- > src/cl_mem.c | 2 +- > 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 | 140 +++++++++---- > 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 | 22 ++- > utests/compiler_fill_gl_image.cpp | 69 ++++--- > utests/utest_helper.cpp | 10 +- > utests/utest_helper.hpp | 9 +- > 23 files changed, 220 insertions(+), 1111 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..d839f3f 100644 > --- a/CMakeLists.txt > +++ b/CMakeLists.txt > @@ -179,15 +179,6 @@ ENDIF(CMRT_FOUND) > Find_Package(Threads) > > IF(X11_FOUND) > -# OpenGL (not use cmake helper) > -pkg_check_modules(OPENGL gl) > -IF(OPENGL_FOUND) > - INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIRS}) > - MESSAGE(STATUS "Looking for OpenGL - found at ${OPENGL_PREFIX}") > -ELSE(OPENGL_FOUND) > - MESSAGE(STATUS "Looking for OpenGL - not found") > -ENDIF(OPENGL_FOUND) > - > # Xext > pkg_check_modules(XEXT REQUIRED xext) > IF(XEXT_FOUND) > @@ -207,20 +198,22 @@ ELSE(XFIXES_FOUND) > ENDIF(XFIXES_FOUND) > ENDIF(X11_FOUND) > > -pkg_check_modules(EGL egl) > -IF(EGL_FOUND) > - MESSAGE(STATUS "Looking for EGL - found at ${EGL_PREFIX}") > -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) > +OPTION(ENABLE_GL_SHARING "cl_khr_gl_sharing" OFF) > + > +IF(ENABLE_GL_SHARING) > + pkg_check_modules(OPENGL REQUIRED gl) > + IF(OPENGL_FOUND) > + MESSAGE(STATUS "Looking for OpenGL - found at ${OPENGL_PREFIX}") > + ELSE(OPENGL_FOUND) > + MESSAGE(STATUS "Looking for OpenGL - not found") > + ENDIF(OPENGL_FOUND) > + pkg_check_modules(EGL REQUIRED egl>=11.0.0) > + IF(EGL_FOUND) > + MESSAGE(STATUS "Looking for EGL - found at ${EGL_PREFIX}") > + ELSE(EGL_FOUND) > + MESSAGE(STATUS "Looking for EGL - not found") > + ENDIF(EGL_FOUND) > +ENDIF(ENABLE_GL_SHARING) > > Find_Package(OCLIcd) > IF(OCLIcd_FOUND) > diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt > index cec7cfc..009d057 100644 > --- a/src/CMakeLists.txt > +++ b/src/CMakeLists.txt > @@ -3,8 +3,9 @@ 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}) > + ${LLVM_INCLUDE_DIR} > + ${OPENGL_INCLUDE_DIRS} > + ${EGL_INCLUDE_DIRS}) > > macro (MakeKernelBinStr KERNEL_PATH KERNEL_FILES) > foreach (KF ${KERNEL_FILES}) > @@ -109,14 +110,11 @@ 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) > - 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 "") > -endif (EGL_FOUND AND MESA_SOURCE_FOUND) > +if (OPENGL_FOUND AND EGL_FOUND) > + set (OPENCL_SRC ${OPENCL_SRC} cl_mem_gl.c cl_gl_api.c ) > + SET(CMAKE_CXX_FLAGS "-DHAS_GL_EGL ${CMAKE_CXX_FLAGS}") > + SET(CMAKE_C_FLAGS "-DHAS_GL_EGL ${CMAKE_C_FLAGS}") > +endif (OPENGL_FOUND AND EGL_FOUND) > > if (OCLIcd_FOUND) > set (OPENCL_SRC ${OPENCL_SRC} cl_khr_icd.c) > @@ -157,7 +155,7 @@ add_custom_target(${GIT_SHA1} ALL > > SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} - > Wl,-Bsymbolic,--allow-shlib-undefined") > > -link_directories (${LLVM_LIBRARY_DIR} ${DRM_LIBDIR}) > +link_directories (${LLVM_LIBRARY_DIR} ${DRM_LIBDIR} ${OPENGL_LIBDIR} > ${EGL_LIBDIR}) > add_library(cl SHARED ${OPENCL_SRC}) > ADD_DEPENDENCIES(cl ${GIT_SHA1}) > target_link_libraries( > @@ -171,5 +169,5 @@ target_link_libraries( > ${CMAKE_THREAD_LIBS_INIT} > ${CMAKE_DL_LIBS} > ${OPENGL_LIBRARIES} > - ${OPTIONAL_EGL_LIBRARY}) > + ${EGL_LIBRARIES}) > install (TARGETS cl LIBRARY DESTINATION ${BEIGNET_INSTALL_DIR}) > 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_extensions.c b/src/cl_extensions.c > index 183aafc..4693bb6 100644 > --- a/src/cl_extensions.c > +++ b/src/cl_extensions.c > @@ -1,5 +1,5 @@ > #include "llvm/Config/llvm-config.h" > -#ifdef HAS_EGL > +#ifdef HAS_GL_EGL > #include "EGL/egl.h" > #include "EGL/eglext.h" > #endif > @@ -55,7 +55,7 @@ void check_opt1_extension(cl_extensions_t > *extensions) > > void > check_gl_extension(cl_extensions_t *extensions) { > -#if defined(HAS_EGL) > +#if defined(HAS_GL_EGL) > int id; > /* For now, we only support cl_khr_gl_sharing. */ > for(id = GL_EXT_START_ID; id <= GL_EXT_END_ID; id++) > diff --git a/src/cl_gl_api.c b/src/cl_gl_api.c > index 519aab6..897edb4 100644 > --- a/src/cl_gl_api.c > +++ b/src/cl_gl_api.c > @@ -20,7 +20,7 @@ > #include <stdio.h> > #include <string.h> > #include <assert.h> > -#ifdef HAS_EGL > +#ifdef HAS_GL_EGL > #include <GL/gl.h> > #endif > > @@ -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.c b/src/cl_mem.c > index 597d9ce..5caf5a9 100644 > --- a/src/cl_mem.c > +++ b/src/cl_mem.c > @@ -1177,7 +1177,7 @@ cl_mem_delete(cl_mem mem) > return; > if (CL_OBJECT_DEC_REF(mem) > 1) > return; > -#ifdef HAS_EGL > +#ifdef HAS_GL_EGL > if (UNLIKELY(IS_GL_IMAGE(mem))) { > cl_mem_gl_delete(cl_mem_gl_image(mem)); > } > diff --git a/src/cl_mem.h b/src/cl_mem.h > index 39dbab1..e6c8217 100644 > --- a/src/cl_mem.h > +++ b/src/cl_mem.h > @@ -26,6 +26,9 @@ > #include "cl_base_object.h" > #include <assert.h> > #include <pthread.h> > +#if defined(HAS_GL_EGL) > +#include "EGL/egl.h" > +#endif > > #ifndef CL_VERSION_1_2 > #define CL_MEM_OBJECT_IMAGE1D 0x10F4 > @@ -119,9 +122,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_GL_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..187c6d0 100644 > --- a/src/intel/intel_driver.c > +++ b/src/intel/intel_driver.c > @@ -46,10 +46,11 @@ > * > */ > > -#if defined(HAS_EGL) > +#if defined(HAS_GL_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 > @@ -244,7 +245,7 @@ intel_driver_open(intel_driver_t *intel, > cl_context_prop props) > return CL_DEVICE_NOT_FOUND; > } > > -#ifdef HAS_EGL > +#ifdef HAS_GL_EGL > if (props && props->gl_type == CL_GL_EGL_DISPLAY) { > assert(props->egl_display); > } > @@ -536,9 +537,26 @@ static uint32_t > intel_buffer_get_tiling_align(cl_context ctx, uint32_t tiling_mo > return ret; > } > > -#if defined(HAS_EGL) > -#include "intel_dri_resource_sharing.h" > +#if defined(HAS_GL_EGL) > +#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; > @@ -928,10 +985,9 @@ intel_setup_callbacks(void) > cl_buffer_alloc = (cl_buffer_alloc_cb *) drm_intel_bo_alloc; > cl_buffer_alloc_userptr = (cl_buffer_alloc_userptr_cb*) > intel_buffer_alloc_userptr; > cl_buffer_set_tiling = (cl_buffer_set_tiling_cb *) intel_buffer_set_tiling; > -#if defined(HAS_EGL) > +#if defined(HAS_GL_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 <[email protected]> > - * 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 <[email protected]> > - * 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..feeee43 100644 > --- a/utests/CMakeLists.txt > +++ b/utests/CMakeLists.txt > @@ -40,7 +40,10 @@ endif (NOT NOT_BUILD_STAND_ALONE_UTEST) > > ########################################################## > ######################### > > INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} > - ${CMAKE_CURRENT_SOURCE_DIR}/../include) > + ${CMAKE_CURRENT_SOURCE_DIR}/../include > + ${OPENGL_INCLUDE_DIRS} > + ${EGL_INCLUDE_DIRS}) > + > > ##### Math Function Part: > EXECUTE_PROCESS(COMMAND mkdir generated -p WORKING_DIRECTORY > ${CMAKE_CURRENT_SOURCE_DIR}) > @@ -58,7 +61,7 @@ configure_file ( > ) > > #XXX only need GL if required > -link_directories (${LLVM_LIBRARY_DIR} ${OPENGL_LIBDIR} ${DRM_LIBDIR}) > +link_directories (${LLVM_LIBRARY_DIR} ${OPENGL_LIBDIR} ${EGL_LIBDIR} > ${X11_LIBDIR} ${DRM_LIBDIR}) > > set (utests_basic_sources > utest_error.c > @@ -340,13 +343,12 @@ add_custom_target(utest_generator > WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} > ) > > -if (EGL_FOUND AND MESA_SOURCE_FOUND) > +#compiler_fill_gl_image test case also need xlib > +if (OPENGL_FOUND AND EGL_FOUND AND X11_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}") > - SET(UTESTS_REQUIRED_EGL_LIB ${EGL_LIBRARIES}) > -else() > - SET(UTESTS_REQUIRED_EGL_LIB "") > + SET(CMAKE_CXX_FLAGS "-DHAS_GL_EGL_X11 ${CMAKE_CXX_FLAGS} > ${DEF_OCL_PCH_PCM_PATH}") > + SET(CMAKE_C_FLAGS "-DHAS_GL_EGL_X11 ${CMAKE_C_FLAGS} > ${DEF_OCL_PCH_PCM_PATH}") > + SET(UTESTS_REQUIRED_GL_EGL_X11_LIB ${OPENGL_LIBRARIES} > ${EGL_LIBRARIES} ${X11_LIBRARIES}) > endif() > > if (USE_STANDALONE_GBE_COMPILER STREQUAL "true") > @@ -362,9 +364,9 @@ endif () > ADD_LIBRARY(utests SHARED ${utests_sources}) > > if (NOT_BUILD_STAND_ALONE_UTEST) > - TARGET_LINK_LIBRARIES(utests cl m ${OPENGL_LIBRARIES} > ${UTESTS_REQUIRED_EGL_LIB} ${CMAKE_THREAD_LIBS_INIT} > ${UTESTS_REQUIRED_X11_LIB}) > + TARGET_LINK_LIBRARIES(utests cl m > ${UTESTS_REQUIRED_GL_EGL_X11_LIB} ${CMAKE_THREAD_LIBS_INIT} > ${UTESTS_REQUIRED_X11_LIB}) > else() > - TARGET_LINK_LIBRARIES(utests ${OPENCL_LIBRARIES} m > ${OPENGL_LIBRARIES} ${UTESTS_REQUIRED_EGL_LIB} > ${CMAKE_THREAD_LIBS_INIT} ${UTESTS_REQUIRED_X11_LIB}) > + TARGET_LINK_LIBRARIES(utests ${OPENCL_LIBRARIES} m > ${UTESTS_REQUIRED_GL_EGL_X11_LIB} ${CMAKE_THREAD_LIBS_INIT} > ${UTESTS_REQUIRED_X11_LIB}) > endif() > > ADD_EXECUTABLE(utest_run utest_run.cpp) > 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.cpp b/utests/utest_helper.cpp > index 70a69cc..d12dccf 100644 > --- a/utests/utest_helper.cpp > +++ b/utests/utest_helper.cpp > @@ -57,7 +57,7 @@ __thread size_t locals[3] = {}; > float ULPSIZE_FAST_MATH = 10000.; > __attribute__ ((visibility ("internal"))) clGetKernelSubGroupInfoKHR_cb* > utestclGetKernelSubGroupInfoKHR = NULL; > > -#ifdef HAS_EGL > +#ifdef HAS_GL_EGL_X11 > Display *xDisplay; > EGLDisplay eglDisplay; > EGLContext eglContext = NULL; > @@ -435,7 +435,7 @@ cl_ocl_init(void) > cl_int status = CL_SUCCESS; > cl_uint platform_n; > size_t i; > -#ifdef HAS_EGL > +#ifdef HAS_GL_EGL_X11 > bool hasGLExt = false; > #endif > cl_context_properties *props = NULL; > @@ -464,7 +464,7 @@ cl_ocl_init(void) > GET_DEVICE_STR_INFO(version, VERSION); > GET_DEVICE_STR_INFO(extensions, EXTENSIONS); > GET_DEVICE_STR_INFO(opencl_c_version, OPENCL_C_VERSION); > -#ifdef HAS_EGL > +#ifdef HAS_GL_EGL_X11 > if (std::strstr(extensionsStr.c_str(), "cl_khr_gl_sharing")) { > hasGLExt = true; > } > @@ -476,7 +476,7 @@ cl_ocl_init(void) > goto error; > } > > -#ifdef HAS_EGL > +#ifdef HAS_GL_EGL_X11 > if (hasGLExt) { > int i = 0; > props = new cl_context_properties[7]; > @@ -556,7 +556,7 @@ cl_ocl_destroy(void) > { > clReleaseCommandQueue(queue); > clReleaseContext(ctx); > -#ifdef HAS_EGL > +#ifdef HAS_GL_EGL_X11 > if (eglContext != NULL) { > cl_ocl_destroy_egl_window(); > eglContext = NULL; > diff --git a/utests/utest_helper.hpp b/utests/utest_helper.hpp > index 5f2fea6..034a411 100644 > --- a/utests/utest_helper.hpp > +++ b/utests/utest_helper.hpp > @@ -39,13 +39,15 @@ > #define __thread > #endif > > -#ifdef HAS_EGL > +#ifdef HAS_GL_EGL_X11 > #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 > [email protected] > https://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/beignet
