tests/checkasm/sw_ops: add check for SWS_UOP_READ_PALETTE

We just need to ensure the palette contains valid data, which will happen
automatically as long as the plane 1 is large enough.

Sponsored-by: Sovereign Tech Fund
Signed-off-by: Niklas Haas <git@haasn.dev>
This commit is contained in:
Niklas Haas
2026-05-20 16:44:09 +02:00
committed by Niklas Haas
parent d4b9b94ccb
commit 310df19fcd

View File

@@ -56,6 +56,9 @@ static const char *tprintf(char buf[], size_t size, const char *fmt, ...)
static int rw_pixel_bits(const SwsOp *op)
{
if (op->rw.mode == SWS_RW_PALETTE)
return 8; /* index size */
int elems = 0;
switch (op->rw.mode) {
case SWS_RW_PLANAR: elems = 1; break;
@@ -177,6 +180,11 @@ static void check_compiled(const char *name,
exec.out_bump[i] = exec.out_stride[i] - write_size;
}
if (read_op->rw.mode == SWS_RW_PALETTE) {
static_assert(sizeof(src0[1]) >= sizeof(uint32_t[256]), "palette plane too small");
exec.in_bump[1] = exec.in_stride[1] = 0;
}
int32_t in_bump_y[LINES];
if (read_op->rw.filter.op == SWS_OP_FILTER_V) {
const int *offsets = read_op->rw.filter.kernel->offsets;
@@ -403,8 +411,9 @@ static void check_read(const char *name, const SwsUOp *uop)
switch (uop->uop) {
case SWS_UOP_READ_PACKED:
case SWS_UOP_READ_BIT:
case SWS_UOP_READ_NIBBLE: mode = SWS_RW_PACKED; break;
case SWS_UOP_READ_PLANAR: mode = SWS_RW_PLANAR; break;
case SWS_UOP_READ_NIBBLE: mode = SWS_RW_PACKED; break;
case SWS_UOP_READ_PLANAR: mode = SWS_RW_PLANAR; break;
case SWS_UOP_READ_PALETTE: mode = SWS_RW_PALETTE; break;
default: return;
}
@@ -764,6 +773,7 @@ void checkasm_check_sw_ops(void)
CHECK_FOR(READ_PACKED, check_read);
CHECK_FOR(READ_NIBBLE, check_read);
CHECK_FOR(READ_BIT, check_read);
CHECK_FOR(READ_PALETTE, check_read);
CHECK_FOR(WRITE_PLANAR, check_write);
CHECK_FOR(WRITE_PACKED, check_write);
CHECK_FOR(WRITE_NIBBLE, check_write);