Compare commits
5 commits
2d0dd5909d
...
e3e2fa63e0
Author | SHA1 | Date | |
---|---|---|---|
Alex Janka | e3e2fa63e0 | ||
Alex Janka | cdf98df0e3 | ||
Alex Janka | c5aac6615a | ||
9f6e5aaac2 | |||
Alex Janka | dcc8a3b758 |
|
@ -12,7 +12,7 @@ description = "RetroArch shaders for all."
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde = { version = "1.0" }
|
serde = { version = "1.0" }
|
||||||
librashader-reflect = { path = "../librashader-reflect", version = "0.1.4", features = ["serialize", "dxil"] }
|
librashader-reflect = { path = "../librashader-reflect", version = "0.1.4", features = ["serialize"] }
|
||||||
librashader-preprocess = { path = "../librashader-preprocess", version = "0.1.4" }
|
librashader-preprocess = { path = "../librashader-preprocess", version = "0.1.4" }
|
||||||
platform-dirs = "0.3.0"
|
platform-dirs = "0.3.0"
|
||||||
blake3 = { version = "1.3.3" }
|
blake3 = { version = "1.3.3" }
|
||||||
|
@ -32,7 +32,7 @@ features = [
|
||||||
optional = true
|
optional = true
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
d3d = ["windows"]
|
d3d = ["windows", "librashader-reflect/dxil"]
|
||||||
|
|
||||||
# hack to get building on docsrs
|
# hack to get building on docsrs
|
||||||
docsrs = ["blake3/pure", "rusqlite/in_gecko"]
|
docsrs = ["blake3/pure", "rusqlite/in_gecko"]
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
//! Cache helpers for `ShaderCompilation` objects to cache compiled SPIRV.
|
//! Cache helpers for `ShaderCompilation` objects to cache compiled SPIRV.
|
||||||
use librashader_preprocess::ShaderSource;
|
use librashader_preprocess::ShaderSource;
|
||||||
use librashader_reflect::back::targets::{DXIL, GLSL, HLSL, SPIRV};
|
#[cfg(feature = "windows")]
|
||||||
|
use librashader_reflect::back::targets::DXIL;
|
||||||
|
use librashader_reflect::back::targets::{GLSL, HLSL, SPIRV};
|
||||||
use librashader_reflect::back::{CompilerBackend, FromCompilation};
|
use librashader_reflect::back::{CompilerBackend, FromCompilation};
|
||||||
use librashader_reflect::error::{ShaderCompileError, ShaderReflectError};
|
use librashader_reflect::error::{ShaderCompileError, ShaderReflectError};
|
||||||
use librashader_reflect::front::{GlslangCompilation, ShaderCompilation};
|
use librashader_reflect::front::{GlslangCompilation, ShaderCompilation};
|
||||||
|
@ -56,6 +58,7 @@ impl<T: ShaderCompilation + for<'de> serde::Deserialize<'de> + serde::Serialize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "windows")]
|
||||||
impl FromCompilation<CachedCompilation<GlslangCompilation>> for DXIL {
|
impl FromCompilation<CachedCompilation<GlslangCompilation>> for DXIL {
|
||||||
type Target = <DXIL as FromCompilation<GlslangCompilation>>::Target;
|
type Target = <DXIL as FromCompilation<GlslangCompilation>>::Target;
|
||||||
type Options = <DXIL as FromCompilation<GlslangCompilation>>::Options;
|
type Options = <DXIL as FromCompilation<GlslangCompilation>>::Options;
|
||||||
|
|
|
@ -12,23 +12,38 @@ keywords = ["shader", "retroarch", "SPIR-V"]
|
||||||
description = "RetroArch shaders for all."
|
description = "RetroArch shaders for all."
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
crate-type = [ "cdylib", "staticlib" ]
|
crate-type = ["cdylib", "staticlib"]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["runtime-all" ]
|
default = ["runtime-all"]
|
||||||
runtime-all = ["runtime-opengl", "runtime-d3d11", "runtime-d3d12", "runtime-vulkan"]
|
runtime-all = [
|
||||||
|
"runtime-opengl",
|
||||||
|
"runtime-d3d11",
|
||||||
|
"runtime-d3d12",
|
||||||
|
"runtime-vulkan",
|
||||||
|
]
|
||||||
runtime-opengl = ["gl", "librashader/runtime-gl"]
|
runtime-opengl = ["gl", "librashader/runtime-gl"]
|
||||||
runtime-d3d11 = ["windows", "librashader/runtime-d3d11", "windows/Win32_Graphics_Direct3D11"]
|
runtime-d3d11 = [
|
||||||
runtime-d3d12 = ["windows", "librashader/runtime-d3d12", "windows/Win32_Graphics_Direct3D12"]
|
"windows",
|
||||||
|
"librashader/runtime-d3d11",
|
||||||
|
"windows/Win32_Graphics_Direct3D11",
|
||||||
|
]
|
||||||
|
runtime-d3d12 = [
|
||||||
|
"windows",
|
||||||
|
"librashader/runtime-d3d12",
|
||||||
|
"windows/Win32_Graphics_Direct3D12",
|
||||||
|
]
|
||||||
runtime-vulkan = ["ash", "librashader/runtime-vk"]
|
runtime-vulkan = ["ash", "librashader/runtime-vk"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
librashader = { path = "../librashader", version = "0.1.4", features = ["internal"] }
|
librashader = { path = "../librashader", version = "0.1.4", features = [
|
||||||
|
"internal",
|
||||||
|
] }
|
||||||
thiserror = "1.0.37"
|
thiserror = "1.0.37"
|
||||||
paste = "1.0.9"
|
paste = "1.0.9"
|
||||||
gl = { version = "0.14.0", optional = true }
|
gl = { version = "0.14.0", optional = true }
|
||||||
rustc-hash = "1.1.0"
|
rustc-hash = "1.1.0"
|
||||||
ash = { version = "0.37.2+1.3.238", optional = true }
|
ash = { version = "0.37", optional = true }
|
||||||
spirv_cross = { package = "librashader-spirv-cross", version = "0.23" }
|
spirv_cross = { package = "librashader-spirv-cross", version = "0.23" }
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies.windows]
|
[target.'cfg(windows)'.dependencies.windows]
|
||||||
|
|
|
@ -21,7 +21,7 @@ vulkan = ["ash"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
gl = { version = "0.14.0", optional = true }
|
gl = { version = "0.14.0", optional = true }
|
||||||
ash = { version = "0.37.1+1.3.235", optional = true }
|
ash = { version = "0.37", optional = true }
|
||||||
|
|
||||||
num-traits = "0.2.15"
|
num-traits = "0.2.15"
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,12 @@ use num_traits::AsPrimitive;
|
||||||
use std::convert::Infallible;
|
use std::convert::Infallible;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub enum ShaderStorage {
|
||||||
|
Path(std::path::PathBuf),
|
||||||
|
String(String),
|
||||||
|
}
|
||||||
|
|
||||||
#[repr(u32)]
|
#[repr(u32)]
|
||||||
#[derive(Default, Copy, Clone, Debug, Eq, PartialEq, Hash)]
|
#[derive(Default, Copy, Clone, Debug, Eq, PartialEq, Hash)]
|
||||||
/// Supported image formats for textures.
|
/// Supported image formats for textures.
|
||||||
|
|
|
@ -17,7 +17,6 @@ use crate::include::read_source;
|
||||||
pub use error::*;
|
pub use error::*;
|
||||||
use librashader_common::ImageFormat;
|
use librashader_common::ImageFormat;
|
||||||
use rustc_hash::FxHashMap;
|
use rustc_hash::FxHashMap;
|
||||||
use std::path::Path;
|
|
||||||
|
|
||||||
/// The source file for a single shader pass.
|
/// The source file for a single shader pass.
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
|
@ -58,8 +57,8 @@ pub struct ShaderParameter {
|
||||||
impl ShaderSource {
|
impl ShaderSource {
|
||||||
/// Load the source file at the given path, resolving includes relative to the location of the
|
/// Load the source file at the given path, resolving includes relative to the location of the
|
||||||
/// source file.
|
/// source file.
|
||||||
pub fn load(path: impl AsRef<Path>) -> Result<ShaderSource, PreprocessError> {
|
pub fn load(file: &librashader_common::ShaderStorage) -> Result<ShaderSource, PreprocessError> {
|
||||||
load_shader_source(path)
|
load_shader_source(file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,8 +77,14 @@ impl SourceOutput for String {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn load_shader_source(path: impl AsRef<Path>) -> Result<ShaderSource, PreprocessError> {
|
pub(crate) fn load_shader_source(
|
||||||
let source = read_source(path)?;
|
file: &librashader_common::ShaderStorage,
|
||||||
|
) -> Result<ShaderSource, PreprocessError> {
|
||||||
|
let source = match file {
|
||||||
|
librashader_common::ShaderStorage::Path(path) => read_source(path)?,
|
||||||
|
librashader_common::ShaderStorage::String(s) => s.to_string(),
|
||||||
|
};
|
||||||
|
|
||||||
let meta = pragma::parse_pragma_meta(&source)?;
|
let meta = pragma::parse_pragma_meta(&source)?;
|
||||||
let text = stage::process_stages(&source)?;
|
let text = stage::process_stages(&source)?;
|
||||||
let parameters = FxHashMap::from_iter(meta.parameters.into_iter().map(|p| (p.id.clone(), p)));
|
let parameters = FxHashMap::from_iter(meta.parameters.into_iter().map(|p| (p.id.clone(), p)));
|
||||||
|
|
|
@ -114,7 +114,7 @@ pub fn resolve_values(mut values: Vec<Value>) -> ShaderPreset {
|
||||||
|
|
||||||
let shader = ShaderPassConfig {
|
let shader = ShaderPassConfig {
|
||||||
id,
|
id,
|
||||||
name,
|
name: librashader_common::ShaderStorage::Path(name),
|
||||||
alias: shader_values.iter().find_map(|f| match f {
|
alias: shader_values.iter().find_map(|f| match f {
|
||||||
Value::Alias(_, value) => Some(value.to_string()),
|
Value::Alias(_, value) => Some(value.to_string()),
|
||||||
_ => None,
|
_ => None,
|
||||||
|
|
|
@ -10,7 +10,7 @@ pub struct ShaderPassConfig {
|
||||||
/// The index of the shader pass relative to its parent preset.
|
/// The index of the shader pass relative to its parent preset.
|
||||||
pub id: i32,
|
pub id: i32,
|
||||||
/// The fully qualified path to the shader pass source file.
|
/// The fully qualified path to the shader pass source file.
|
||||||
pub name: PathBuf,
|
pub name: librashader_common::ShaderStorage,
|
||||||
/// The alias of the shader pass if available.
|
/// The alias of the shader pass if available.
|
||||||
pub alias: Option<String>,
|
pub alias: Option<String>,
|
||||||
/// The filtering mode that this shader pass should expect.
|
/// The filtering mode that this shader pass should expect.
|
||||||
|
|
|
@ -14,19 +14,24 @@ description = "RetroArch shaders for all."
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
librashader-common = { path = "../librashader-common", features = ["vulkan"], version = "0.1.4" }
|
librashader-common = { path = "../librashader-common", features = [
|
||||||
|
"vulkan",
|
||||||
|
], version = "0.1.4" }
|
||||||
librashader-presets = { path = "../librashader-presets", version = "0.1.4" }
|
librashader-presets = { path = "../librashader-presets", version = "0.1.4" }
|
||||||
librashader-preprocess = { path = "../librashader-preprocess", version = "0.1.4" }
|
librashader-preprocess = { path = "../librashader-preprocess", version = "0.1.4" }
|
||||||
librashader-reflect = { path = "../librashader-reflect", version = "0.1.4", features = [] }
|
librashader-reflect = { path = "../librashader-reflect", version = "0.1.4", features = [
|
||||||
librashader-runtime = { path = "../librashader-runtime" , version = "0.1.4" }
|
] }
|
||||||
|
librashader-runtime = { path = "../librashader-runtime", version = "0.1.4" }
|
||||||
librashader-cache = { path = "../librashader-cache", version = "0.1.4" }
|
librashader-cache = { path = "../librashader-cache", version = "0.1.4" }
|
||||||
|
|
||||||
spirv_cross = { package = "librashader-spirv-cross", version = "0.23" }
|
spirv_cross = { package = "librashader-spirv-cross", version = "0.23" }
|
||||||
rustc-hash = "1.1.0"
|
rustc-hash = "1.1.0"
|
||||||
bytemuck = "1.12.3"
|
bytemuck = "1.12.3"
|
||||||
thiserror = "1.0.37"
|
thiserror = "1.0.37"
|
||||||
ash = { version = "0.37.1+1.3.235", features = ["linked", "debug"] }
|
ash = { version = "0.37", features = ["linked", "debug"] }
|
||||||
gpu-allocator = { version = "0.22.0", default-features = false, features = ["vulkan"] }
|
gpu-allocator = { version = "0.22.0", default-features = false, features = [
|
||||||
|
"vulkan",
|
||||||
|
] }
|
||||||
parking_lot = "0.12.1"
|
parking_lot = "0.12.1"
|
||||||
rayon = "1.6.1"
|
rayon = "1.6.1"
|
||||||
|
|
||||||
|
|
|
@ -186,9 +186,6 @@ impl Drop for RawVulkanBuffer {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
unsafe {
|
unsafe {
|
||||||
ManuallyDrop::drop(&mut self.buffer);
|
ManuallyDrop::drop(&mut self.buffer);
|
||||||
if self.buffer.handle != vk::Buffer::null() {
|
|
||||||
self.buffer.device.destroy_buffer(self.buffer.handle, None);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,16 +16,18 @@ description = "RetroArch shaders for all."
|
||||||
librashader-common = { path = "../librashader-common", version = "0.1.4" }
|
librashader-common = { path = "../librashader-common", version = "0.1.4" }
|
||||||
librashader-presets = { path = "../librashader-presets", version = "0.1.4" }
|
librashader-presets = { path = "../librashader-presets", version = "0.1.4" }
|
||||||
librashader-preprocess = { path = "../librashader-preprocess", version = "0.1.4" }
|
librashader-preprocess = { path = "../librashader-preprocess", version = "0.1.4" }
|
||||||
librashader-reflect = { path = "../librashader-reflect", version = "0.1.4", features = ["standalone"] }
|
librashader-reflect = { path = "../librashader-reflect", version = "0.1.4", features = [
|
||||||
librashader-runtime = { path = "../librashader-runtime", version = "0.1.4" }
|
"standalone",
|
||||||
librashader-runtime-d3d11 = { path = "../librashader-runtime-d3d11", version = "0.1.4", optional = true }
|
] }
|
||||||
librashader-runtime-d3d12 = { path = "../librashader-runtime-d3d12", version = "0.1.4", optional = true }
|
librashader-runtime = { path = "../librashader-runtime", version = "0.1.4" }
|
||||||
|
librashader-runtime-d3d11 = { path = "../librashader-runtime-d3d11", version = "0.1.4", optional = true }
|
||||||
|
librashader-runtime-d3d12 = { path = "../librashader-runtime-d3d12", version = "0.1.4", optional = true }
|
||||||
librashader-runtime-gl = { path = "../librashader-runtime-gl", version = "0.1.4", optional = true }
|
librashader-runtime-gl = { path = "../librashader-runtime-gl", version = "0.1.4", optional = true }
|
||||||
librashader-runtime-vk = { path = "../librashader-runtime-vk", version = "0.1.4", optional = true }
|
librashader-runtime-vk = { path = "../librashader-runtime-vk", version = "0.1.4", optional = true }
|
||||||
|
|
||||||
librashader-cache = { path = "../librashader-cache", version = "0.1.4" }
|
librashader-cache = { path = "../librashader-cache", version = "0.1.4" }
|
||||||
|
|
||||||
ash = { version = "0.37.1+1.3.235", optional = true }
|
ash = { version = "0.37", optional = true }
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies.windows]
|
[target.'cfg(windows)'.dependencies.windows]
|
||||||
version = "0.48.0"
|
version = "0.48.0"
|
||||||
|
@ -39,10 +41,34 @@ preprocess = []
|
||||||
presets = []
|
presets = []
|
||||||
|
|
||||||
# runtimes
|
# runtimes
|
||||||
runtime-gl = [ "runtime", "reflect-cross", "librashader-common/opengl", "librashader-runtime-gl" ]
|
runtime-gl = [
|
||||||
runtime-d3d11 = [ "runtime", "reflect-cross","librashader-common/d3d11", "librashader-runtime-d3d11", "windows/Win32_Graphics_Direct3D11" ]
|
"runtime",
|
||||||
runtime-d3d12 = [ "runtime", "reflect-cross", "reflect-dxil", "librashader-common/d3d12", "librashader-runtime-d3d12", "windows/Win32_Graphics_Direct3D12" ]
|
"reflect-cross",
|
||||||
runtime-vk = ["runtime", "reflect-cross", "librashader-common/vulkan", "librashader-runtime-vk", "ash" ]
|
"librashader-common/opengl",
|
||||||
|
"librashader-runtime-gl",
|
||||||
|
]
|
||||||
|
runtime-d3d11 = [
|
||||||
|
"runtime",
|
||||||
|
"reflect-cross",
|
||||||
|
"librashader-common/d3d11",
|
||||||
|
"librashader-runtime-d3d11",
|
||||||
|
"windows/Win32_Graphics_Direct3D11",
|
||||||
|
]
|
||||||
|
runtime-d3d12 = [
|
||||||
|
"runtime",
|
||||||
|
"reflect-cross",
|
||||||
|
"reflect-dxil",
|
||||||
|
"librashader-common/d3d12",
|
||||||
|
"librashader-runtime-d3d12",
|
||||||
|
"windows/Win32_Graphics_Direct3D12",
|
||||||
|
]
|
||||||
|
runtime-vk = [
|
||||||
|
"runtime",
|
||||||
|
"reflect-cross",
|
||||||
|
"librashader-common/vulkan",
|
||||||
|
"librashader-runtime-vk",
|
||||||
|
"ash",
|
||||||
|
]
|
||||||
|
|
||||||
# reflection
|
# reflection
|
||||||
reflect-cross = ["reflect", "librashader-reflect/cross"]
|
reflect-cross = ["reflect", "librashader-reflect/cross"]
|
||||||
|
@ -52,7 +78,7 @@ runtime-all = ["runtime-gl", "runtime-d3d11", "runtime-d3d12", "runtime-vk"]
|
||||||
reflect-all = ["reflect-cross", "reflect-dxil"]
|
reflect-all = ["reflect-cross", "reflect-dxil"]
|
||||||
|
|
||||||
# enable all features by default
|
# enable all features by default
|
||||||
default = [ "full" ]
|
default = ["full"]
|
||||||
internal = []
|
internal = []
|
||||||
|
|
||||||
full = ["runtime-all", "reflect-all", "preprocess", "presets"]
|
full = ["runtime-all", "reflect-all", "preprocess", "presets"]
|
||||||
|
@ -62,4 +88,4 @@ docsrs = ["librashader-cache/docsrs"]
|
||||||
|
|
||||||
[package.metadata.docs.rs]
|
[package.metadata.docs.rs]
|
||||||
targets = ["x86_64-pc-windows-msvc", "x86_64-unknown-linux-gnu"]
|
targets = ["x86_64-pc-windows-msvc", "x86_64-unknown-linux-gnu"]
|
||||||
features = [ "librashader-cache/docsrs" ]
|
features = ["librashader-cache/docsrs"]
|
||||||
|
|
Loading…
Reference in a new issue