blob: 7f231f15d10d78849ca8d56821aa47820aecfa32 [file] [log] [blame]
// Copyright 2021 The piet-gpu authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Also licensed under MIT license, at your choice.
//! Tests for piet-gpu shaders and GPU capabilities.
mod bbox_intersection;
mod bbox_union;
mod clear;
mod clip;
mod config;
mod draw;
mod linkedlist;
mod message_passing;
mod prefix;
mod prefix_tree;
mod runner;
mod stack;
mod test_result;
#[cfg(feature = "piet-gpu")]
mod path;
#[cfg(feature = "piet-gpu")]
mod transform;
use clap::{App, Arg};
use piet_gpu_hal::InstanceFlags;
use crate::config::Config;
pub use crate::runner::Runner;
use crate::test_result::ReportStyle;
pub use crate::test_result::TestResult;
fn main() {
let matches = App::new("piet-gpu-tests")
.arg(
Arg::with_name("verbose")
.short("v")
.long("verbose")
.help("Verbose reporting of results"),
)
.arg(
Arg::with_name("groups")
.short("g")
.long("groups")
.help("Groups to run")
.takes_value(true),
)
.arg(
Arg::with_name("size")
.short("s")
.long("size")
.help("Size of tests")
.takes_value(true),
)
.arg(
Arg::with_name("n_iter")
.short("n")
.long("n_iter")
.help("Number of iterations")
.takes_value(true),
)
.arg(
Arg::with_name("verify_all")
.long("verify_all")
.help("Verify all iterations"),
)
.arg(
Arg::with_name("dx12")
.long("dx12")
.help("Prefer DX12 backend"),
)
.get_matches();
let style = if matches.is_present("verbose") {
ReportStyle::Verbose
} else {
ReportStyle::Short
};
let config = Config::from_matches(&matches);
unsafe {
let report = |test_result: &TestResult| {
test_result.report(style);
};
let mut flags = InstanceFlags::empty();
if matches.is_present("dx12") {
flags |= InstanceFlags::DX12;
}
let mut runner = Runner::new(flags);
if style == ReportStyle::Verbose {
// TODO: get adapter name in here too
println!("Backend: {:?}", runner.backend_type());
}
report(&clear::run_clear_test(&mut runner, &config));
if config.groups.matches("prefix") {
report(&prefix::run_prefix_test(
&mut runner,
&config,
prefix::Variant::Compatibility,
));
report(&prefix::run_prefix_test(
&mut runner,
&config,
prefix::Variant::Atomic,
));
if runner.session.gpu_info().has_memory_model {
report(&prefix::run_prefix_test(
&mut runner,
&config,
prefix::Variant::Vkmm,
));
}
report(&prefix_tree::run_prefix_test(&mut runner, &config));
}
if config.groups.matches("atomic") {
report(&message_passing::run_message_passing_test(
&mut runner,
&config,
message_passing::Variant::Atomic,
));
if runner.session.gpu_info().has_memory_model {
report(&message_passing::run_message_passing_test(
&mut runner,
&config,
message_passing::Variant::Vkmm,
));
}
report(&linkedlist::run_linkedlist_test(&mut runner, &config));
}
if config.groups.matches("stack") {
report(&stack::run_stack_test(&mut runner, &config));
report(&bbox_union::run_union_test(&mut runner, &config));
report(&bbox_intersection::run_intersection_test(&mut runner, &config));
}
#[cfg(feature = "piet-gpu")]
if config.groups.matches("piet") {
report(&transform::transform_test(&mut runner, &config));
report(&path::path_test(&mut runner, &config));
report(&draw::draw_test(&mut runner, &config));
report(&clip::clip_test(&mut runner, &config));
}
}
}