Skip to content

Commit

Permalink
Prevent using multiple push constant variables in one entry point.
Browse files Browse the repository at this point in the history
  • Loading branch information
andriyDev committed Sep 19, 2023
1 parent df8107b commit a613fdd
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions src/valid/interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ pub enum EntryPointError {
ForbiddenStageOperations,
#[error("Global variable {0:?} is used incorrectly as {1:?}")]
InvalidGlobalUsage(Handle<crate::GlobalVariable>, GlobalUse),
#[error("More than 1 push constant variable is used")]
MoreThanOnePushConstantUsed,
#[error("Bindings for {0:?} conflict with other resource")]
BindingCollision(Handle<crate::GlobalVariable>),
#[error("Argument {0} varying error")]
Expand Down Expand Up @@ -701,6 +703,21 @@ impl super::Validator {
bg.clear();
}

#[cfg(feature = "validate")]
{
let used_push_constants = module
.global_variables
.iter()
.filter(|&(_, var)| var.space == crate::AddressSpace::PushConstant)
.map(|(handle, _)| handle)
.filter(|&handle| !info[handle].is_empty());
// Check if there is more than one push constant, and error if so.
for handle in used_push_constants.skip(1) {
return Err(EntryPointError::MoreThanOnePushConstantUsed
.with_span_handle(handle, &module.global_variables));
}
}

#[cfg(feature = "validate")]
for (var_handle, var) in module.global_variables.iter() {
let usage = info[var_handle];
Expand Down

0 comments on commit a613fdd

Please sign in to comment.