reflect: align push constant buffer sizes to 16 bytes

This commit is contained in:
chyyran 2022-11-26 23:57:01 -05:00
parent ad0ad991df
commit 2e5c9c835a
2 changed files with 13 additions and 9 deletions

View file

@ -1,9 +1,7 @@
use crate::error::{SemanticsErrorKind, ShaderCompileError, ShaderReflectError};
use crate::front::shaderc::GlslangCompilation;
use crate::reflect::semantics::{BindingStage, MAX_BINDINGS_COUNT, MAX_PUSH_BUFFER_SIZE, MemberOffset, PushReflection, ReflectSemantics, ShaderReflection, TextureBinding, TextureSemanticMap, TextureSemantics, TextureSizeMeta, TypeInfo, UboReflection, ValidateTypeSemantics, VariableMeta, VariableSemanticMap, VariableSemantics};
use crate::reflect::{
ReflectMeta, ReflectShader,
};
use crate::reflect::{align_uniform_size, ReflectMeta, ReflectShader};
use spirv_cross::hlsl::ShaderModel;
use spirv_cross::spirv::{Ast, Decoration, Module, Resource, ShaderResources, Type};
@ -447,7 +445,7 @@ where
let size = std::cmp::max(vertex_ubo.size, fragment_ubo.size);
Ok(Some(UboReflection {
binding: vertex_ubo.binding,
size,
size: align_uniform_size(size),
stage_mask: BindingStage::VERTEX | BindingStage::FRAGMENT,
}))
}
@ -456,7 +454,7 @@ where
Self::get_ubo_data(&self.vertex, vertex_ubo, SemanticErrorBlame::Vertex)?;
Ok(Some(UboReflection {
binding: vertex_ubo.binding,
size: vertex_ubo.size,
size: align_uniform_size(vertex_ubo.size),
stage_mask: BindingStage::VERTEX,
}))
}
@ -465,7 +463,7 @@ where
Self::get_ubo_data(&self.fragment, fragment_ubo, SemanticErrorBlame::Fragment)?;
Ok(Some(UboReflection {
binding: fragment_ubo.binding,
size: fragment_ubo.size,
size: align_uniform_size(fragment_ubo.size),
stage_mask: BindingStage::FRAGMENT,
}))
}
@ -556,7 +554,7 @@ where
let size = std::cmp::max(vertex_size, fragment_size);
Ok(Some(PushReflection {
size,
size: align_uniform_size(size),
stage_mask: BindingStage::VERTEX | BindingStage::FRAGMENT,
}))
}
@ -564,7 +562,7 @@ where
let vertex_size =
Self::get_push_size(&self.vertex, vertex_push, SemanticErrorBlame::Vertex)?;
Ok(Some(PushReflection {
size: vertex_size,
size: align_uniform_size(vertex_size),
stage_mask: BindingStage::VERTEX,
}))
}
@ -575,7 +573,7 @@ where
SemanticErrorBlame::Fragment,
)?;
Ok(Some(PushReflection {
size: fragment_size,
size: align_uniform_size(fragment_size),
stage_mask: BindingStage::FRAGMENT,
}))
}

View file

@ -31,3 +31,9 @@ pub struct ReflectMeta {
}
pub use semantics::ShaderReflection;
#[inline(always)]
/// Give a size aligned to 16 byte boundary
const fn align_uniform_size(size: u32) -> u32 {
(size + 0xf) & !0xf
}