2021-11-06 10:52:07 +11:00
|
|
|
// 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.
|
|
|
|
|
2021-11-11 09:56:00 +11:00
|
|
|
mod clear;
|
2021-11-10 09:04:58 +11:00
|
|
|
mod config;
|
2021-12-03 03:41:41 +11:00
|
|
|
mod draw;
|
2021-11-07 15:03:20 +11:00
|
|
|
mod linkedlist;
|
2021-11-12 11:17:04 +11:00
|
|
|
mod message_passing;
|
2021-11-06 10:52:07 +11:00
|
|
|
mod prefix;
|
2021-11-07 10:08:43 +11:00
|
|
|
mod prefix_tree;
|
2021-11-06 10:52:07 +11:00
|
|
|
mod runner;
|
2021-11-10 09:04:58 +11:00
|
|
|
mod test_result;
|
2021-11-06 10:52:07 +11:00
|
|
|
|
2021-11-25 11:26:45 +11:00
|
|
|
#[cfg(feature = "piet-gpu")]
|
|
|
|
mod path;
|
2021-11-24 02:28:50 +11:00
|
|
|
#[cfg(feature = "piet-gpu")]
|
|
|
|
mod transform;
|
|
|
|
|
2021-11-10 09:04:58 +11:00
|
|
|
use clap::{App, Arg};
|
2021-11-10 15:28:06 +11:00
|
|
|
use piet_gpu_hal::InstanceFlags;
|
2021-11-10 09:04:58 +11:00
|
|
|
|
|
|
|
use crate::config::Config;
|
2021-11-07 15:03:20 +11:00
|
|
|
pub use crate::runner::Runner;
|
|
|
|
use crate::test_result::ReportStyle;
|
|
|
|
pub use crate::test_result::TestResult;
|
2021-11-06 10:52:07 +11:00
|
|
|
|
|
|
|
fn main() {
|
2021-11-10 09:04:58 +11:00
|
|
|
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")
|
2021-11-10 15:28:06 +11:00
|
|
|
.takes_value(true),
|
2021-11-10 09:04:58 +11:00
|
|
|
)
|
|
|
|
.arg(
|
|
|
|
Arg::with_name("size")
|
|
|
|
.short("s")
|
|
|
|
.long("size")
|
|
|
|
.help("Size of tests")
|
2021-11-10 15:28:06 +11:00
|
|
|
.takes_value(true),
|
2021-11-10 09:04:58 +11:00
|
|
|
)
|
|
|
|
.arg(
|
|
|
|
Arg::with_name("n_iter")
|
|
|
|
.short("n")
|
|
|
|
.long("n_iter")
|
|
|
|
.help("Number of iterations")
|
2021-11-10 15:28:06 +11:00
|
|
|
.takes_value(true),
|
|
|
|
)
|
2021-11-24 02:28:50 +11:00
|
|
|
.arg(
|
|
|
|
Arg::with_name("verify_all")
|
|
|
|
.long("verify_all")
|
|
|
|
.help("Verify all iterations"),
|
|
|
|
)
|
2021-11-10 15:28:06 +11:00
|
|
|
.arg(
|
|
|
|
Arg::with_name("dx12")
|
|
|
|
.long("dx12")
|
|
|
|
.help("Prefer DX12 backend"),
|
2021-11-10 09:04:58 +11:00
|
|
|
)
|
|
|
|
.get_matches();
|
|
|
|
let style = if matches.is_present("verbose") {
|
|
|
|
ReportStyle::Verbose
|
|
|
|
} else {
|
|
|
|
ReportStyle::Short
|
|
|
|
};
|
|
|
|
let config = Config::from_matches(&matches);
|
2021-11-06 10:52:07 +11:00
|
|
|
unsafe {
|
2021-11-10 09:04:58 +11:00
|
|
|
let report = |test_result: &TestResult| {
|
|
|
|
test_result.report(style);
|
|
|
|
};
|
2021-11-10 15:28:06 +11:00
|
|
|
let mut flags = InstanceFlags::empty();
|
|
|
|
if matches.is_present("dx12") {
|
|
|
|
flags |= InstanceFlags::DX12;
|
|
|
|
}
|
|
|
|
let mut runner = Runner::new(flags);
|
2021-11-12 06:48:58 +11:00
|
|
|
if style == ReportStyle::Verbose {
|
|
|
|
// TODO: get adapter name in here too
|
|
|
|
println!("Backend: {:?}", runner.backend_type());
|
|
|
|
}
|
2021-11-11 09:56:00 +11:00
|
|
|
report(&clear::run_clear_test(&mut runner, &config));
|
2021-11-10 09:04:58 +11:00
|
|
|
if config.groups.matches("prefix") {
|
2021-11-12 06:47:46 +11:00
|
|
|
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,
|
|
|
|
));
|
|
|
|
}
|
2021-11-10 09:04:58 +11:00
|
|
|
report(&prefix_tree::run_prefix_test(&mut runner, &config));
|
|
|
|
}
|
2021-11-12 11:17:04 +11:00
|
|
|
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,
|
|
|
|
));
|
|
|
|
}
|
2021-11-07 15:03:20 +11:00
|
|
|
report(&linkedlist::run_linkedlist_test(&mut runner, &config));
|
2021-11-12 11:17:04 +11:00
|
|
|
}
|
2021-11-24 02:28:50 +11:00
|
|
|
#[cfg(feature = "piet-gpu")]
|
|
|
|
if config.groups.matches("piet") {
|
|
|
|
report(&transform::transform_test(&mut runner, &config));
|
2021-11-25 11:26:45 +11:00
|
|
|
report(&path::path_test(&mut runner, &config));
|
2021-12-03 03:41:41 +11:00
|
|
|
report(&draw::draw_test(&mut runner, &config));
|
2021-11-24 02:28:50 +11:00
|
|
|
}
|
2021-11-06 10:52:07 +11:00
|
|
|
}
|
|
|
|
}
|