From 2637bbf0164cd22a9918896d81ef295cc55272dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Foucault?= Date: Sun, 3 Sep 2023 13:38:21 +0200 Subject: [PATCH] EEVEE-Next: Add LUT test This avoid the generation code to become desync with the precomputed tabled. This is also a good way to test any changes to them. --- source/blender/draw/tests/eevee_test.cc | 21 +++++++++++++++++++++ tests/gtests/testing/testing.h | 12 ++++++++++++ 2 files changed, 33 insertions(+) diff --git a/source/blender/draw/tests/eevee_test.cc b/source/blender/draw/tests/eevee_test.cc index e5d3ad4240f..b05634e619d 100644 --- a/source/blender/draw/tests/eevee_test.cc +++ b/source/blender/draw/tests/eevee_test.cc @@ -16,6 +16,7 @@ #include "draw_shader.h" #include "draw_testing.hh" #include "engines/eevee_next/eevee_instance.hh" +#include "engines/eevee_next/eevee_lut.hh" namespace blender::draw { @@ -1440,4 +1441,24 @@ static void test_eevee_surfel_list() } DRAW_TEST(eevee_surfel_list) +static void test_eevee_lut_gen() +{ + GPU_render_begin(); + + Manager manager; + + /* Check if LUT generation matches the header version. */ + auto bsdf_ggx_gen = LookUpTable(manager, LUT_GGX_BRDF_SPLIT_SUM, {64, 64, 1}).data(); + auto btdf_ggx_gen = LookUpTable(manager, LUT_GGX_BTDF_SPLIT_SUM, {64, 64, 16}).data(); + + Span bsdf_ggx_lut(reinterpret_cast(bsdf_split_sum_ggx), 64 * 64); + Span btdf_ggx_lut(reinterpret_cast(btdf_split_sum_ggx), 64 * 64 * 16); + + EXPECT_NEAR_ARRAY_ND(bsdf_ggx_lut.data(), bsdf_ggx_gen.data(), bsdf_ggx_gen.size(), 2, 5e-4f); + EXPECT_NEAR_ARRAY_ND(btdf_ggx_lut.data(), btdf_ggx_gen.data(), btdf_ggx_gen.size(), 2, 5e-4f); + + GPU_render_end(); +} +DRAW_TEST(eevee_lut_gen) + } // namespace blender::draw diff --git a/tests/gtests/testing/testing.h b/tests/gtests/testing/testing.h index 8f30d777eef..5b0a73ff253 100644 --- a/tests/gtests/testing/testing.h +++ b/tests/gtests/testing/testing.h @@ -153,6 +153,18 @@ inline void EXPECT_EQ_ARRAY_ND(const T *expected, const T *actual, const size_t } } +template +inline void EXPECT_NEAR_ARRAY_ND( + const T *expected, const T *actual, const size_t N, const size_t D, const U tolerance) +{ + for (size_t i = 0; i < N; ++i) { + for (size_t j = 0; j < D; ++j) { + EXPECT_NEAR(expected[i][j], actual[i][j], tolerance) + << "Element mismatch at index " << i << ", component index " << j; + } + } +} + #ifdef _WIN32 # define ABORT_PREDICATE ::testing::ExitedWithCode(3) #else