fn main() {
let instance = wgpu::Instance::default();
let adapter = pollster::block_on(instance.request_adapter(&wgpu::RequestAdapterOptions {
power_preference: wgpu::PowerPreference::HighPerformance,
force_fallback_adapter: false,
compatible_surface: None,
}))
.unwrap();
let info = adapter.get_info();
println!("backend: {:?}", info.backend);
println!("name: {}", info.name);
println!("device_type: {:?}", info.device_type);
println!("vendor: 0x{:x}", info.vendor);
println!("driver: {}", info.driver);
println!("driver_info: {}", info.driver_info);
let feats = adapter.features();
let limits = adapter.limits();
println!("\nFeature support:");
for (name, bit) in &[
("SUBGROUP", wgpu::Features::SUBGROUP),
("SUBGROUP_BARRIER", wgpu::Features::SUBGROUP_BARRIER),
("SUBGROUP_VERTEX", wgpu::Features::SUBGROUP_VERTEX),
("SHADER_F16", wgpu::Features::SHADER_F16),
("TIMESTAMP_QUERY", wgpu::Features::TIMESTAMP_QUERY),
(
"TIMESTAMP_QUERY_INSIDE_PASSES",
wgpu::Features::TIMESTAMP_QUERY_INSIDE_PASSES,
),
(
"PIPELINE_STATISTICS_QUERY",
wgpu::Features::PIPELINE_STATISTICS_QUERY,
),
] {
println!(" {:32} = {}", name, feats.contains(*bit));
}
println!("\nKey limits:");
println!(
" max_compute_workgroup_storage_size = {}",
limits.max_compute_workgroup_storage_size
);
println!(
" max_compute_invocations_per_workgroup = {}",
limits.max_compute_invocations_per_workgroup
);
println!(
" max_compute_workgroup_size_x = {}",
limits.max_compute_workgroup_size_x
);
println!(
" max_storage_buffer_binding_size = {}",
limits.max_storage_buffer_binding_size
);
println!(
" max_buffer_size = {}",
limits.max_buffer_size
);
println!("\nSubgroup adapter info:");
println!(
" subgroup_min_size = {}",
info.subgroup_min_size
);
println!(
" subgroup_max_size = {}",
info.subgroup_max_size
);
}