reflect: clean up UniformStorage
This commit is contained in:
parent
83b7cd38a0
commit
515fe12568
|
@ -17,20 +17,20 @@ pub trait BindUniform<C, T> {
|
||||||
fn bind_uniform(value: T, ctx: C) -> Option<()>;
|
fn bind_uniform(value: T, ctx: C) -> Option<()>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct UniformBuffer<H=NoUniformBinder, C = Option<()>> {
|
pub struct UniformStorage<H=NoUniformBinder, C = Option<()>> {
|
||||||
pub ubo: Box<[u8]>,
|
pub ubo: Box<[u8]>,
|
||||||
pub push: Box<[u8]>,
|
pub push: Box<[u8]>,
|
||||||
_h: PhantomData<H>,
|
_h: PhantomData<H>,
|
||||||
_c: PhantomData<C>
|
_c: PhantomData<C>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl <H, C> UniformBuffer<H, C>
|
impl <H, C> UniformStorage<H, C>
|
||||||
where H: BindUniform<C, f32>, H: BindUniform<C, u32>, H: BindUniform<C, i32>,
|
where H: BindUniform<C, f32>, H: BindUniform<C, u32>, H: BindUniform<C, i32>,
|
||||||
H: for <'a> BindUniform<C, &'a [f32; 4]>,
|
H: for <'a> BindUniform<C, &'a [f32; 4]>,
|
||||||
H: for <'a> BindUniform<C, &'a [f32; 16]>
|
H: for <'a> BindUniform<C, &'a [f32; 16]>
|
||||||
{
|
{
|
||||||
pub fn new(ubo_size: usize, push_size: usize) -> Self {
|
pub fn new(ubo_size: usize, push_size: usize) -> Self {
|
||||||
UniformBuffer {
|
UniformStorage {
|
||||||
ubo: vec![0u8; ubo_size].into_boxed_slice(),
|
ubo: vec![0u8; ubo_size].into_boxed_slice(),
|
||||||
push: vec![0u8; push_size].into_boxed_slice(),
|
push: vec![0u8; push_size].into_boxed_slice(),
|
||||||
_h: Default::default(),
|
_h: Default::default(),
|
||||||
|
@ -63,15 +63,12 @@ H: for <'a> BindUniform<C, &'a [f32; 16]>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn bind_mat4(&mut self, offset: MemberOffset, value: &[f32; 16], ctx: C) {
|
pub fn bind_mat4(&mut self, offset: MemberOffset, value: &[f32; 16], ctx: C) {
|
||||||
let (buffer, offset) = match offset {
|
let (buffer, offset) = match offset {
|
||||||
MemberOffset::Ubo(offset) => (&mut self.ubo, offset),
|
MemberOffset::Ubo(offset) => (&mut self.ubo, offset),
|
||||||
MemberOffset::PushConstant(offset) => (&mut self.push, offset),
|
MemberOffset::PushConstant(offset) => (&mut self.push, offset),
|
||||||
};
|
};
|
||||||
let size = value.len() * std::mem::size_of::<f32>();
|
Self::write_mat4_inner(&mut buffer[offset..][..16 * std::mem::size_of::<f32>()], value, ctx);
|
||||||
|
|
||||||
Self::write_mat4_inner(&mut buffer[offset..][..size], value, ctx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn bind_vec4(&mut self, offset: MemberOffset, value: impl Into<[f32; 4]>, ctx: C) {
|
pub fn bind_vec4(&mut self, offset: MemberOffset, value: impl Into<[f32; 4]>, ctx: C) {
|
||||||
|
@ -80,7 +77,7 @@ H: for <'a> BindUniform<C, &'a [f32; 16]>
|
||||||
MemberOffset::PushConstant(offset) => (&mut self.push, offset),
|
MemberOffset::PushConstant(offset) => (&mut self.push, offset),
|
||||||
};
|
};
|
||||||
|
|
||||||
Self::write_vec4_inner(&mut buffer[offset..][..16], value, ctx);
|
Self::write_vec4_inner(&mut buffer[offset..][..4 * std::mem::size_of::<f32>()], value, ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn bind_scalar<T: UniformScalar>(&mut self, offset: MemberOffset, value: T, ctx: C)
|
pub fn bind_scalar<T: UniformScalar>(&mut self, offset: MemberOffset, value: T, ctx: C)
|
||||||
|
@ -91,6 +88,6 @@ H: for <'a> BindUniform<C, &'a [f32; 16]>
|
||||||
MemberOffset::PushConstant(offset) => (&mut self.push, offset),
|
MemberOffset::PushConstant(offset) => (&mut self.push, offset),
|
||||||
};
|
};
|
||||||
|
|
||||||
Self::write_scalar_inner(&mut buffer[offset..][..4], value, ctx)
|
Self::write_scalar_inner(&mut buffer[offset..][..std::mem::size_of::<T>()], value, ctx)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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, UniformBuffer, UniformScalar};
|
use librashader_reflect::reflect::uniforms::{BindUniform, UniformStorage, UniformScalar};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum VariableLocation {
|
pub enum VariableLocation {
|
||||||
|
@ -35,7 +35,7 @@ impl UniformLocation<GLint> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) type BufferStorage = UniformBuffer<GlUniformBinder, UniformLocation<GLint>>;
|
pub(crate) type BufferStorage = UniformStorage<GlUniformBinder, UniformLocation<GLint>>;
|
||||||
|
|
||||||
|
|
||||||
pub trait GlUniformScalar: UniformScalar {
|
pub trait GlUniformScalar: UniformScalar {
|
||||||
|
|
|
@ -8,7 +8,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::UniformBuffer;
|
use librashader_reflect::reflect::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;
|
||||||
|
|
|
@ -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, UniformBuffer, UniformScalar};
|
use librashader_reflect::reflect::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 {
|
||||||
|
|
|
@ -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, UniformBuffer, UniformScalar};
|
use librashader_reflect::reflect::uniforms::{BindUniform, UniformStorage, UniformScalar};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum VariableLocation {
|
pub enum VariableLocation {
|
||||||
|
@ -35,7 +35,7 @@ impl UniformLocation<GLint> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) type BufferStorage = UniformBuffer<GlUniformBinder, UniformLocation<GLint>>;
|
pub(crate) type BufferStorage = UniformStorage<GlUniformBinder, UniformLocation<GLint>>;
|
||||||
|
|
||||||
|
|
||||||
pub trait GlUniformScalar: UniformScalar {
|
pub trait GlUniformScalar: UniformScalar {
|
||||||
|
|
Loading…
Reference in a new issue