use thiserror::Error;
#[derive(Error, Debug)]
pub enum RuntimeError {
#[error("Instance creation failed: {0}")]
InstanceCreationFailed(#[from] crate::core::InstanceError),
#[error("Device creation failed: {0}")]
DeviceCreationFailed(#[from] crate::core::DeviceError),
#[error("No graphics queue family found on selected device")]
NoGraphicsQueue,
#[error("No suitable physical device found (total devices: {0})")]
NoSuitableDevice(usize),
#[error("Fence synchronization failed: {0}")]
FenceSyncFailed(#[from] crate::core::FenceError),
#[error("Semaphore creation failed: {0}")]
SemaphoreCreationFailed(#[from] crate::core::SemaphoreError),
#[error("Command pool creation failed: {0}")]
CommandPoolCreationFailed(#[from] crate::core::CommandPoolError),
#[error("Command buffer operation failed: {0}")]
CommandBufferError(#[from] crate::core::CommandBufferError),
#[error("Queue operation failed: {0}")]
QueueError(#[from] crate::core::QueueError),
#[error("{0}")]
Other(String),
}
#[derive(Error, Debug)]
pub enum ShaderManagerError {
#[error("Shader compilation failed: {0}")]
ShaderCompilationFailed(#[from] crate::core::ShaderError),
#[error("Pipeline creation failed: {0}")]
PipelineCreationFailed(#[from] crate::core::PipelineError),
#[error("Pipeline builder error: {0}")]
PipelineBuilderError(#[from] PipelineError),
#[error("Invalid shader ID: {0:?}")]
InvalidShaderId(ShaderId),
#[error("Invalid pipeline ID: {0:?}")]
InvalidPipelineId(PipelineId),
#[error("Descriptor pool creation failed: {0}")]
DescriptorPoolCreationFailed(#[from] crate::core::DescriptorPoolError),
#[error("Descriptor operation failed: {0}")]
DescriptorError(#[from] crate::core::DescriptorError),
}
#[derive(Error, Debug)]
pub enum PipelineError {
#[error("No vertex shader provided - vertex shader is required for graphics pipelines")]
NoVertexShader,
#[error("No fragment shader provided - fragment shader is required for graphics pipelines")]
NoFragmentShader,
#[error("No compute shader provided - compute shader is required for compute pipelines")]
NoComputeShader,
#[error("Pipeline creation failed: {0}")]
CreationFailed(#[from] crate::core::PipelineError),
#[error("Invalid descriptor set layout configuration")]
InvalidDescriptorLayout,
#[error("No color attachment formats specified - at least one format is required")]
NoColorAttachmentFormats,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ShaderId(pub(crate) usize);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct PipelineId(pub(crate) usize);