diff --git a/wgpu-core/src/binding_model.rs b/wgpu-core/src/binding_model.rs index e7d6066fb0..ae8f3af69e 100644 --- a/wgpu-core/src/binding_model.rs +++ b/wgpu-core/src/binding_model.rs @@ -48,6 +48,8 @@ pub enum BindGroupError { /// The given sampler is/is not a comparison sampler, /// while the layout type indicates otherwise. WrongSamplerComparison, + /// Uniform buffer binding range exceeds [`wgt::Limits::max_uniform_buffer_binding_size`] limit + UniformBufferRangeTooLarge, } #[derive(Clone, Debug)] diff --git a/wgpu-core/src/device/mod.rs b/wgpu-core/src/device/mod.rs index 3b8efa27de..7900f28957 100644 --- a/wgpu-core/src/device/mod.rs +++ b/wgpu-core/src/device/mod.rs @@ -1589,6 +1589,12 @@ impl Global { None => (buffer.size - bb.offset, buffer.size), }; + if pub_usage == wgt::BufferUsage::UNIFORM + && (device.limits.max_uniform_buffer_binding_size as u64) < bind_size + { + return Err(BindGroupError::UniformBufferRangeTooLarge); + } + // Record binding info for validating dynamic offsets if dynamic { dynamic_binding_info.push(binding_model::BindGroupDynamicBindingData {