mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-17 04:50:19 +01:00
gallium/osmesa: Convert osmesa test to gtest
This uses a bunch of additional C++ features for niceness and safety. Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
d1767362aa
commit
7bfb56a135
3 changed files with 108 additions and 49 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
99
src/gallium/targets/osmesa/test-render.cpp
Normal file
99
src/gallium/targets/osmesa/test-render.cpp
Normal file
|
|
@ -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
|
||||
);
|
||||
Loading…
Add table
Reference in a new issue