diff --git a/CHANGELOG.md b/CHANGELOG.md index 587e1bd219..a0d421e50f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -143,6 +143,7 @@ By @cwfitzgerald in [#3671](https://github.com/gfx-rs/wgpu/pull/3671). - Make error descriptions all upper case. By @cwfitzgerald in [#3549](https://github.com/gfx-rs/wgpu/pull/3549) - Don't include ANSI terminal color escape sequences in shader module validation error messages. By @jimblandy in [#3591](https://github.com/gfx-rs/wgpu/pull/3591) - Report error messages from DXC compile. By @Davidster in [#3632](https://github.com/gfx-rs/wgpu/pull/3632) +- Error in native when using a filterable `TextureSampleType::Float` on a multisample `BindingType::Texture`. By @mockersf in [#3686](https://github.com/gfx-rs/wgpu/pull/3686) #### WebGPU diff --git a/wgpu-core/src/binding_model.rs b/wgpu-core/src/binding_model.rs index 252bb46d2d..5c63ac43ff 100644 --- a/wgpu-core/src/binding_model.rs +++ b/wgpu-core/src/binding_model.rs @@ -29,6 +29,8 @@ pub enum BindGroupLayoutEntryError { StorageTextureReadWrite, #[error("Arrays of bindings unsupported for this type of binding")] ArrayUnsupported, + #[error("Multisampled binding with sample type `TextureSampleType::Float` must have filterable set to false.")] + SampleTypeFloatFilterableBindingMultisampled, #[error(transparent)] MissingFeatures(#[from] MissingFeatures), #[error(transparent)] diff --git a/wgpu-core/src/device/mod.rs b/wgpu-core/src/device/mod.rs index 9e311d1019..c8ef8632ad 100644 --- a/wgpu-core/src/device/mod.rs +++ b/wgpu-core/src/device/mod.rs @@ -22,7 +22,7 @@ use hal::{CommandEncoder as _, Device as _}; use parking_lot::{Mutex, MutexGuard}; use smallvec::SmallVec; use thiserror::Error; -use wgt::{BufferAddress, TextureFormat, TextureViewDimension}; +use wgt::{BufferAddress, TextureFormat, TextureSampleType, TextureViewDimension}; use std::{borrow::Cow, iter, mem, num::NonZeroU32, ops::Range, ptr}; @@ -1694,6 +1694,16 @@ impl Device { Some(wgt::Features::TEXTURE_BINDING_ARRAY), WritableStorage::No, ), + Bt::Texture { + multisampled: true, + sample_type: TextureSampleType::Float { filterable: true }, + .. + } => { + return Err(binding_model::CreateBindGroupLayoutError::Entry { + binding: entry.binding, + error: binding_model::BindGroupLayoutEntryError::SampleTypeFloatFilterableBindingMultisampled, + }); + } Bt::Texture { .. } => ( Some(wgt::Features::TEXTURE_BINDING_ARRAY), WritableStorage::No,