diff options
Diffstat (limited to 'utests')
-rw-r--r-- | utests/CMakeLists.txt | 22 | ||||
-rw-r--r-- | utests/compiler_fill_gl_image.cpp | 69 | ||||
-rw-r--r-- | utests/utest_helper.cpp | 10 | ||||
-rw-r--r-- | utests/utest_helper.hpp | 9 |
4 files changed, 58 insertions, 52 deletions
diff --git a/utests/CMakeLists.txt b/utests/CMakeLists.txt index 0c3cb008..feeee43d 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 f1eb8e78..b9d74d17 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 70a69cc1..d12dccf7 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 5f2fea68..034a411a 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); |