mirror of
https://github.com/gfx-rs/wgpu.git
synced 2024-11-25 16:24:24 +00:00
Added TextureFormatFeatures::filterable
Can overwrite TextureSampleType::Float.filterable
This commit is contained in:
parent
2d0142a2e7
commit
dfe686bbc6
@ -1440,21 +1440,26 @@ impl<B: GfxBackend> Device<B> {
|
||||
view_samples: view.samples as u32,
|
||||
});
|
||||
}
|
||||
match (sample_type, format_info.sample_type) {
|
||||
(Tst::Uint, Tst::Uint) |
|
||||
(Tst::Sint, Tst::Sint) |
|
||||
(Tst::Depth, Tst::Depth) |
|
||||
// if we expect non-fiterable, accept anything float
|
||||
(Tst::Float { filterable: false }, Tst::Float { .. }) |
|
||||
// if we expect fiterable, require it
|
||||
(Tst::Float { filterable: true }, Tst::Float { filterable: true }) |
|
||||
match (sample_type, format_info.sample_type, view.format_features.filterable ) {
|
||||
(Tst::Uint, Tst::Uint, ..) |
|
||||
(Tst::Sint, Tst::Sint, ..) |
|
||||
(Tst::Depth, Tst::Depth, ..) |
|
||||
// if we expect non-filterable, accept anything float
|
||||
(Tst::Float { filterable: false }, Tst::Float { .. }, ..) |
|
||||
// if we expect filterable, require it
|
||||
(Tst::Float { filterable: true }, Tst::Float { filterable: true }, ..) |
|
||||
// if we expect filterable, also accept Float that is defined as unfilterable if filterable feature is explicitly enabled
|
||||
// (only hit if wgt::Features::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES is enabled)
|
||||
(Tst::Float { filterable: true }, Tst::Float { .. }, true) |
|
||||
// if we expect float, also accept depth
|
||||
(Tst::Float { .. }, Tst::Depth) => {}
|
||||
_ => return Err(Error::InvalidTextureSampleType {
|
||||
(Tst::Float { .. }, Tst::Depth, ..) => {}
|
||||
_ => {
|
||||
return Err(Error::InvalidTextureSampleType {
|
||||
binding,
|
||||
layout_sample_type: sample_type,
|
||||
view_format: view.format,
|
||||
}),
|
||||
})
|
||||
},
|
||||
}
|
||||
if view_dimension != view.dimension {
|
||||
return Err(Error::InvalidTextureDimension {
|
||||
|
@ -329,9 +329,13 @@ impl<B: GfxBackend> Adapter<B> {
|
||||
flags |= wgt::TextureFormatFeatureFlags::STORAGE_READ_WRITE;
|
||||
}
|
||||
|
||||
let filterable =
|
||||
texture_format_properties.contains(hal::format::ImageFeature::SAMPLED_LINEAR);
|
||||
|
||||
wgt::TextureFormatFeatures {
|
||||
allowed_usages,
|
||||
flags,
|
||||
filterable,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -187,6 +187,7 @@ impl<G: GlobalIdentityHandlerFactory> Global<G> {
|
||||
format_features: wgt::TextureFormatFeatures {
|
||||
allowed_usages: wgt::TextureUsage::RENDER_ATTACHMENT,
|
||||
flags: wgt::TextureFormatFeatureFlags::empty(),
|
||||
filterable: false,
|
||||
},
|
||||
dimension: wgt::TextureViewDimension::D2,
|
||||
extent: wgt::Extent3d {
|
||||
|
@ -937,6 +937,9 @@ pub struct TextureFormatFeatures {
|
||||
pub allowed_usages: TextureUsage,
|
||||
/// Additional property flags for the format.
|
||||
pub flags: TextureFormatFeatureFlags,
|
||||
/// If `filterable` is false, the texture can't be sampled with a filtering sampler.
|
||||
/// This may overwrite TextureSampleType::Float.filterable
|
||||
pub filterable: bool,
|
||||
}
|
||||
|
||||
/// Information about a texture format.
|
||||
@ -1492,6 +1495,7 @@ impl TextureFormat {
|
||||
guaranteed_format_features: TextureFormatFeatures {
|
||||
allowed_usages,
|
||||
flags: TextureFormatFeatureFlags::empty(),
|
||||
filterable: sample_type == TextureSampleType::Float { filterable: true },
|
||||
},
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user