Mesa (master): gallium/osmesa: Convert osmesa test to gtest
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Nov 7 15:58:29 UTC 2019
Module: Mesa
Branch: master
Commit: 7bfb56a135a218fae92845b8e39ffc7fb143d2f9
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7bfb56a135a218fae92845b8e39ffc7fb143d2f9
Author: Dylan Baker <dylan at pnwbakers.com>
Date: Mon Oct 21 13:08:32 2019 -0700
gallium/osmesa: Convert osmesa test to gtest
This uses a bunch of additional C++ features for niceness and safety.
Reviewed-by: Brian Paul <brianp at vmware.com>
---
src/gallium/targets/osmesa/meson.build | 14 +++--
src/gallium/targets/osmesa/test-render.c | 44 -------------
src/gallium/targets/osmesa/test-render.cpp | 99 ++++++++++++++++++++++++++++++
3 files changed, 108 insertions(+), 49 deletions(-)
diff --git a/src/gallium/targets/osmesa/meson.build b/src/gallium/targets/osmesa/meson.build
index 7792aa1e2fc..8b2ba248b60 100644
--- a/src/gallium/targets/osmesa/meson.build
+++ b/src/gallium/targets/osmesa/meson.build
@@ -73,9 +73,13 @@ pkg.generate(
if with_tests
test('osmesa-render',
- executable('osmesa-render',
- 'test-render.c',
- include_directories : inc_common,
- link_with: libosmesa),
- suite: 'gallium')
+ executable(
+ 'osmesa-render',
+ 'test-render.cpp',
+ include_directories : inc_common,
+ link_with: libosmesa,
+ dependencies : [idep_gtest],
+ ),
+ suite: 'gallium'
+ )
endif
diff --git a/src/gallium/targets/osmesa/test-render.c b/src/gallium/targets/osmesa/test-render.c
deleted file mode 100644
index dc5cac2982e..00000000000
--- a/src/gallium/targets/osmesa/test-render.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "GL/osmesa.h"
-
-static void
-render(void)
-{
- glClearColor(0, 1, 0, 0);
- glClear(GL_COLOR_BUFFER_BIT);
-}
-
-int
-main(int argc, char **argv)
-{
- OSMesaContext ctx;
- uint32_t pixel;
- uint32_t green = 0xff << 8;
- int w = 1, h = 1;
-
- ctx = OSMesaCreateContext(GL_RGBA, NULL);
- if (!ctx) {
- fprintf(stderr, "Context create failed\n");
- return 1;
- }
-
- if (!OSMesaMakeCurrent(ctx, &pixel, GL_UNSIGNED_BYTE, w, h )) {
- fprintf(stderr, "MakeCurrent failed\n");
- return 1;
- }
-
- render();
- glFinish();
-
- if (pixel != green) {
- fprintf(stderr, "Expected: 0x%08x\n", green);
- fprintf(stderr, "Probed: 0x%08x\n", pixel);
- return 1;
- }
-
- OSMesaDestroyContext(ctx);
-
- return 0;
-}
diff --git a/src/gallium/targets/osmesa/test-render.cpp b/src/gallium/targets/osmesa/test-render.cpp
new file mode 100644
index 00000000000..1adffe7bbcd
--- /dev/null
+++ b/src/gallium/targets/osmesa/test-render.cpp
@@ -0,0 +1,99 @@
+#include <cstdint>
+#include <cstdio>
+#include <cstdlib>
+#include <array>
+#include <memory>
+
+#include <gtest/gtest.h>
+
+#include "GL/osmesa.h"
+
+
+typedef std::array<GLenum, 2> Params;
+
+class OSMesaRenderTestFixture : public testing::TestWithParam<Params> {};
+
+std::string
+name_params(const testing::TestParamInfo<Params> params) {
+ auto p = params.param;
+ std::string first, second;
+ switch (p[0]) {
+ case OSMESA_RGBA:
+ first = "rgba";
+ break;
+ case OSMESA_BGRA:
+ first = "bgra";
+ break;
+ case OSMESA_RGB:
+ first = "rgb";
+ break;
+ case OSMESA_RGB_565:
+ first = "rgb_565";
+ break;
+ case OSMESA_ARGB:
+ first = "argb";
+ break;
+ }
+
+ switch (p[1]) {
+ case GL_UNSIGNED_SHORT:
+ second = "unsigned_short";
+ break;
+ case GL_UNSIGNED_BYTE:
+ second = "unsigned_byte";
+ break;
+ case GL_FLOAT:
+ second = "float";
+ break;
+ case GL_UNSIGNED_SHORT_5_6_5:
+ second = "unisgned_short_565";
+ break;
+ }
+
+ return first + "_" + second;
+};
+
+TEST_P(OSMesaRenderTestFixture, Render)
+{
+ auto params = GetParam();
+ uint32_t pixel = 0;
+ uint32_t expected; // This should be green for the given color model
+ int w = 1, h = 1;
+
+ std::unique_ptr<osmesa_context, decltype(&OSMesaDestroyContext)> ctx{
+ OSMesaCreateContext(params[0], NULL), &OSMesaDestroyContext};
+ ASSERT_TRUE(ctx);
+
+ auto ret = OSMesaMakeCurrent(ctx.get(), &pixel, params[1], w, h);
+ ASSERT_EQ(ret, GL_TRUE);
+
+ switch (params[0]) {
+ case OSMESA_RGBA:
+ case OSMESA_BGRA:
+ case OSMESA_RGB:
+ expected = 0xff << 8;
+ glClearColor(0, 1, 0, 0);
+ break;
+ case OSMESA_RGB_565:
+ expected = 0x3f << 5;
+ glClearColor(0, 1, 0, 0);
+ break;
+ case OSMESA_ARGB:
+ expected = 0xff << 24;
+ glClearColor(0, 0, 1, 0);
+ break;
+ }
+ glClear(GL_COLOR_BUFFER_BIT);
+ glFinish();
+
+ ASSERT_EQ(expected, pixel);
+}
+
+INSTANTIATE_TEST_CASE_P(
+ OSMesaRenderTest,
+ OSMesaRenderTestFixture,
+ testing::Values(
+ Params{ OSMESA_RGBA, GL_UNSIGNED_BYTE }
+ ),
+ name_params
+);
More information about the mesa-commit
mailing list