blob: 0c5851336ee2c5ba3fc94fd589ad18476fef1fcd [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "magma_image.h"
#include <gtest/gtest.h>
#include "drm_fourcc.h"
class MagmaImageTesting : public ::testing::Test {};
constexpr uint64_t kWidth = 1920;
constexpr uint64_t kHeight = 1080;
constexpr uint32_t kFormat = DRM_FORMAT_ARGB8888;
TEST_F(MagmaImageTesting, SpecifyLinear) {
uint32_t physical_device_index = 0;
zx::vmo buffer;
zx::eventpair token;
magma_image_create_info_t create_info = {
.drm_format = kFormat,
.drm_format_modifiers = {DRM_FORMAT_MOD_LINEAR, DRM_FORMAT_MOD_INVALID},
.width = kWidth,
.height = kHeight,
.flags = 0,
};
magma_image_info_t image_info = {};
ASSERT_EQ(MAGMA_STATUS_OK, magma_image::CreateDrmImage(physical_device_index, &create_info,
&image_info, &buffer, &token));
EXPECT_EQ(DRM_FORMAT_MOD_LINEAR, image_info.drm_format_modifier);
EXPECT_EQ(kWidth * 4u, image_info.plane_strides[0]);
EXPECT_EQ(0u, image_info.plane_offsets[0]);
EXPECT_FALSE(token);
}
TEST_F(MagmaImageTesting, SpecifyIntelX) {
uint32_t physical_device_index = 0;
zx::vmo buffer;
zx::eventpair token;
magma_image_create_info_t create_info = {
.drm_format = kFormat,
.drm_format_modifiers = {I915_FORMAT_MOD_X_TILED, DRM_FORMAT_MOD_INVALID},
.width = kWidth,
.height = kHeight,
.flags = 0,
};
magma_image_info_t image_info = {};
ASSERT_EQ(MAGMA_STATUS_OK, magma_image::CreateDrmImage(physical_device_index, &create_info,
&image_info, &buffer, &token));
EXPECT_EQ(I915_FORMAT_MOD_X_TILED, image_info.drm_format_modifier);
EXPECT_EQ(0u, image_info.plane_strides[0]);
EXPECT_EQ(0u, image_info.plane_offsets[0]);
EXPECT_FALSE(token);
}
TEST_F(MagmaImageTesting, SpecifyIntelY) {
uint32_t physical_device_index = 0;
zx::vmo buffer;
zx::eventpair token;
magma_image_create_info_t create_info = {
.drm_format = kFormat,
.drm_format_modifiers = {I915_FORMAT_MOD_Y_TILED, DRM_FORMAT_MOD_INVALID},
.width = kWidth,
.height = kHeight,
.flags = 0,
};
magma_image_info_t image_info = {};
ASSERT_EQ(MAGMA_STATUS_OK, magma_image::CreateDrmImage(physical_device_index, &create_info,
&image_info, &buffer, &token));
EXPECT_EQ(I915_FORMAT_MOD_Y_TILED, image_info.drm_format_modifier);
EXPECT_EQ(0u, image_info.plane_strides[0]);
EXPECT_EQ(0u, image_info.plane_offsets[0]);
EXPECT_FALSE(token);
}
TEST_F(MagmaImageTesting, SpecifyIntelYf) {
uint32_t physical_device_index = 0;
zx::vmo buffer;
zx::eventpair token;
magma_image_create_info_t create_info = {
.drm_format = kFormat,
.drm_format_modifiers = {I915_FORMAT_MOD_Yf_TILED, DRM_FORMAT_MOD_INVALID},
.width = kWidth,
.height = kHeight,
.flags = 0,
};
magma_image_info_t image_info = {};
ASSERT_EQ(MAGMA_STATUS_INVALID_ARGS,
magma_image::CreateDrmImage(physical_device_index, &create_info, &image_info, &buffer,
&token));
EXPECT_FALSE(token);
}
TEST_F(MagmaImageTesting, IntelMany) {
uint32_t physical_device_index = 0;
zx::vmo buffer;
zx::eventpair token;
magma_image_create_info_t create_info = {
.drm_format = kFormat,
.drm_format_modifiers = {DRM_FORMAT_MOD_LINEAR, I915_FORMAT_MOD_X_TILED,
I915_FORMAT_MOD_Y_TILED, I915_FORMAT_MOD_Yf_TILED,
DRM_FORMAT_MOD_INVALID},
.width = kWidth,
.height = kHeight,
.flags = 0,
};
magma_image_info_t image_info = {};
ASSERT_EQ(MAGMA_STATUS_OK, magma_image::CreateDrmImage(physical_device_index, &create_info,
&image_info, &buffer, &token));
EXPECT_EQ(I915_FORMAT_MOD_Y_TILED, image_info.drm_format_modifier);
EXPECT_EQ(0u, image_info.plane_strides[0]);
EXPECT_EQ(0u, image_info.plane_offsets[0]);
EXPECT_FALSE(token);
}
TEST_F(MagmaImageTesting, IntelNone) {
uint32_t physical_device_index = 0;
magma_image_info_t image_info = {};
zx::vmo buffer;
zx::eventpair token;
magma_image_create_info_t create_info = {
.drm_format = kFormat,
.drm_format_modifiers = {DRM_FORMAT_MOD_INVALID},
.width = kWidth,
.height = kHeight,
.flags = 0,
};
ASSERT_EQ(MAGMA_STATUS_OK, magma_image::CreateDrmImage(physical_device_index, &create_info,
&image_info, &buffer, &token));
EXPECT_EQ(I915_FORMAT_MOD_Y_TILED, image_info.drm_format_modifier);
EXPECT_EQ(0u, image_info.plane_strides[0]);
EXPECT_EQ(0u, image_info.plane_offsets[0]);
EXPECT_FALSE(token);
}
TEST_F(MagmaImageTesting, IntelNonePresentable) {
uint32_t physical_device_index = 0;
magma_image_info_t image_info = {};
zx::vmo buffer;
zx::eventpair token;
magma_image_create_info_t create_info = {
.drm_format = kFormat,
.drm_format_modifiers = {DRM_FORMAT_MOD_INVALID},
.width = kWidth,
.height = kHeight,
.flags = MAGMA_IMAGE_CREATE_FLAGS_PRESENTABLE,
};
ASSERT_EQ(MAGMA_STATUS_OK, magma_image::CreateDrmImage(physical_device_index, &create_info,
&image_info, &buffer, &token));
if (image_info.drm_format_modifier != I915_FORMAT_MOD_Y_TILED)
EXPECT_EQ(image_info.drm_format_modifier, I915_FORMAT_MOD_X_TILED);
EXPECT_EQ(0u, image_info.plane_strides[0]);
EXPECT_EQ(0u, image_info.plane_offsets[0]);
EXPECT_TRUE(token);
}