From 36fa3b81b47718e904549405ed32b8a7ca8c73bc Mon Sep 17 00:00:00 2001 From: Connor Fitzgerald Date: Tue, 7 Jul 2020 22:20:08 -0400 Subject: [PATCH] Validate BindGroup based limits --- wgpu-core/src/binding_model.rs | 2 ++ wgpu-core/src/device/mod.rs | 6 ++++++ 2 files changed, 8 insertions(+) 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 {