use {
ash::vk,
clap::Parser,
std::sync::Arc,
vk_graph::{
Graph,
driver::{
DriverError,
device::{Device, DeviceInfo},
image::ImageInfo,
},
pool::{cache::Cache, hash::HashPool},
},
};
fn main() -> Result<(), DriverError> {
pretty_env_logger::init();
let args = Args::parse();
let device_info = DeviceInfo::builder().debug(args.debug);
let device = Device::create(device_info)?;
let mut cache = Cache::new(HashPool::new(&device));
let image_info = ImageInfo::image_2d(
128,
128,
vk::Format::R8G8B8A8_UNORM,
vk::ImageUsageFlags::TRANSFER_SRC | vk::ImageUsageFlags::TRANSFER_DST,
);
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
enum CacheTag {
Shadow,
Ui,
}
let image1 = cache.tag(CacheTag::Shadow).resource(image_info)?;
let image2 = cache.tag(CacheTag::Shadow).resource(image_info)?;
assert!(Arc::ptr_eq(&image1, &image2));
let mut graph = Graph::default();
let image1_node = graph.bind_resource(&image1);
let image2_node = graph.bind_resource(&image2);
assert_eq!(image1_node, image2_node);
assert_eq!(image2_node, graph.bind_resource(&image2));
if image2_node == Graph::default().bind_resource(&image2) {
log::debug!("Nodes are just numbers, man")
}
let image_info = ImageInfo::image_2d(
image_info.width,
image_info.height,
image_info.fmt,
vk::ImageUsageFlags::TRANSFER_DST,
);
let image3_node = graph.bind_resource(cache.tag(CacheTag::Shadow).resource(image_info)?);
assert_eq!(image1_node, image3_node);
let image4_node = graph.bind_resource(cache.tag(CacheTag::Ui).resource(image_info)?);
assert_ne!(image1_node, image4_node);
Ok(())
}
#[derive(Parser)]
struct Args {
#[arg(long)]
debug: bool,
}