<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 21, 2014 at 11:52 AM, Emil Velikov <span dir="ltr"><<a href="mailto:emil.l.velikov@gmail.com" target="_blank">emil.l.velikov@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This will allow us to use waffle with its upcoming WGL support for<br>
Windows. With that done, the final step to removing glut is to convert<br>
piglit to use waffle for MacOS.<br>
<br>
Current implementation does not have input handling/event loop, and as<br>
such one needs to pass "-auto" when running individual tests, otherwise<br>
the test will abort after being displayed for 8 seconds.<br>
<br>
Waffle 1.5.0 is the first version that has WGL support.<br></blockquote><div><br></div><div>Do we need anything from 1.5.0 besides WGL?  If not, can we only require 1.5.0 if we're on windows and continue only requiring 1.3.0 on linux?  I ask because I very much enjoy just using the fedora packages for waffle which are at 1.3 (fedora 21) and 1.4 (rawhide).<br></div><div>--Jason<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
TODO:<br>
 - Bump the WAFFLE_API_VERSION ?<br>
 - Add input handling (event_loop).<br>
<br>
v2: Updated the instructions in the README.<br>
v3: Update against upstream Waffle (no API breakage)<br>
<br>
Signed-off-by: Emil Velikov <<a href="mailto:emil.l.velikov@gmail.com">emil.l.velikov@gmail.com</a>><br>
Reviewed-by: Brian Paul <<a href="mailto:brianp@vmware.com">brianp@vmware.com</a>> (v1)<br>
Signed-off-by: Emil Velikov <<a href="mailto:emil.l.velikov@gmail.com">emil.l.velikov@gmail.com</a>><br>
---<br>
 CMakeLists.txt                                     |  7 +-<br>
 README                                             | 38 +++++++++-<br>
 tests/util/CMakeLists.txt                          |  5 ++<br>
 .../piglit-framework-gl/piglit_wfl_framework.c     | 10 +++<br>
 .../piglit-framework-gl/piglit_wgl_framework.c     | 85 ++++++++++++++++++++++<br>
 .../piglit-framework-gl/piglit_wgl_framework.h     | 29 ++++++++<br>
 .../piglit-framework-gl/piglit_winsys_framework.c  |  7 ++<br>
 7 files changed, 177 insertions(+), 4 deletions(-)<br>
 create mode 100644 tests/util/piglit-framework-gl/piglit_wgl_framework.c<br>
 create mode 100644 tests/util/piglit-framework-gl/piglit_wgl_framework.h<br>
<br>
diff --git a/CMakeLists.txt b/CMakeLists.txt<br>
index 2f15971..6ba6df8 100644<br>
--- a/CMakeLists.txt<br>
+++ b/CMakeLists.txt<br>
@@ -61,7 +61,7 @@ if(PIGLIT_USE_WAFFLE)<br>
        # validates the required version at most once for the lifetime of the<br>
        # source tree.  If someone changes the required version by editing the<br>
        # CMakeLists, CMake fails to detect the new requirement.<br>
-       set(WAFFLE_REQUIRED_VERSION "1.3.0")<br>
+       set(WAFFLE_REQUIRED_VERSION "1.5.0")<br>
        if(WAFFLE_VERSION VERSION_LESS WAFFLE_REQUIRED_VERSION)<br>
                message(FATAL_ERROR "Found waffle-${WAFFLE_VERSION}, but "<br>
                "piglit requires waffle-${WAFFLE_REQUIRED_VERSION}")<br>
@@ -128,6 +128,11 @@ IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")<br>
        pkg_check_modules(LIBDRM_INTEL QUIET libdrm_intel)<br>
        pkg_check_modules(XCB_DRI2 QUIET xcb-dri2)<br>
        pkg_check_modules(GLPROTO QUIET glproto)<br>
+ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Windows")<br>
+       if (PIGLIT_USE_WAFFLE)<br>
+               set(PIGLIT_HAS_WGL True)<br>
+               add_definitions(-DPIGLIT_HAS_WGL)<br>
+       endif()<br>
 ENDIF()<br>
<br>
 IF(PIGLIT_HAS_GLX)<br>
diff --git a/README b/README<br>
index 2917c3a..b894db7 100644<br>
--- a/README<br>
+++ b/README<br>
@@ -144,15 +144,19 @@ <a href="http://www.opengl.org/registry/#headers" target="_blank">http://www.opengl.org/registry/#headers</a><br>
 Copy header files to MSVC.<br>
 C:\Program Files\Microsoft Visual Studio 12.0\VC\include\GL<br>
<br>
-Download freeglut for MSVC.<br>
-<a href="http://www.transmissionzero.co.uk/software/freeglut-devel" target="_blank">http://www.transmissionzero.co.uk/software/freeglut-devel</a><br>
-<br>
 Install pip.<br>
 <a href="http://www.pip-installer.org/en/latest/installing.html" target="_blank">http://www.pip-installer.org/en/latest/installing.html</a><br>
<br>
 Install python mako.<br>
   > c:\Python27\Scripts\pip.exe install mako<br>
<br>
+<br>
+2.5.1 GLUT<br>
+----------<br>
+<br>
+Download freeglut for MSVC.<br>
+<a href="http://www.transmissionzero.co.uk/software/freeglut-devel" target="_blank">http://www.transmissionzero.co.uk/software/freeglut-devel</a><br>
+<br>
 Open Visual Studio Command Prompt.<br>
 Start Menu->All Programs->Visual Studio 2013->Visual Studio Tools->VS2013 x86 Native Tools Command Prompt<br>
 CD to piglit directory.<br>
@@ -172,6 +176,34 @@ File->Exit<br>
 Build from the Visual Studio Command Prompt.<br>
   > nmake<br>
<br>
+2.5.2 Waffle<br>
+------------<br>
+<br>
+Download waffle for MSVC.<br>
+<a href="http://www.waffle-gl.org/" target="_blank">http://www.waffle-gl.org/</a><br>
+<br>
+Open the Command Prompt.<br>
+CD to piglit directory.<br>
+<br>
+Run CMake GUI.<br>
+  > C:\Program Files\CMake 2.8\bin\cmake-gui.exe .<br>
+Configure<br>
+  - 'Visual Studio 12 2013', or<br>
+  - 'Visual Studio 12 2013 Win64'<br>
+  - Use default native compilers<br>
+Set these variables in the Advanced view.<br>
+Note that the values provided are for reference purposed and may differ on your system.<br>
+  - PIGLIT_USE_WAFFLE, BOOL, TRUE<br>
+  - WAFFLE_VERSION, STRING, "1.5.0"<br>
+  - WAFFLE_INCLUDE_DIRS, PATH, ${waffle_root}\include\waffle<br>
+  - WAFFLE_LDFLAGS, FILEPATH, ${waffle_root}\lib\waffle-1.lib<br>
+  - GLEXT_INCLUDE_DIR, PATH, C:\Program Files\Microsoft Visual Studio 12.0\VC\include\GL<br>
+Configure<br>
+Generate<br>
+File->Exit<br>
+<br>
+Build from the Command Prompt.<br>
+  > cmake --build .<br>
<br>
 3. How to run tests<br>
 -------------------<br>
diff --git a/tests/util/CMakeLists.txt b/tests/util/CMakeLists.txt<br>
index 98eedd0..edc8469 100644<br>
--- a/tests/util/CMakeLists.txt<br>
+++ b/tests/util/CMakeLists.txt<br>
@@ -64,6 +64,11 @@ if(PIGLIT_USE_WAFFLE)<br>
                piglit-util-waffle.c<br>
        )<br>
<br>
+       if(PIGLIT_HAS_WGL)<br>
+               list(APPEND UTIL_GL_SOURCES<br>
+                       piglit-framework-gl/piglit_wgl_framework.c<br>
+               )<br>
+       endif()<br>
        if(PIGLIT_HAS_GBM)<br>
                list(APPEND UTIL_GL_SOURCES<br>
                        piglit-framework-gl/piglit_gbm_framework.c<br>
diff --git a/tests/util/piglit-framework-gl/piglit_wfl_framework.c b/tests/util/piglit-framework-gl/piglit_wfl_framework.c<br>
index c762b00..75fbacf 100644<br>
--- a/tests/util/piglit-framework-gl/piglit_wfl_framework.c<br>
+++ b/tests/util/piglit-framework-gl/piglit_wfl_framework.c<br>
@@ -109,6 +109,16 @@ piglit_wfl_framework_choose_platform(const struct piglit_gl_test_config *test_co<br>
 #endif<br>
        }<br>
<br>
+       else if (strcmp(env, "wgl") == 0) {<br>
+#ifdef PIGLIT_HAS_WGL<br>
+               return WAFFLE_PLATFORM_WGL;<br>
+#else<br>
+               fprintf(stderr, "environment var PIGLIT_PLATFORM=wgl, "<br>
+                       "but piglit was built without WGL support\n");<br>
+               piglit_report_result(PIGLIT_FAIL);<br>
+#endif<br>
+       }<br>
+<br>
        else {<br>
                fprintf(stderr, "environment var PIGLIT_PLATFORM has bad "<br>
                        "value \"%s\"\n", env);<br>
diff --git a/tests/util/piglit-framework-gl/piglit_wgl_framework.c b/tests/util/piglit-framework-gl/piglit_wgl_framework.c<br>
new file mode 100644<br>
index 0000000..cb820e8<br>
--- /dev/null<br>
+++ b/tests/util/piglit-framework-gl/piglit_wgl_framework.c<br>
@@ -0,0 +1,85 @@<br>
+/*<br>
+ * Copyright © 2014 Emil Velikov<br>
+ *<br>
+ * Permission is hereby granted, free of charge, to any person obtaining a<br>
+ * copy of this software and associated documentation files (the "Software"),<br>
+ * to deal in the Software without restriction, including without limitation<br>
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,<br>
+ * and/or sell copies of the Software, and to permit persons to whom the<br>
+ * Software is furnished to do so, subject to the following conditions:<br>
+ *<br>
+ * The above copyright notice and this permission notice (including the next<br>
+ * paragraph) shall be included in all copies or substantial portions of the<br>
+ * Software.<br>
+ *<br>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br>
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br>
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL<br>
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br>
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING<br>
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS<br>
+ * IN THE SOFTWARE.<br>
+ */<br>
+<br>
+#include <assert.h><br>
+#include <stdlib.h><br>
+#include <windows.h><br>
+<br>
+#include "piglit-util-gl.h"<br>
+#include "piglit_wl_framework.h"<br>
+<br>
+static void<br>
+enter_event_loop(struct piglit_winsys_framework *winsys_fw)<br>
+{<br>
+<br>
+       /* FINISHME: Write event loop for Windows.<br>
+        *<br>
+        * Until we have proper Windows/WGL support, give the user enough<br>
+        * time to view the window by sleeping.<br>
+        */<br>
+       Sleep(8000);<br>
+}<br>
+<br>
+static void<br>
+show_window(struct piglit_winsys_framework *winsys_fw)<br>
+{<br>
+       waffle_window_show(winsys_fw->wfl_fw.window);<br>
+}<br>
+<br>
+static void<br>
+destroy(struct piglit_gl_framework *gl_fw)<br>
+{<br>
+       struct piglit_winsys_framework *winsys_fw= piglit_winsys_framework(gl_fw);<br>
+<br>
+       if (winsys_fw == NULL)<br>
+               return;<br>
+<br>
+       piglit_winsys_framework_teardown(winsys_fw);<br>
+       free(winsys_fw);<br>
+}<br>
+<br>
+struct piglit_gl_framework*<br>
+piglit_wgl_framework_create(const struct piglit_gl_test_config *test_config)<br>
+{<br>
+       struct piglit_winsys_framework *winsys_fw = NULL;<br>
+       struct piglit_gl_framework *gl_fw = NULL;<br>
+       bool ok = true;<br>
+<br>
+       winsys_fw = calloc(1, sizeof(*winsys_fw));<br>
+       gl_fw = &winsys_fw->wfl_fw.gl_fw;<br>
+<br>
+       ok = piglit_winsys_framework_init(winsys_fw, test_config,<br>
+                                  WAFFLE_PLATFORM_WGL);<br>
+       if (!ok)<br>
+               goto fail;<br>
+<br>
+       winsys_fw->show_window = show_window;<br>
+       winsys_fw->enter_event_loop = enter_event_loop;<br>
+       gl_fw->destroy = destroy;<br>
+<br>
+       return gl_fw;<br>
+<br>
+fail:<br>
+       destroy(gl_fw);<br>
+       return NULL;<br>
+}<br>
diff --git a/tests/util/piglit-framework-gl/piglit_wgl_framework.h b/tests/util/piglit-framework-gl/piglit_wgl_framework.h<br>
new file mode 100644<br>
index 0000000..4592328<br>
--- /dev/null<br>
+++ b/tests/util/piglit-framework-gl/piglit_wgl_framework.h<br>
@@ -0,0 +1,29 @@<br>
+/*<br>
+ * Copyright © 2014 Emil Velikov<br>
+ *<br>
+ * Permission is hereby granted, free of charge, to any person obtaining a<br>
+ * copy of this software and associated documentation files (the "Software"),<br>
+ * to deal in the Software without restriction, including without limitation<br>
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,<br>
+ * and/or sell copies of the Software, and to permit persons to whom the<br>
+ * Software is furnished to do so, subject to the following conditions:<br>
+ *<br>
+ * The above copyright notice and this permission notice (including the next<br>
+ * paragraph) shall be included in all copies or substantial portions of the<br>
+ * Software.<br>
+ *<br>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br>
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br>
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL<br>
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br>
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING<br>
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS<br>
+ * IN THE SOFTWARE.<br>
+ */<br>
+<br>
+#pragma once<br>
+<br>
+#include "piglit_winsys_framework.h"<br>
+<br>
+struct piglit_gl_framework*<br>
+piglit_wgl_framework_create(const struct piglit_gl_test_config *test_config);<br>
diff --git a/tests/util/piglit-framework-gl/piglit_winsys_framework.c b/tests/util/piglit-framework-gl/piglit_winsys_framework.c<br>
index 4c50f0c..d9a40eb 100644<br>
--- a/tests/util/piglit-framework-gl/piglit_winsys_framework.c<br>
+++ b/tests/util/piglit-framework-gl/piglit_winsys_framework.c<br>
@@ -31,6 +31,7 @@<br>
<br>
 #include "piglit_gbm_framework.h"<br>
 #include "piglit_gl_framework.h"<br>
+#include "piglit_wgl_framework.h"<br>
 #include "piglit_winsys_framework.h"<br>
 #include "piglit_wl_framework.h"<br>
 #include "piglit_x11_framework.h"<br>
@@ -177,6 +178,12 @@ piglit_winsys_framework_factory(const struct piglit_gl_test_config *test_config)<br>
        case WAFFLE_PLATFORM_WAYLAND:<br>
                return piglit_wl_framework_create(test_config);<br>
 #endif<br>
+<br>
+#ifdef PIGLIT_HAS_WGL<br>
+       case WAFFLE_PLATFORM_WGL:<br>
+               return piglit_wgl_framework_create(test_config);<br>
+#endif<br>
+<br>
        default:<br>
                assert(0);<br>
                return NULL;<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.1.3<br>
<br>
_______________________________________________<br>
Piglit mailing list<br>
<a href="mailto:Piglit@lists.freedesktop.org">Piglit@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/piglit" target="_blank">http://lists.freedesktop.org/mailman/listinfo/piglit</a><br>
</font></span></blockquote></div></div></div>