2026-03-31 18:37:23 +03:00
|
|
|
#include <helpers/Format.hpp>
|
|
|
|
|
|
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
|
|
|
|
|
|
#include <drm_fourcc.h>
|
|
|
|
|
#include <wayland-server-protocol.h>
|
2026-04-05 20:37:07 +02:00
|
|
|
#include <hyprgraphics/egl/Egl.hpp>
|
2026-03-31 18:37:23 +03:00
|
|
|
|
2026-04-05 20:37:07 +02:00
|
|
|
using namespace Hyprgraphics::Egl;
|
2026-03-31 18:37:23 +03:00
|
|
|
using namespace NFormatUtils;
|
|
|
|
|
|
|
|
|
|
TEST(Helpers, formatDrmToShm) {
|
|
|
|
|
EXPECT_EQ(drmToShm(DRM_FORMAT_XRGB8888), WL_SHM_FORMAT_XRGB8888);
|
|
|
|
|
EXPECT_EQ(drmToShm(DRM_FORMAT_ARGB8888), WL_SHM_FORMAT_ARGB8888);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Helpers, formatShmToDrm) {
|
|
|
|
|
EXPECT_EQ(shmToDRM(WL_SHM_FORMAT_XRGB8888), DRM_FORMAT_XRGB8888);
|
|
|
|
|
EXPECT_EQ(shmToDRM(WL_SHM_FORMAT_ARGB8888), DRM_FORMAT_ARGB8888);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Helpers, formatDrmShmRoundTrip) {
|
|
|
|
|
EXPECT_EQ(shmToDRM(drmToShm(DRM_FORMAT_XRGB8888)), DRM_FORMAT_XRGB8888);
|
|
|
|
|
EXPECT_EQ(shmToDRM(drmToShm(DRM_FORMAT_ARGB8888)), DRM_FORMAT_ARGB8888);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Helpers, formatIsFormatYUV) {
|
|
|
|
|
EXPECT_TRUE(isFormatYUV(DRM_FORMAT_YUYV));
|
|
|
|
|
EXPECT_TRUE(isFormatYUV(DRM_FORMAT_NV12));
|
|
|
|
|
EXPECT_TRUE(isFormatYUV(DRM_FORMAT_NV21));
|
|
|
|
|
EXPECT_FALSE(isFormatYUV(DRM_FORMAT_XRGB8888));
|
|
|
|
|
EXPECT_FALSE(isFormatYUV(DRM_FORMAT_ARGB8888));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Helpers, formatGetPixelFormatFromDRM) {
|
|
|
|
|
const auto* xrgb = getPixelFormatFromDRM(DRM_FORMAT_XRGB8888);
|
|
|
|
|
ASSERT_NE(xrgb, nullptr);
|
|
|
|
|
EXPECT_EQ(xrgb->drmFormat, DRM_FORMAT_XRGB8888);
|
|
|
|
|
EXPECT_FALSE(xrgb->withAlpha);
|
|
|
|
|
|
|
|
|
|
const auto* argb = getPixelFormatFromDRM(DRM_FORMAT_ARGB8888);
|
|
|
|
|
ASSERT_NE(argb, nullptr);
|
|
|
|
|
EXPECT_EQ(argb->drmFormat, DRM_FORMAT_ARGB8888);
|
|
|
|
|
EXPECT_TRUE(argb->withAlpha);
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ(getPixelFormatFromDRM(0), nullptr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Helpers, formatIsFormatOpaque) {
|
2026-04-05 20:37:07 +02:00
|
|
|
EXPECT_TRUE(isDrmFormatOpaque(DRM_FORMAT_XRGB8888));
|
|
|
|
|
EXPECT_FALSE(isDrmFormatOpaque(DRM_FORMAT_ARGB8888));
|
2026-03-31 18:37:23 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Helpers, formatPixelsPerBlock) {
|
|
|
|
|
const auto* fmt = getPixelFormatFromDRM(DRM_FORMAT_XRGB8888);
|
|
|
|
|
ASSERT_NE(fmt, nullptr);
|
|
|
|
|
EXPECT_GT(pixelsPerBlock(fmt), 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Helpers, formatMinStride) {
|
|
|
|
|
const auto* fmt = getPixelFormatFromDRM(DRM_FORMAT_XRGB8888);
|
|
|
|
|
ASSERT_NE(fmt, nullptr);
|
|
|
|
|
// XRGB8888 = 4 bytes per pixel, 1920 wide = 7680 bytes stride
|
|
|
|
|
EXPECT_EQ(minStride(fmt, 1920), 1920 * 4);
|
|
|
|
|
EXPECT_EQ(minStride(fmt, 0), 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Helpers, formatDrmFormatName) {
|
|
|
|
|
EXPECT_FALSE(drmFormatName(DRM_FORMAT_XRGB8888).empty());
|
|
|
|
|
EXPECT_FALSE(drmFormatName(DRM_FORMAT_ARGB8888).empty());
|
|
|
|
|
EXPECT_EQ(drmFormatName(0), "INVALID");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(Helpers, formatAlphaFormat) {
|
|
|
|
|
EXPECT_EQ(alphaFormat(DRM_FORMAT_XRGB8888), DRM_FORMAT_ARGB8888);
|
|
|
|
|
EXPECT_EQ(alphaFormat(DRM_FORMAT_XBGR8888), DRM_FORMAT_ABGR8888);
|
|
|
|
|
// Format without alpha stripped entry returns DRM_FORMAT_INVALID (0)
|
|
|
|
|
EXPECT_EQ(alphaFormat(DRM_FORMAT_ARGB8888), 0u);
|
|
|
|
|
}
|