#![deny(missing_docs)]
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub enum GpuError {
CudaUnavailable,
KernelFailed(i32),
InvalidInput(&'static str),
}
#[cfg(feature = "cuda")]
mod ffi;
#[cfg(feature = "cuda")]
mod dispatch;
#[cfg(feature = "cuda")]
mod pinned;
#[cfg(feature = "cuda")]
mod workspace;
#[cfg(feature = "cuda")]
pub use dispatch::{
build_gpu, build_gpu_batched_throughput, build_gpu_batched_throughput_device_digests,
build_gpu_fused_throughput_digests_on_workspace, build_gpu_layer_a_batched,
build_gpu_layer_a_on_workspace, build_gpu_on_workspace,
build_gpu_throughput_device_digests_on_workspace, build_gpu_throughput_graph_or_demote,
build_gpu_throughput_on_workspace, build_gpu_throughput_pinned_async_on_workspace,
build_gpu_throughput_pinned_async_on_workspace_d128_tree_compact,
build_gpu_throughput_pinned_async_on_workspace_d205_tree_compact,
build_gpu_throughput_pinned_async_on_workspace_d64_compact_densor_compact_timed,
build_gpu_throughput_pinned_async_on_workspace_d64_tree_compact,
build_gpu_throughput_pinned_async_on_workspace_d64_tree_compact_timed,
build_gpu_throughput_pinned_async_on_workspace_timed,
build_gpu_throughput_pinned_async_on_workspace_tree,
build_gpu_throughput_pinned_async_on_workspace_tree_compact, build_gpu_timed,
build_gpu_timed_on_workspace, compact_densor_root_path1a_sweep_time,
compact_densor_root_streaming_sweep_time, evaluate_detector_wide_d64_on_workspace,
sha256_device, sha256_device_streaming, D64ThroughputHostStageTimings,
D64ThroughputStageTimings, PipelineTimings, R8HostStageTimings, R8StageTimings,
};
#[cfg(feature = "cuda")]
pub use pinned::PinnedHostBuf;
#[cfg(feature = "cuda")]
pub use workspace::{BatchedGpuWorkspace, GpuWorkspace, GraphCaptureStatus};
#[cfg(not(feature = "cuda"))]
mod stubs {
use super::GpuError;
use dsfb_gpu_debug_core::casefile::CaseFile;
use dsfb_gpu_debug_core::contract::Contract;
use dsfb_gpu_debug_core::event::TraceEvent;
pub fn build_gpu(_events: &[TraceEvent], _contract: &Contract) -> Result<CaseFile, GpuError> {
Err(GpuError::CudaUnavailable)
}
}
#[cfg(not(feature = "cuda"))]
pub use stubs::build_gpu;
pub fn pipeline_available() -> Result<(), GpuError> {
if cfg!(feature = "cuda") {
Ok(())
} else {
Err(GpuError::CudaUnavailable)
}
}