summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/targets/osmesa/meson.build14
-rw-r--r--src/gallium/targets/osmesa/test-render.c44
-rw-r--r--src/gallium/targets/osmesa/test-render.cpp99
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
+);