feat(renderer): implement base Vulkan instance initialization
Added ash and thiserror dependencies to the renderer crate. Defined RendererError for typed Vulkan failure handling. Implemented the Renderer struct with basic Vulkan Entry and Instance creation.
This commit is contained in:
parent
1979308cbb
commit
d60ccd7918
15
Cargo.lock
generated
15
Cargo.lock
generated
|
|
@ -80,6 +80,15 @@ version = "1.0.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
|
||||
|
||||
[[package]]
|
||||
name = "ash"
|
||||
version = "0.38.0+1.3.281"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
|
||||
dependencies = [
|
||||
"libloading",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "atomic-waker"
|
||||
version = "1.1.2"
|
||||
|
|
@ -180,6 +189,8 @@ name = "client"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"raw-window-handle",
|
||||
"renderer",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
"winit",
|
||||
|
|
@ -963,6 +974,10 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "renderer"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"ash",
|
||||
"thiserror 2.0.18",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc_version"
|
||||
|
|
|
|||
|
|
@ -8,3 +8,5 @@ anyhow = "1.0.102"
|
|||
tracing = "0.1.44"
|
||||
tracing-subscriber = "0.3.23"
|
||||
winit = "0.30.13"
|
||||
renderer = { path = "../renderer" }
|
||||
raw-window-handle = "0.6.2"
|
||||
|
|
|
|||
|
|
@ -4,3 +4,5 @@ version = "0.1.0"
|
|||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
ash = "0.38.0"
|
||||
thiserror = "2.0.18"
|
||||
|
|
|
|||
9
crates/renderer/src/error.rs
Normal file
9
crates/renderer/src/error.rs
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
use thiserror::Error;
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum RendererError {
|
||||
#[error("Failed to load Vulkan library")]
|
||||
LoadFailed(#[from] ash::LoadingError),
|
||||
#[error("Failed to create Vulkan instance")]
|
||||
InstanceCreateFailed(#[from] ash::vk::Result)
|
||||
}
|
||||
|
|
@ -1,14 +1,33 @@
|
|||
pub fn add(left: u64, right: u64) -> u64 {
|
||||
left + right
|
||||
pub mod error;
|
||||
|
||||
use std::ffi::c_char;
|
||||
use ash::{Entry, Instance, vk};
|
||||
|
||||
pub use error::RendererError;
|
||||
|
||||
pub struct Renderer {
|
||||
_entry: Entry,
|
||||
instance: Instance,
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
impl Renderer {
|
||||
/// Initializes the Vulkan renderer.
|
||||
/// `required_extensions` are raw C-strings (pointers) provided by the windowing system.
|
||||
pub fn new(required_extensions: &[*const c_char]) -> Result<Self, RendererError> {
|
||||
let entry = unsafe { Entry::load() }?;
|
||||
|
||||
#[test]
|
||||
fn it_works() {
|
||||
let result = add(2, 2);
|
||||
assert_eq!(result, 4);
|
||||
let app_info = vk::ApplicationInfo::default()
|
||||
.api_version(vk::API_VERSION_1_3);
|
||||
|
||||
let create_info = vk::InstanceCreateInfo::default()
|
||||
.application_info(&app_info)
|
||||
.enabled_extension_names(required_extensions);
|
||||
|
||||
let instance = unsafe { entry.create_instance(&create_info, None)? };
|
||||
|
||||
Ok(Self {
|
||||
_entry: entry,
|
||||
instance,
|
||||
})
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue