Imported Upstream version 0.1.0+git20131207+e452e83
[deb_libhybris.git] / hybris / tests / test_egl.c
1 /*
2 * Copyright (c) 2012 Carsten Munk <carsten.munk@gmail.com>
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 */
17
18 #include <EGL/egl.h>
19 #include <assert.h>
20 #include <stdio.h>
21 #include "hybris_nativebufferext.h"
22 #include <string.h>
23 #include <EGL/eglext.h>
24 int main(int argc, char **argv)
25 {
26 EGLDisplay display;
27 EGLConfig ecfg;
28 EGLint num_config;
29 EGLint attr[] = { // some attributes to set up our egl-interface
30 EGL_BUFFER_SIZE, 32,
31 EGL_RENDERABLE_TYPE,
32 EGL_OPENGL_ES2_BIT,
33 EGL_NONE
34 };
35 EGLSurface surface;
36 EGLint ctxattr[] = {
37 EGL_CONTEXT_CLIENT_VERSION, 2,
38 EGL_NONE
39 };
40 EGLContext context;
41
42 EGLBoolean rv;
43 PFNEGLHYBRISCREATENATIVEBUFFERPROC eglHybrisCreateNativeBuffer;
44 PFNEGLHYBRISLOCKNATIVEBUFFERPROC eglHybrisLockNativeBuffer;
45 PFNEGLHYBRISUNLOCKNATIVEBUFFERPROC eglHybrisUnlockNativeBuffer;
46 PFNEGLHYBRISRELEASENATIVEBUFFERPROC eglHybrisReleaseNativeBuffer;
47 PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR;
48 PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR;
49
50 display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
51 assert(eglGetError() == EGL_SUCCESS);
52 assert(display != EGL_NO_DISPLAY);
53
54 rv = eglInitialize(display, NULL, NULL);
55 assert(eglGetError() == EGL_SUCCESS);
56 assert(rv == EGL_TRUE);
57
58 rv = eglChooseConfig((EGLDisplay) display, attr, &ecfg, 1, &num_config);
59 assert(eglGetError() == EGL_SUCCESS);
60 assert(rv == EGL_TRUE);
61
62 surface = eglCreateWindowSurface((EGLDisplay) display, ecfg, (EGLNativeWindowType)NULL, NULL);
63 assert(eglGetError() == EGL_SUCCESS);
64 assert(surface != EGL_NO_SURFACE);
65
66 context = eglCreateContext((EGLDisplay) display, ecfg, EGL_NO_CONTEXT, ctxattr);
67 assert(eglGetError() == EGL_SUCCESS);
68 assert(context != EGL_NO_CONTEXT);
69
70 assert(eglMakeCurrent((EGLDisplay) display, surface, surface, context) == EGL_TRUE);
71
72 if (strstr(eglQueryString(display, EGL_EXTENSIONS), "EGL_HYBRIS_native_buffer") != NULL)
73 {
74 printf("Found EGL_HYBRIS_native_buffer\n");
75 assert((eglHybrisCreateNativeBuffer = (PFNEGLHYBRISCREATENATIVEBUFFERPROC) eglGetProcAddress("eglHybrisCreateNativeBuffer")) != NULL);
76 printf("Found eglHybrisCreateNativeBuffer\n");
77 EGLClientBuffer buf;
78 EGLint stride;
79 void *loc;
80 assert(eglHybrisCreateNativeBuffer(320, 480, HYBRIS_USAGE_SW_READ_RARELY|HYBRIS_USAGE_SW_WRITE_RARELY|HYBRIS_USAGE_HW_TEXTURE, HYBRIS_PIXEL_FORMAT_RGBA_8888, &stride, &buf) == EGL_TRUE);
81 printf("Stride is %i\n", stride);
82 assert((eglHybrisLockNativeBuffer = (PFNEGLHYBRISLOCKNATIVEBUFFERPROC) eglGetProcAddress("eglHybrisLockNativeBuffer")) != NULL);
83 printf("Found eglHybrisLockBuffer\n");
84 assert(eglHybrisLockNativeBuffer(buf, HYBRIS_USAGE_SW_WRITE_RARELY, 0, 0, 320, 480, &loc) == EGL_TRUE);
85 printf("locked at %p\n", loc);
86 printf("Memsetting..\n");
87 memset(loc, 0xEF, (stride*480));
88 assert((eglHybrisUnlockNativeBuffer = (PFNEGLHYBRISUNLOCKNATIVEBUFFERPROC) eglGetProcAddress("eglHybrisUnlockNativeBuffer")) != NULL);
89 printf("Found eglHybrisUnlockBuffer\n");
90 eglHybrisUnlockNativeBuffer(buf);
91 assert((eglCreateImageKHR = (PFNEGLCREATEIMAGEKHRPROC) eglGetProcAddress("eglCreateImageKHR")) != NULL);
92 printf("Found eglCreateImageKHR\n");
93 EGLImageKHR image = eglCreateImageKHR(
94 display, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_HYBRIS,
95 (EGLClientBuffer)buf, NULL);
96 assert(image != EGL_NO_IMAGE_KHR);
97 assert((eglDestroyImageKHR = (PFNEGLDESTROYIMAGEKHRPROC) eglGetProcAddress("eglDestroyImageKHR")) != NULL);
98 printf("Found eglDestroyImageKHR\n");
99 assert(eglDestroyImageKHR(display, image));
100
101 assert((eglHybrisReleaseNativeBuffer = (PFNEGLHYBRISRELEASENATIVEBUFFERPROC) eglGetProcAddress("eglHybrisReleaseNativeBuffer")) != NULL);
102 printf("Found eglHybrisReleaseNativeBuffer\n");
103 eglHybrisReleaseNativeBuffer(buf);
104 }
105
106 printf("stop\n");
107
108 eglDestroyContext((EGLDisplay) display, context);
109 printf("destroyed context\n");
110
111 eglDestroySurface((EGLDisplay) display, surface);
112 printf("destroyed surface\n");
113 eglTerminate((EGLDisplay) display);
114 return 0;
115 }
116
117 // vim:ts=4:sw=4:noexpandtab