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.
This commit is contained in:
Clément Foucault 2023-09-03 13:38:21 +02:00
parent 7b54fce723
commit 2637bbf016
2 changed files with 33 additions and 0 deletions

View File

@ -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<float2>();
auto btdf_ggx_gen = LookUpTable(manager, LUT_GGX_BTDF_SPLIT_SUM, {64, 64, 16}).data<float2>();
Span<float2> bsdf_ggx_lut(reinterpret_cast<const float2 *>(bsdf_split_sum_ggx), 64 * 64);
Span<float2> btdf_ggx_lut(reinterpret_cast<const float2 *>(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

View File

@ -153,6 +153,18 @@ inline void EXPECT_EQ_ARRAY_ND(const T *expected, const T *actual, const size_t
}
}
template<typename T, typename U>
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