blob: 708d1a952114a6f8b4d69fad737b9066764f628b [file] [log] [blame]
// Copyright 2018 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 "test.h"
#include <cmath>
namespace display_test {
Test per_pixel_test(fuchsia::display::AlphaMode mode) {
return [mode](Context* context) {
auto layer1 = context->CreatePrimaryLayer(context->display_width(),
context->display_height());
auto image1 = context->CreateImage(context->display_width(),
context->display_height());
layer1->SetImage(image1);
auto layer2 = context->CreatePrimaryLayer(context->display_width(),
context->display_height());
auto image2 = context->CreateAlphaImage(
context->display_width(), context->display_height(), 0xa0,
mode == fuchsia::display::AlphaMode::PREMULTIPLIED);
layer2->SetAlpha(mode, nanf(""));
layer2->SetImage(image2);
context->SetLayers(std::vector<Layer*>({layer1, layer2}));
context->ApplyConfig();
};
}
DISPLAY_TEST(per_pixel_hwmultiply_test,
per_pixel_test(fuchsia::display::AlphaMode::HW_MULTIPLY));
DISPLAY_TEST(per_pixel_premultiply_test,
per_pixel_test(fuchsia::display::AlphaMode::PREMULTIPLIED));
DISPLAY_TEST(per_pixel_disable_test,
per_pixel_test(fuchsia::display::AlphaMode::DISABLE));
Test plane_test(fuchsia::display::AlphaMode mode) {
return [mode](Context* context) {
auto layer1 = context->CreatePrimaryLayer(context->display_width(),
context->display_height());
auto image1 = context->CreateImage(context->display_width(),
context->display_height());
layer1->SetImage(image1);
auto layer2 = context->CreatePrimaryLayer(context->display_width(),
context->display_height());
auto image2 = context->CreateImage(context->display_width(),
context->display_height());
layer2->SetAlpha(mode, .62);
layer2->SetImage(image2);
context->SetLayers(std::vector<Layer*>({layer1, layer2}));
context->ApplyConfig();
};
}
DISPLAY_TEST(plane_alpha_hwmultiply_test,
plane_test(fuchsia::display::AlphaMode::HW_MULTIPLY));
DISPLAY_TEST(plane_alpha_premultiply_test,
plane_test(fuchsia::display::AlphaMode::PREMULTIPLIED));
Test per_pixel_and_plane_test(fuchsia::display::AlphaMode mode) {
return [mode](Context* context) {
auto layer1 = context->CreatePrimaryLayer(context->display_width(),
context->display_height());
auto image1 = context->CreateImage(context->display_width(),
context->display_height());
layer1->SetImage(image1);
auto layer2 = context->CreatePrimaryLayer(context->display_width(),
context->display_height());
auto image2 = context->CreateAlphaImage(
context->display_width(), context->display_height(), 0xa0,
mode == fuchsia::display::AlphaMode::PREMULTIPLIED);
layer2->SetAlpha(mode, .4);
layer2->SetImage(image2);
context->SetLayers(std::vector<Layer*>({layer1, layer2}));
context->ApplyConfig();
};
}
DISPLAY_TEST(
per_pixel_and_plane_hwmultiply_test,
per_pixel_and_plane_test(fuchsia::display::AlphaMode::HW_MULTIPLY));
DISPLAY_TEST(
per_pixel_and_plane_premultiply_test,
per_pixel_and_plane_test(fuchsia::display::AlphaMode::PREMULTIPLIED));
DISPLAY_TEST(progressive_plane_alpha_test, [](Context* context) {
auto layer1 = context->CreatePrimaryLayer(context->display_width(),
context->display_height());
auto image1 =
context->CreateImage(context->display_width(), context->display_height());
layer1->SetImage(image1);
auto layer2 = context->CreatePrimaryLayer(context->display_width(),
context->display_height());
auto image2 =
context->CreateImage(context->display_width(), context->display_height());
layer2->SetImage(image2);
context->SetLayers(std::vector<Layer*>({layer1, layer2}));
for (unsigned i = 0; i <= 5; i++) {
layer2->SetAlpha(fuchsia::display::AlphaMode::HW_MULTIPLY, .2 * i);
context->ApplyConfig();
}
});
} // namespace display_test