Added TextureFormatFeatures::filterable

Can overwrite TextureSampleType::Float.filterable
This commit is contained in:
Andreas Reich 2021-02-23 23:59:17 +01:00
parent 2d0142a2e7
commit dfe686bbc6
4 changed files with 25 additions and 11 deletions

View File

@ -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 {

View File

@ -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,
}
}

View File

@ -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 {

View File

@ -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 },
},
}
}