use concinnity_core::render::backend::{GpuProfile, RenderBackend};
use concinnity_core::render::backend_init::BackendInit;
use concinnity_core::render::error::RenderResult;
pub const AVAILABLE: bool = cfg!(any(backend_metal, backend_dx, backend_vk));
pub(crate) fn probe_gpu_profile() -> Option<GpuProfile> {
static PROBED: std::sync::OnceLock<Option<GpuProfile>> = std::sync::OnceLock::new();
*PROBED.get_or_init(|| {
#[cfg(any(backend_metal, backend_dx, backend_vk))]
{
concinnity_device::probe_gpu_profile()
}
#[cfg(not(any(backend_metal, backend_dx, backend_vk)))]
{
None
}
})
}
pub(crate) fn init_backend(init: BackendInit<'_>) -> RenderResult<Box<dyn RenderBackend>> {
#[cfg(any(backend_metal, backend_dx, backend_vk))]
{
concinnity_device::init_backend(init)
}
#[cfg(not(any(backend_metal, backend_dx, backend_vk)))]
{
let _ = init;
Err(concinnity_core::render::error::RenderError::Unsupported { op: "init_backend" })
}
}
#[cfg(all(test, not(any(backend_metal, backend_dx, backend_vk))))]
mod tests {
use super::*;
use concinnity_core::components::Window;
use concinnity_core::render::error::RenderError;
#[test]
fn a_build_with_no_backend_reports_unsupported() {
let window = Window::default();
let init = BackendInit::minimal(&window, Vec::new());
assert_eq!(
init_backend(init).err(),
Some(RenderError::Unsupported { op: "init_backend" })
);
}
}