copyTextureToTexture src/dst aspects must both refer to all aspects of src/dst format (#3431)

* src/dst aspects must both refer to all aspects of src/dst format

* add changelog entry
This commit is contained in:
Teodor Tanasoaia 2023-01-28 17:08:21 +01:00 committed by GitHub
parent b31069f14a
commit 98ea3500fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 5 deletions

View File

@ -50,6 +50,12 @@ Bottom level categories:
- Improve format MSAA capabilities detection. By @jinleili in [#3429](https://github.com/gfx-rs/wgpu/pull/3429)
### Bug Fixes
#### General
- `copyTextureToTexture` src/dst aspects must both refer to all aspects of src/dst format. By @teoxoy in [#3431](https://github.com/gfx-rs/wgpu/pull/3431)
## wgpu-0.15.0 (2023-01-25)
### Major Changes

View File

@ -95,8 +95,12 @@ pub enum TransferError {
InvalidCopySize,
#[error("number of rows per image is invalid")]
InvalidRowsPerImage,
#[error("source and destination layers have different aspects")]
MismatchedAspects,
#[error("copy source aspects must refer to all aspects of the source texture format")]
CopySrcMissingAspects,
#[error(
"copy destination aspects must refer to all aspects of the destination texture format"
)]
CopyDstMissingAspects,
#[error("copying from textures with format {format:?} and aspect {aspect:?} is forbidden")]
CopyFromForbiddenTextureFormat {
format: wgt::TextureFormat,
@ -1053,8 +1057,13 @@ impl<G: GlobalIdentityHandlerFactory> Global<G> {
extract_texture_selector(source, copy_size, src_texture)?;
let (dst_range, dst_tex_base, _) =
extract_texture_selector(destination, copy_size, dst_texture)?;
if src_tex_base.aspect != dst_tex_base.aspect {
return Err(TransferError::MismatchedAspects.into());
let src_texture_aspects = hal::FormatAspects::from(src_texture.desc.format);
let dst_texture_aspects = hal::FormatAspects::from(dst_texture.desc.format);
if src_tex_base.aspect != src_texture_aspects {
return Err(TransferError::CopySrcMissingAspects.into());
}
if dst_tex_base.aspect != dst_texture_aspects {
return Err(TransferError::CopyDstMissingAspects.into());
}
// Handle texture init *before* dealing with barrier transitions so we