PR #23331 opened by mkver
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23331
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23331.patch

Possible with checkasm_set_func_variant().

Signed-off-by: Andreas Rheinhardt <[email protected]>


>From 07534aba2a578e86f4ce17401215765e6d1f8aa5 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Thu, 4 Jun 2026 14:18:52 +0200
Subject: [PATCH] tests/checkasm/hpeldsp: Also test non-bitexact functions

Possible with checkasm_set_func_variant().

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 tests/checkasm/hpeldsp.c | 29 ++++++++++++++++++++++++-----
 1 file changed, 24 insertions(+), 5 deletions(-)

diff --git a/tests/checkasm/hpeldsp.c b/tests/checkasm/hpeldsp.c
index bf44a666ca..ed074faee5 100644
--- a/tests/checkasm/hpeldsp.c
+++ b/tests/checkasm/hpeldsp.c
@@ -19,6 +19,9 @@
 #include <assert.h>
 #include <stddef.h>
 
+#include <checkasm/checkasm.h>
+#include <checkasm/test.h>
+
 #include "checkasm.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/macros.h"
@@ -57,7 +60,7 @@ void checkasm_check_hpeldsp(void)
     DECLARE_ALIGNED(MAX_BLOCK_SIZE, uint8_t, srcbuf1)[INPUT_BUF_SIZE];
     DECLARE_ALIGNED(MAX_BLOCK_SIZE, uint8_t, dstbuf0)[BUF_SIZE];
     DECLARE_ALIGNED(MAX_BLOCK_SIZE, uint8_t, dstbuf1)[BUF_SIZE];
-    HpelDSPContext hdsp;
+    HpelDSPContext hdsp[2];
     static const struct {
         const char *name;
         size_t offset;
@@ -71,17 +74,26 @@ void checkasm_check_hpeldsp(void)
     };
     declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t 
*dst, const uint8_t *src, ptrdiff_t stride, int h);
 
-    ff_hpeldsp_init(&hdsp, AV_CODEC_FLAG_BITEXACT);
+    ff_hpeldsp_init(hdsp, AV_CODEC_FLAG_BITEXACT);
+    ff_hpeldsp_init(hdsp + 1, 0);
 
     for (size_t i = 0; i < FF_ARRAY_ELEMS(tests); ++i) {
-        op_pixels_func (*func_tab)[4] = (op_pixels_func (*)[4])((char*)&hdsp + 
tests[i].offset);
+        op_pixels_func (*func_tab)[4]  = (op_pixels_func (*)[4])((char*)hdsp + 
tests[i].offset);
+        op_pixels_func (*func_tab2)[4] = (op_pixels_func 
(*)[4])((char*)&hdsp[1] + tests[i].offset);
         for (unsigned j = 0; j < tests[i].nb_blocksizes; ++j) {
             const unsigned blocksize = MAX_BLOCK_SIZE >> j;
             // h must always be a multiple of four, except when width is two 
or four.
             const unsigned h_mult = blocksize <= 4 ? 2 : 4;
 
             for (unsigned dxy = 0; dxy < 4; ++dxy) {
-                if (check_func(func_tab[j][dxy], "%s[%u][%u]", tests[i].name, 
j, dxy)) {
+                for (int approx = 0; approx < 2; ++approx) {
+                    if (approx) {
+                        checkasm_set_func_variant("approx_%s", 
checkasm_get_cpu_suffix());
+                        if (!check_func(func_tab2[j][dxy], "%s[%u][%u]", 
tests[i].name, j, dxy))
+                            continue;
+                    } else if (!check_func(func_tab[j][dxy], "%s[%u][%u]", 
tests[i].name, j, dxy))
+                        continue;
+
                     // Don't always use output that is 16-aligned.
                     size_t dst_offset = (rnd() % (MAX_BLOCK_SIZE / blocksize)) 
* blocksize;
                     size_t src_offset = rnd() % MAX_BLOCK_SIZE;
@@ -111,7 +123,14 @@ void checkasm_check_hpeldsp(void)
                     randomize_buffers(dstbuf0, dstbuf1);
                     call_ref(dst0, src0, stride, h);
                     call_new(dst1, src1, stride, h);
-                    if (memcmp(srcbuf0, srcbuf1, sizeof(srcbuf0)) || 
memcmp(dstbuf0, dstbuf1, sizeof(dstbuf0)))
+                    if (memcmp(srcbuf0, srcbuf1, sizeof(srcbuf0)))
+                        fail();
+                    if (approx) {
+                        for (size_t k = 0; k < FF_ARRAY_ELEMS(dstbuf1); ++k) {
+                            if (abs(dstbuf0[k] - dstbuf1[k]) > 1)
+                                fail();
+                        }
+                    } else if (memcmp(dstbuf0, dstbuf1, sizeof(dstbuf0)))
                         fail();
                     bench_new(dst0, src0, stride, h);
                 }
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to