runtime: move some runtime commonalities into runtime crate

This commit is contained in:
chyyran 2022-11-29 00:23:48 -05:00
parent 515fe12568
commit ae257d8574
21 changed files with 149 additions and 232 deletions

View file

@ -14,6 +14,7 @@
<sourceFolder url="file://$MODULE_DIR$/librashader-common/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/librashader-common/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/librashader-runtime-d3d11/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/librashader-runtime-d3d11/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/librashader-runtime-gl46/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/librashader-runtime-gl46/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/librashader-runtime/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" /> <excludeFolder url="file://$MODULE_DIR$/target" />
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />

15
Cargo.lock generated
View file

@ -456,7 +456,6 @@ name = "librashader-reflect"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"bytemuck",
"librashader-common", "librashader-common",
"librashader-preprocess", "librashader-preprocess",
"naga", "naga",
@ -468,6 +467,17 @@ dependencies = [
"thiserror", "thiserror",
] ]
[[package]]
name = "librashader-runtime"
version = "0.1.0"
dependencies = [
"bytemuck",
"librashader-preprocess",
"librashader-presets",
"librashader-reflect",
"rustc-hash",
]
[[package]] [[package]]
name = "librashader-runtime-d3d11" name = "librashader-runtime-d3d11"
version = "0.1.0" version = "0.1.0"
@ -478,6 +488,7 @@ dependencies = [
"librashader-preprocess", "librashader-preprocess",
"librashader-presets", "librashader-presets",
"librashader-reflect", "librashader-reflect",
"librashader-runtime",
"rustc-hash", "rustc-hash",
"windows", "windows",
] ]
@ -493,6 +504,7 @@ dependencies = [
"librashader-preprocess", "librashader-preprocess",
"librashader-presets", "librashader-presets",
"librashader-reflect", "librashader-reflect",
"librashader-runtime",
"rustc-hash", "rustc-hash",
"spirv_cross", "spirv_cross",
"thiserror", "thiserror",
@ -509,6 +521,7 @@ dependencies = [
"librashader-preprocess", "librashader-preprocess",
"librashader-presets", "librashader-presets",
"librashader-reflect", "librashader-reflect",
"librashader-runtime",
"rustc-hash", "rustc-hash",
"spirv_cross", "spirv_cross",
"thiserror", "thiserror",

View file

@ -5,6 +5,7 @@ members = [
"librashader-presets", "librashader-presets",
"librashader-preprocess", "librashader-preprocess",
"librashader-reflect", "librashader-reflect",
"librashader-runtime",
"librashader-runtime-d3d11", "librashader-runtime-d3d11",
"librashader-runtime-gl", "librashader-runtime-gl",
"librashader-runtime-gl46", "librashader-runtime-gl46",

View file

@ -21,9 +21,6 @@ naga = { version = "0.10.0", features = ["glsl-in", "spv-in", "spv-out", "glsl-o
rspirv = { version = "0.11.0+1.5.4", optional = true } rspirv = { version = "0.11.0+1.5.4", optional = true }
rspirv-reflect = { git = "https://github.com/Traverse-Research/rspirv-reflect", optional = true } rspirv-reflect = { git = "https://github.com/Traverse-Research/rspirv-reflect", optional = true }
bytemuck = "1.12.3"
[features] [features]
default = [] default = []
unstable-rust-pipeline = [ "naga", "rspirv", "rspirv-reflect" ] unstable-rust-pipeline = [ "naga", "rspirv", "rspirv-reflect" ]

View file

@ -13,7 +13,6 @@ pub mod semantics;
mod naga; mod naga;
#[cfg(feature = "unstable-rust-pipeline")] #[cfg(feature = "unstable-rust-pipeline")]
mod rspirv; mod rspirv;
pub mod uniforms;
pub trait ReflectShader { pub trait ReflectShader {
fn reflect( fn reflect(

View file

@ -6,10 +6,12 @@ edition = "2021"
# 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 = ["d3d11"] } librashader-common = { path = "../librashader-common", features = ["d3d11"] }
"librashader-presets" = { path = "../librashader-presets" } librashader-presets = { path = "../librashader-presets" }
"librashader-preprocess" = { path = "../librashader-preprocess" } librashader-preprocess = { path = "../librashader-preprocess" }
"librashader-reflect" = { path = "../librashader-reflect" } librashader-reflect = { path = "../librashader-reflect" }
librashader-runtime = { path = "../librashader-runtime" }
rustc-hash = "1.1.0" rustc-hash = "1.1.0"
gfx-maths = "0.2.8" gfx-maths = "0.2.8"
bytemuck = "1.12.3" bytemuck = "1.12.3"

View file

@ -53,55 +53,6 @@ pub struct FilterCommon {
} }
impl FilterChain { impl FilterChain {
fn load_pass_semantics(
uniform_semantics: &mut FxHashMap<String, UniformSemantic>,
texture_semantics: &mut FxHashMap<String, SemanticMap<TextureSemantics>>,
config: &ShaderPassConfig,
) {
let Some(alias) = &config.alias else {
return;
};
// Ignore empty aliases
if alias.trim().is_empty() {
return;
}
let index = config.id as usize;
// PassOutput
texture_semantics.insert(
alias.clone(),
SemanticMap {
semantics: TextureSemantics::PassOutput,
index,
},
);
uniform_semantics.insert(
format!("{alias}Size"),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::PassOutput,
index,
}),
);
// PassFeedback
texture_semantics.insert(
format!("{alias}Feedback"),
SemanticMap {
semantics: TextureSemantics::PassFeedback,
index,
},
);
uniform_semantics.insert(
format!("{alias}FeedbackSize"),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::PassFeedback,
index,
}),
);
}
fn create_constant_buffer(device: &ID3D11Device, size: u32) -> util::Result<ID3D11Buffer> { fn create_constant_buffer(device: &ID3D11Device, size: u32) -> util::Result<ID3D11Buffer> {
eprintln!("{size}"); eprintln!("{size}");
unsafe { unsafe {
@ -343,35 +294,19 @@ impl FilterChain {
.collect::<util::Result<Vec<(&ShaderPassConfig, ShaderSource, CompilerBackend<_>)>>>()?; .collect::<util::Result<Vec<(&ShaderPassConfig, ShaderSource, CompilerBackend<_>)>>>()?;
for details in &passes { for details in &passes {
FilterChain::load_pass_semantics( librashader_runtime::semantics::insert_pass_semantics(
&mut uniform_semantics, &mut uniform_semantics,
&mut texture_semantics, &mut texture_semantics,
details.0, details.0,
) )
} }
librashader_runtime::semantics::insert_lut_semantics(&preset.textures,
// add lut params &mut uniform_semantics,
for (index, texture) in preset.textures.iter().enumerate() { &mut texture_semantics);
texture_semantics.insert(
texture.name.clone(),
SemanticMap {
semantics: TextureSemantics::User,
index,
},
);
uniform_semantics.insert(
format!("{}Size", texture.name),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::User,
index,
}),
);
}
let semantics = ReflectSemantics { let semantics = ReflectSemantics {
uniform_semantics, uniform_semantics,
texture_semantics: texture_semantics, texture_semantics,
}; };
Ok((passes, semantics)) Ok((passes, semantics))

View file

@ -91,7 +91,7 @@ impl FilterPass {
&mut self, &mut self,
pass_index: usize, pass_index: usize,
parent: &FilterCommon, parent: &FilterCommon,
mvp: &[f32], mvp: &[f32; 16],
frame_count: u32, frame_count: u32,
frame_direction: i32, frame_direction: i32,
fb_size: Size<u32>, fb_size: Size<u32>,

View file

@ -3,7 +3,7 @@ use librashader_common::Size;
use crate::framebuffer::{OutputFramebuffer}; use crate::framebuffer::{OutputFramebuffer};
#[rustfmt::skip] #[rustfmt::skip]
static DEFAULT_MVP: &[f32] = &[ static DEFAULT_MVP: &[f32; 16] = &[
2f32, 0.0, 0.0, 0.0, 2f32, 0.0, 0.0, 0.0,
0.0, 2.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0,
0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 2.0, 0.0,
@ -12,12 +12,12 @@ static DEFAULT_MVP: &[f32] = &[
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct RenderTarget<'a> { pub struct RenderTarget<'a> {
pub mvp: &'a [f32], pub mvp: &'a [f32; 16],
pub output: OutputFramebuffer pub output: OutputFramebuffer
} }
impl<'a> RenderTarget<'a> { impl<'a> RenderTarget<'a> {
pub fn new(backbuffer: OutputFramebuffer, mvp: Option<&'a [f32]>) -> Self { pub fn new(backbuffer: OutputFramebuffer, mvp: Option<&'a [f32; 16]>) -> Self {
if let Some(mvp) = mvp { if let Some(mvp) = mvp {
RenderTarget { RenderTarget {
output: backbuffer, output: backbuffer,

View file

@ -10,6 +10,7 @@ librashader-common = { path = "../librashader-common", features = ["opengl"] }
librashader-presets = { path = "../librashader-presets" } librashader-presets = { path = "../librashader-presets" }
librashader-preprocess = { path = "../librashader-preprocess" } librashader-preprocess = { path = "../librashader-preprocess" }
librashader-reflect = { path = "../librashader-reflect" } librashader-reflect = { path = "../librashader-reflect" }
librashader-runtime = { path = "../librashader-runtime" }
spirv_cross = "0.23.1" spirv_cross = "0.23.1"
rustc-hash = "1.1.0" rustc-hash = "1.1.0"
gl = "0.14.0" gl = "0.14.0"

View file

@ -1,6 +1,6 @@
use gl::types::GLint; use gl::types::GLint;
use librashader_reflect::reflect::semantics::BindingStage; use librashader_reflect::reflect::semantics::BindingStage;
use librashader_reflect::reflect::uniforms::{BindUniform, UniformStorage, UniformScalar}; use librashader_runtime::uniforms::{BindUniform, UniformStorage, UniformScalar};
#[derive(Debug)] #[derive(Debug)]
pub enum VariableLocation { pub enum VariableLocation {

View file

@ -52,55 +52,6 @@ pub struct FilterMutable {
} }
impl FilterChain { impl FilterChain {
fn load_pass_semantics(
uniform_semantics: &mut FxHashMap<String, UniformSemantic>,
texture_semantics: &mut FxHashMap<String, SemanticMap<TextureSemantics>>,
config: &ShaderPassConfig,
) {
let Some(alias) = &config.alias else {
return;
};
// Ignore empty aliases
if alias.trim().is_empty() {
return;
}
let index = config.id as usize;
// PassOutput
texture_semantics.insert(
alias.clone(),
SemanticMap {
semantics: TextureSemantics::PassOutput,
index,
},
);
uniform_semantics.insert(
format!("{alias}Size"),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::PassOutput,
index,
}),
);
// PassFeedback
texture_semantics.insert(
format!("{alias}Feedback"),
SemanticMap {
semantics: TextureSemantics::PassFeedback,
index,
},
);
uniform_semantics.insert(
format!("{alias}FeedbackSize"),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::PassFeedback,
index,
}),
);
}
fn reflect_uniform_location(pipeline: GLuint, meta: &impl UniformMeta) -> VariableLocation { fn reflect_uniform_location(pipeline: GLuint, meta: &impl UniformMeta) -> VariableLocation {
// todo: support both ubo and pushco // todo: support both ubo and pushco
// todo: fix this. // todo: fix this.
@ -237,31 +188,16 @@ impl FilterChain {
.collect::<Result<Vec<(ShaderPassConfig, ShaderSource, CompilerBackend<_>)>>>()?; .collect::<Result<Vec<(ShaderPassConfig, ShaderSource, CompilerBackend<_>)>>>()?;
for details in &passes { for details in &passes {
FilterChain::load_pass_semantics( librashader_runtime::semantics::insert_pass_semantics(
&mut uniform_semantics, &mut uniform_semantics,
&mut texture_semantics, &mut texture_semantics,
&details.0, &details.0,
) )
} }
// add lut params librashader_runtime::semantics::insert_lut_semantics(textures,
for (index, texture) in textures.iter().enumerate() { &mut uniform_semantics,
texture_semantics.insert( &mut texture_semantics);
texture.name.clone(),
SemanticMap {
semantics: TextureSemantics::User,
index,
},
);
uniform_semantics.insert(
format!("{}Size", texture.name),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::User,
index,
}),
);
}
let semantics = ReflectSemantics { let semantics = ReflectSemantics {
uniform_semantics, uniform_semantics,

View file

@ -1,3 +1,4 @@
use std::marker::PhantomData;
use gl::types::{GLint, GLsizei, GLsizeiptr, GLuint}; use gl::types::{GLint, GLsizei, GLsizeiptr, GLuint};
use librashader_reflect::back::cross::GlslangGlslContext; use librashader_reflect::back::cross::GlslangGlslContext;
use librashader_reflect::back::ShaderCompilerOutput; use librashader_reflect::back::ShaderCompilerOutput;
@ -8,7 +9,7 @@ use librashader_preprocess::ShaderSource;
use librashader_presets::ShaderPassConfig; use librashader_presets::ShaderPassConfig;
use librashader_reflect::reflect::semantics::{BindingStage, MemberOffset, TextureBinding, TextureSemantics, UniformBinding, VariableSemantics}; use librashader_reflect::reflect::semantics::{BindingStage, MemberOffset, TextureBinding, TextureSemantics, UniformBinding, VariableSemantics};
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use librashader_reflect::reflect::uniforms::UniformStorage; use librashader_runtime::uniforms::UniformStorage;
use crate::binding::{BufferStorage, GlUniformBinder, UniformLocation, VariableLocation}; use crate::binding::{BufferStorage, GlUniformBinder, UniformLocation, VariableLocation};
use crate::filter_chain::FilterCommon; use crate::filter_chain::FilterCommon;
@ -42,7 +43,7 @@ impl FilterPass {
viewport: &Viewport, viewport: &Viewport,
original: &Texture, original: &Texture,
source: &Texture, source: &Texture,
output: RenderTarget, output: RenderTarget
) { ) {
let framebuffer = output.framebuffer; let framebuffer = output.framebuffer;
@ -203,7 +204,7 @@ impl FilterPass {
.texture_meta .texture_meta
.get(&TextureSemantics::Original.semantics(0)) .get(&TextureSemantics::Original.semantics(0))
{ {
FilterPass::bind_texture(&parent.samplers, binding, original); Self::bind_texture(&parent.samplers, binding, original);
} }
// bind OriginalSize // bind OriginalSize
@ -223,7 +224,7 @@ impl FilterPass {
.get(&TextureSemantics::Source.semantics(0)) .get(&TextureSemantics::Source.semantics(0))
{ {
// eprintln!("setting source binding to {}", binding.binding); // eprintln!("setting source binding to {}", binding.binding);
FilterPass::bind_texture(&parent.samplers, binding, source); Self::bind_texture(&parent.samplers, binding, source);
} }
// bind SourceSize // bind SourceSize
@ -241,7 +242,7 @@ impl FilterPass {
.texture_meta .texture_meta
.get(&TextureSemantics::OriginalHistory.semantics(0)) .get(&TextureSemantics::OriginalHistory.semantics(0))
{ {
FilterPass::bind_texture(&parent.samplers, binding, original); Self::bind_texture(&parent.samplers, binding, original);
} }
if let Some((location, offset)) = self if let Some((location, offset)) = self
.uniform_bindings .uniform_bindings
@ -258,7 +259,7 @@ impl FilterPass {
.texture_meta .texture_meta
.get(&TextureSemantics::OriginalHistory.semantics(index + 1)) .get(&TextureSemantics::OriginalHistory.semantics(index + 1))
{ {
FilterPass::bind_texture(&parent.samplers, binding, output); Self::bind_texture(&parent.samplers, binding, output);
} }
if let Some((location, offset)) = self.uniform_bindings.get( if let Some((location, offset)) = self.uniform_bindings.get(
@ -279,7 +280,7 @@ impl FilterPass {
.texture_meta .texture_meta
.get(&TextureSemantics::PassOutput.semantics(index)) .get(&TextureSemantics::PassOutput.semantics(index))
{ {
FilterPass::bind_texture(&parent.samplers, binding, output); Self::bind_texture(&parent.samplers, binding, output);
} }
if let Some((location, offset)) = self if let Some((location, offset)) = self
@ -302,7 +303,7 @@ impl FilterPass {
if feedback.image.handle == 0 { if feedback.image.handle == 0 {
eprintln!("[WARNING] trying to bind PassFeedback: {index} which has texture 0 to slot {} in pass {pass_index}", binding.binding) eprintln!("[WARNING] trying to bind PassFeedback: {index} which has texture 0 to slot {} in pass {pass_index}", binding.binding)
} }
FilterPass::bind_texture(&parent.samplers, binding, feedback); Self::bind_texture(&parent.samplers, binding, feedback);
} }
if let Some((location, offset)) = self if let Some((location, offset)) = self
@ -351,7 +352,7 @@ impl FilterPass {
.texture_meta .texture_meta
.get(&TextureSemantics::User.semantics(*index)) .get(&TextureSemantics::User.semantics(*index))
{ {
FilterPass::bind_texture(&parent.samplers, binding, lut); Self::bind_texture(&parent.samplers, binding, lut);
} }
if let Some((location, offset)) = self if let Some((location, offset)) = self

View file

@ -2,7 +2,7 @@ use gl::types::{GLenum, GLint, GLuint};
use librashader_common::Size; use librashader_common::Size;
use librashader_reflect::back::cross::GlVersion; use librashader_reflect::back::cross::GlVersion;
use librashader_reflect::reflect::semantics::BindingStage; use librashader_reflect::reflect::semantics::BindingStage;
use librashader_reflect::reflect::uniforms::{BindUniform, UniformStorage, UniformScalar}; use librashader_runtime::uniforms::{BindUniform, UniformStorage, UniformScalar};
use crate::binding::UniformLocation; use crate::binding::UniformLocation;
pub fn calc_miplevel(size: Size<u32>) -> u32 { pub fn calc_miplevel(size: Size<u32>) -> u32 {

View file

@ -10,6 +10,8 @@ librashader-common = { path = "../librashader-common", features = ["opengl"] }
librashader-presets = { path = "../librashader-presets" } librashader-presets = { path = "../librashader-presets" }
librashader-preprocess = { path = "../librashader-preprocess" } librashader-preprocess = { path = "../librashader-preprocess" }
librashader-reflect = { path = "../librashader-reflect" } librashader-reflect = { path = "../librashader-reflect" }
librashader-runtime = { path = "../librashader-runtime" }
spirv_cross = "0.23.1" spirv_cross = "0.23.1"
rustc-hash = "1.1.0" rustc-hash = "1.1.0"
gl = "0.14.0" gl = "0.14.0"

View file

@ -1,6 +1,6 @@
use gl::types::GLint; use gl::types::GLint;
use librashader_reflect::reflect::semantics::BindingStage; use librashader_reflect::reflect::semantics::BindingStage;
use librashader_reflect::reflect::uniforms::{BindUniform, UniformStorage, UniformScalar}; use librashader_runtime::uniforms::{BindUniform, UniformStorage, UniformScalar};
#[derive(Debug)] #[derive(Debug)]
pub enum VariableLocation { pub enum VariableLocation {

View file

@ -51,55 +51,6 @@ pub struct FilterMutable {
} }
impl FilterChain { impl FilterChain {
fn load_pass_semantics(
uniform_semantics: &mut FxHashMap<String, UniformSemantic>,
texture_semantics: &mut FxHashMap<String, SemanticMap<TextureSemantics>>,
config: &ShaderPassConfig,
) {
let Some(alias) = &config.alias else {
return;
};
// Ignore empty aliases
if alias.trim().is_empty() {
return;
}
let index = config.id as usize;
// PassOutput
texture_semantics.insert(
alias.clone(),
SemanticMap {
semantics: TextureSemantics::PassOutput,
index,
},
);
uniform_semantics.insert(
format!("{alias}Size"),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::PassOutput,
index,
}),
);
// PassFeedback
texture_semantics.insert(
format!("{alias}Feedback"),
SemanticMap {
semantics: TextureSemantics::PassFeedback,
index,
},
);
uniform_semantics.insert(
format!("{alias}FeedbackSize"),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::PassFeedback,
index,
}),
);
}
fn reflect_uniform_location(pipeline: GLuint, meta: &impl UniformMeta) -> VariableLocation { fn reflect_uniform_location(pipeline: GLuint, meta: &impl UniformMeta) -> VariableLocation {
// todo: support both ubo and pushco // todo: support both ubo and pushco
// todo: fix this. // todo: fix this.
@ -236,7 +187,7 @@ impl FilterChain {
.collect::<Result<Vec<(ShaderPassConfig, ShaderSource, CompilerBackend<_>)>>>()?; .collect::<Result<Vec<(ShaderPassConfig, ShaderSource, CompilerBackend<_>)>>>()?;
for details in &passes { for details in &passes {
FilterChain::load_pass_semantics( librashader_runtime::semantics::insert_pass_semantics(
&mut uniform_semantics, &mut uniform_semantics,
&mut texture_semantics, &mut texture_semantics,
&details.0, &details.0,
@ -244,24 +195,9 @@ impl FilterChain {
} }
// add lut params // add lut params
for (index, texture) in textures.iter().enumerate() { librashader_runtime::semantics::insert_lut_semantics(textures,
texture_semantics.insert( &mut uniform_semantics,
texture.name.clone(), &mut texture_semantics);
SemanticMap {
semantics: TextureSemantics::User,
index,
},
);
uniform_semantics.insert(
format!("{}Size", texture.name),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::User,
index,
}),
);
}
let semantics = ReflectSemantics { let semantics = ReflectSemantics {
uniform_semantics, uniform_semantics,
texture_semantics, texture_semantics,

View file

@ -0,0 +1,13 @@
[package]
name = "librashader-runtime"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
librashader-presets = { path = "../librashader-presets" }
librashader-preprocess = { path = "../librashader-preprocess" }
librashader-reflect = { path = "../librashader-reflect" }
bytemuck = "1.12.3"
rustc-hash = "1.1.0"

View file

@ -0,0 +1,2 @@
pub mod semantics;
pub mod uniforms;

View file

@ -0,0 +1,78 @@
use librashader_presets::{ShaderPassConfig, TextureConfig};
use rustc_hash::FxHashMap;
use librashader_reflect::reflect::semantics::{SemanticMap, TextureSemantics, UniformSemantic};
pub type UniformSemanticsMap = FxHashMap<String, UniformSemantic>;
pub type TextureSemanticsMap = FxHashMap<String, SemanticMap<TextureSemantics>>;
pub fn insert_pass_semantics(
uniform_semantics: &mut UniformSemanticsMap,
texture_semantics: &mut TextureSemanticsMap,
config: &ShaderPassConfig,
) {
let Some(alias) = &config.alias else {
return;
};
// Ignore empty aliases
if alias.trim().is_empty() {
return;
}
let index = config.id as usize;
// PassOutput
texture_semantics.insert(
alias.clone(),
SemanticMap {
semantics: TextureSemantics::PassOutput,
index,
},
);
uniform_semantics.insert(
format!("{alias}Size"),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::PassOutput,
index,
}),
);
// PassFeedback
texture_semantics.insert(
format!("{alias}Feedback"),
SemanticMap {
semantics: TextureSemantics::PassFeedback,
index,
},
);
uniform_semantics.insert(
format!("{alias}FeedbackSize"),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::PassFeedback,
index,
}),
);
}
pub fn insert_lut_semantics(textures: &[TextureConfig],
uniform_semantics: &mut UniformSemanticsMap,
texture_semantics: &mut TextureSemanticsMap) {
for (index, texture) in textures.iter().enumerate() {
texture_semantics.insert(
texture.name.clone(),
SemanticMap {
semantics: TextureSemantics::User,
index,
},
);
uniform_semantics.insert(
format!("{}Size", texture.name),
UniformSemantic::Texture(SemanticMap {
semantics: TextureSemantics::User,
index,
}),
);
}
}

View file

@ -1,5 +1,5 @@
use std::marker::PhantomData; use std::marker::PhantomData;
use crate::reflect::semantics::MemberOffset; use librashader_reflect::reflect::semantics::MemberOffset;
pub trait UniformScalar: Copy + bytemuck::Pod {} pub trait UniformScalar: Copy + bytemuck::Pod {}
impl UniformScalar for f32 {} impl UniformScalar for f32 {}