gallium/osmesa: Convert osmesa test to gtest
[mesa.git] / src / gallium / targets / osmesa / test-render.cpp
1 #include <cstdint>
2 #include <cstdio>
3 #include <cstdlib>
4 #include <array>
5 #include <memory>
6
7 #include <gtest/gtest.h>
8
9 #include "GL/osmesa.h"
10
11
12 typedef std::array<GLenum, 2> Params;
13
14 class OSMesaRenderTestFixture : public testing::TestWithParam<Params> {};
15
16 std::string
17 name_params(const testing::TestParamInfo<Params> params) {
18 auto p = params.param;
19 std::string first, second;
20 switch (p[0]) {
21 case OSMESA_RGBA:
22 first = "rgba";
23 break;
24 case OSMESA_BGRA:
25 first = "bgra";
26 break;
27 case OSMESA_RGB:
28 first = "rgb";
29 break;
30 case OSMESA_RGB_565:
31 first = "rgb_565";
32 break;
33 case OSMESA_ARGB:
34 first = "argb";
35 break;
36 }
37
38 switch (p[1]) {
39 case GL_UNSIGNED_SHORT:
40 second = "unsigned_short";
41 break;
42 case GL_UNSIGNED_BYTE:
43 second = "unsigned_byte";
44 break;
45 case GL_FLOAT:
46 second = "float";
47 break;
48 case GL_UNSIGNED_SHORT_5_6_5:
49 second = "unisgned_short_565";
50 break;
51 }
52
53 return first + "_" + second;
54 };
55
56 TEST_P(OSMesaRenderTestFixture, Render)
57 {
58 auto params = GetParam();
59 uint32_t pixel = 0;
60 uint32_t expected; // This should be green for the given color model
61 int w = 1, h = 1;
62
63 std::unique_ptr<osmesa_context, decltype(&OSMesaDestroyContext)> ctx{
64 OSMesaCreateContext(params[0], NULL), &OSMesaDestroyContext};
65 ASSERT_TRUE(ctx);
66
67 auto ret = OSMesaMakeCurrent(ctx.get(), &pixel, params[1], w, h);
68 ASSERT_EQ(ret, GL_TRUE);
69
70 switch (params[0]) {
71 case OSMESA_RGBA:
72 case OSMESA_BGRA:
73 case OSMESA_RGB:
74 expected = 0xff << 8;
75 glClearColor(0, 1, 0, 0);
76 break;
77 case OSMESA_RGB_565:
78 expected = 0x3f << 5;
79 glClearColor(0, 1, 0, 0);
80 break;
81 case OSMESA_ARGB:
82 expected = 0xff << 24;
83 glClearColor(0, 0, 1, 0);
84 break;
85 }
86 glClear(GL_COLOR_BUFFER_BIT);
87 glFinish();
88
89 ASSERT_EQ(expected, pixel);
90 }
91
92 INSTANTIATE_TEST_CASE_P(
93 OSMesaRenderTest,
94 OSMesaRenderTestFixture,
95 testing::Values(
96 Params{ OSMESA_RGBA, GL_UNSIGNED_BYTE }
97 ),
98 name_params
99 );