[package]
name = "scry-gpu"
version = "0.1.0"
edition.workspace = true
rust-version.workspace = true
authors.workspace = true
description = "Lightweight GPU compute — dispatch shaders without the graphics baggage"
license.workspace = true
repository = "https://github.com/Slush97/esolearn/tree/main/crates/scry-gpu"
documentation = "https://docs.rs/scry-gpu"
keywords = ["gpu", "compute", "vulkan", "gpgpu"]
categories = ["graphics", "science", "concurrency"]
readme = "README.md"

[features]
default = ["vulkan"]
vulkan = ["dep:ash", "dep:gpu-allocator"]
cuda = ["dep:cudarc"]
bench-wgpu = ["dep:wgpu"]
# metal = []  # future

[dependencies]
# Vulkan backend
ash = { version = "0.38", optional = true, default-features = false, features = ["linked", "debug"] }
gpu-allocator = { version = "0.27", optional = true, default-features = false, features = ["vulkan"] }

# CUDA backend
cudarc = { version = "0.19", optional = true, features = ["cublas", "nvrtc", "cuda-version-from-build-system"] }

# Shader compilation (WGSL → SPIR-V)
naga = { version = "24", features = ["wgsl-in", "spv-out"] }

# Safe reinterpret casts for buffer upload/download
bytemuck = { version = "1", features = ["derive"] }

# Error handling
thiserror = "2"

# Optional: wgpu for backend comparison benchmarks
wgpu = { version = "24", optional = true }

[dev-dependencies]
pollster = "0.4"

[[example]]
name = "bench_wgpu_compare"
required-features = ["bench-wgpu"]

[[example]]
name = "bench_cuda_compare"
required-features = ["cuda", "vulkan"]

[lints.rust]
missing_docs = "warn"
unreachable_pub = "allow"

[lints.clippy]
all = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
module_name_repetitions = "allow"
must_use_candidate = "allow"
return_self_not_must_use = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
cast_possible_truncation = "allow"
cast_precision_loss = "allow"
cast_sign_loss = "allow"
cast_lossless = "allow"
redundant_pub_crate = "allow"
