Skip to content

Commit

Permalink
Allow non-filtering integer texture sampling (#3362)
Browse files Browse the repository at this point in the history
* Allow non-filtering integer texture sampling

* Add changelog entry
  • Loading branch information
JMS55 authored Jan 9, 2023
1 parent a06ef71 commit ad4dac8
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 23 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ Additionally `Surface::get_default_config` now returns an Option and returns Non
- Check for invalid bitflag bits in wgpu-core and allow them to be captured/replayed by @nical in (#3229)[https://github.com/gfx-rs/wgpu/pull/3229]
- Evaluate `gfx_select!`'s `#[cfg]` conditions at the right time. By @jimblandy in [#3253](https://github.com/gfx-rs/wgpu/pull/3253)
- Improve error messages when binding bind group with dynamic offsets. By @cwfitzgerald in [#3294](https://github.com/gfx-rs/wgpu/pull/3294)
- Allow non-filtering sampling of integer textures. By @JMS55 in [#3362](https://github.com/gfx-rs/wgpu/pull/3362).

#### Metal
- Fix texture view creation with full-resource views when using an explicit `mip_level_count` or `array_layer_count`. By @cwfitzgerald in [#3323](https://github.com/gfx-rs/wgpu/pull/3323)
Expand Down
41 changes: 18 additions & 23 deletions wgpu-core/src/validation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -212,10 +212,10 @@ pub enum BindingError {

#[derive(Clone, Debug, Error)]
pub enum FilteringError {
#[error("integer textures can't be sampled")]
#[error("integer textures can't be sampled with a filtering sampler")]
Integer,
#[error("non-filterable float texture")]
NonFilterable,
#[error("non-filterable float textures can't be sampled with a filtering sampler")]
Float,
}

#[derive(Clone, Debug, Error)]
Expand Down Expand Up @@ -1049,27 +1049,22 @@ impl Interface {
assert!(texture_layout.visibility.contains(stage_bit));
assert!(sampler_layout.visibility.contains(stage_bit));

let error = match texture_layout.ty {
wgt::BindingType::Texture {
sample_type: wgt::TextureSampleType::Float { filterable },
..
} => match sampler_layout.ty {
wgt::BindingType::Sampler(wgt::SamplerBindingType::Filtering)
if !filterable =>
{
Some(FilteringError::NonFilterable)
}
_ => None,
},
wgt::BindingType::Texture {
sample_type: wgt::TextureSampleType::Sint,
..
let sampler_filtering = matches!(
sampler_layout.ty,
wgt::BindingType::Sampler(wgt::SamplerBindingType::Filtering)
);
let texture_sample_type = match texture_layout.ty {
BindingType::Texture { sample_type, .. } => sample_type,
_ => unreachable!(),
};

let error = match (sampler_filtering, texture_sample_type) {
(true, wgt::TextureSampleType::Float { filterable: false }) => {
Some(FilteringError::Float)
}
| wgt::BindingType::Texture {
sample_type: wgt::TextureSampleType::Uint,
..
} => Some(FilteringError::Integer),
_ => None, // unreachable, really
(true, wgt::TextureSampleType::Sint) => Some(FilteringError::Integer),
(true, wgt::TextureSampleType::Uint) => Some(FilteringError::Integer),
_ => None,
};

if let Some(error) = error {
Expand Down

0 comments on commit ad4dac8

Please sign in to comment.