mirror of
https://github.com/gfx-rs/wgpu.git
synced 2025-12-08 21:26:17 +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,
|
view_samples: view.samples as u32,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
match (sample_type, format_info.sample_type) {
|
match (sample_type, format_info.sample_type, view.format_features.filterable ) {
|
||||||
(Tst::Uint, Tst::Uint) |
|
(Tst::Uint, Tst::Uint, ..) |
|
||||||
(Tst::Sint, Tst::Sint) |
|
(Tst::Sint, Tst::Sint, ..) |
|
||||||
(Tst::Depth, Tst::Depth) |
|
(Tst::Depth, Tst::Depth, ..) |
|
||||||
// if we expect non-fiterable, accept anything float
|
// if we expect non-filterable, accept anything float
|
||||||
(Tst::Float { filterable: false }, Tst::Float { .. }) |
|
(Tst::Float { filterable: false }, Tst::Float { .. }, ..) |
|
||||||
// if we expect fiterable, require it
|
// if we expect filterable, require it
|
||||||
(Tst::Float { filterable: true }, Tst::Float { filterable: true }) |
|
(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
|
// if we expect float, also accept depth
|
||||||
(Tst::Float { .. }, Tst::Depth) => {}
|
(Tst::Float { .. }, Tst::Depth, ..) => {}
|
||||||
_ => return Err(Error::InvalidTextureSampleType {
|
_ => {
|
||||||
|
return Err(Error::InvalidTextureSampleType {
|
||||||
binding,
|
binding,
|
||||||
layout_sample_type: sample_type,
|
layout_sample_type: sample_type,
|
||||||
view_format: view.format,
|
view_format: view.format,
|
||||||
}),
|
})
|
||||||
|
},
|
||||||
}
|
}
|
||||||
if view_dimension != view.dimension {
|
if view_dimension != view.dimension {
|
||||||
return Err(Error::InvalidTextureDimension {
|
return Err(Error::InvalidTextureDimension {
|
||||||
|
|||||||
@ -329,9 +329,13 @@ impl<B: GfxBackend> Adapter<B> {
|
|||||||
flags |= wgt::TextureFormatFeatureFlags::STORAGE_READ_WRITE;
|
flags |= wgt::TextureFormatFeatureFlags::STORAGE_READ_WRITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let filterable =
|
||||||
|
texture_format_properties.contains(hal::format::ImageFeature::SAMPLED_LINEAR);
|
||||||
|
|
||||||
wgt::TextureFormatFeatures {
|
wgt::TextureFormatFeatures {
|
||||||
allowed_usages,
|
allowed_usages,
|
||||||
flags,
|
flags,
|
||||||
|
filterable,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -187,6 +187,7 @@ impl<G: GlobalIdentityHandlerFactory> Global<G> {
|
|||||||
format_features: wgt::TextureFormatFeatures {
|
format_features: wgt::TextureFormatFeatures {
|
||||||
allowed_usages: wgt::TextureUsage::RENDER_ATTACHMENT,
|
allowed_usages: wgt::TextureUsage::RENDER_ATTACHMENT,
|
||||||
flags: wgt::TextureFormatFeatureFlags::empty(),
|
flags: wgt::TextureFormatFeatureFlags::empty(),
|
||||||
|
filterable: false,
|
||||||
},
|
},
|
||||||
dimension: wgt::TextureViewDimension::D2,
|
dimension: wgt::TextureViewDimension::D2,
|
||||||
extent: wgt::Extent3d {
|
extent: wgt::Extent3d {
|
||||||
|
|||||||
@ -937,6 +937,9 @@ pub struct TextureFormatFeatures {
|
|||||||
pub allowed_usages: TextureUsage,
|
pub allowed_usages: TextureUsage,
|
||||||
/// Additional property flags for the format.
|
/// Additional property flags for the format.
|
||||||
pub flags: TextureFormatFeatureFlags,
|
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.
|
/// Information about a texture format.
|
||||||
@ -1492,6 +1495,7 @@ impl TextureFormat {
|
|||||||
guaranteed_format_features: TextureFormatFeatures {
|
guaranteed_format_features: TextureFormatFeatures {
|
||||||
allowed_usages,
|
allowed_usages,
|
||||||
flags: TextureFormatFeatureFlags::empty(),
|
flags: TextureFormatFeatureFlags::empty(),
|
||||||
|
filterable: sample_type == TextureSampleType::Float { filterable: true },
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user