From ea91d349600a069a43e78e4cbfeb980b84c2cd5b Mon Sep 17 00:00:00 2001 From: Teodor Tanasoaia <28601907+teoxoy@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:37:16 +0100 Subject: [PATCH 1/3] [d3d12] use plane 1 for stencil only views --- wgpu-hal/src/dx12/view.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/wgpu-hal/src/dx12/view.rs b/wgpu-hal/src/dx12/view.rs index 6cbad7bd1d..ae8e5814a8 100644 --- a/wgpu-hal/src/dx12/view.rs +++ b/wgpu-hal/src/dx12/view.rs @@ -36,6 +36,7 @@ impl crate::TextureViewDescriptor<'_> { fn aspects_to_plane(aspects: crate::FormatAspects) -> u32 { match aspects { + crate::FormatAspects::STENCIL => 1, crate::FormatAspects::PLANE_1 => 1, crate::FormatAspects::PLANE_2 => 2, _ => 0, From 4a145975814c831070896bf6c929bfa896a42828 Mon Sep 17 00:00:00 2001 From: teoxoy <28601907+teoxoy@users.noreply.github.com> Date: Fri, 19 Jan 2024 21:23:55 +0100 Subject: [PATCH 2/3] add test --- tests/tests/root.rs | 1 + tests/tests/texture_view_creation.rs | 60 ++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 tests/tests/texture_view_creation.rs diff --git a/tests/tests/root.rs b/tests/tests/root.rs index e3f116b0c7..f886c0f9eb 100644 --- a/tests/tests/root.rs +++ b/tests/tests/root.rs @@ -34,6 +34,7 @@ mod shader; mod shader_primitive_index; mod shader_view_format; mod texture_bounds; +mod texture_view_creation; mod transfer; mod vertex_indices; mod write_texture; diff --git a/tests/tests/texture_view_creation.rs b/tests/tests/texture_view_creation.rs new file mode 100644 index 0000000000..f895e8ac3e --- /dev/null +++ b/tests/tests/texture_view_creation.rs @@ -0,0 +1,60 @@ +use wgpu::*; +use wgpu_test::{gpu_test, GpuTestConfiguration}; + +#[gpu_test] +static STENCIL_ONLY_VIEW_CREATION: GpuTestConfiguration = + GpuTestConfiguration::new().run_async(|ctx| async move { + for format in [TextureFormat::Stencil8, TextureFormat::Depth24PlusStencil8] { + let texture = ctx.device.create_texture(&TextureDescriptor { + label: None, + size: Extent3d { + width: 256, + height: 256, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: TextureDimension::D2, + format, + usage: TextureUsages::COPY_DST + | TextureUsages::COPY_SRC + | TextureUsages::TEXTURE_BINDING, + view_formats: &[], + }); + let _view = texture.create_view(&TextureViewDescriptor { + aspect: TextureAspect::StencilOnly, + ..Default::default() + }); + } + }); + +#[gpu_test] +static DEPTH_ONLY_VIEW_CREATION: GpuTestConfiguration = + GpuTestConfiguration::new().run_async(|ctx| async move { + for format in [ + TextureFormat::Depth16Unorm, + TextureFormat::Depth24Plus, + TextureFormat::Depth24PlusStencil8, + ] { + let texture = ctx.device.create_texture(&TextureDescriptor { + label: None, + size: Extent3d { + width: 256, + height: 256, + depth_or_array_layers: 1, + }, + mip_level_count: 1, + sample_count: 1, + dimension: TextureDimension::D2, + format, + usage: TextureUsages::COPY_DST + | TextureUsages::COPY_SRC + | TextureUsages::TEXTURE_BINDING, + view_formats: &[], + }); + let _view = texture.create_view(&TextureViewDescriptor { + aspect: TextureAspect::DepthOnly, + ..Default::default() + }); + } + }); From ac9a3a69dffeb19e8ca998bb01ab93d7ffbda8c7 Mon Sep 17 00:00:00 2001 From: teoxoy <28601907+teoxoy@users.noreply.github.com> Date: Fri, 19 Jan 2024 21:57:28 +0100 Subject: [PATCH 3/3] skip stencil only view creation on WebGL --- tests/tests/texture_view_creation.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/tests/texture_view_creation.rs b/tests/tests/texture_view_creation.rs index f895e8ac3e..eeede4c26f 100644 --- a/tests/tests/texture_view_creation.rs +++ b/tests/tests/texture_view_creation.rs @@ -1,9 +1,14 @@ use wgpu::*; -use wgpu_test::{gpu_test, GpuTestConfiguration}; +use wgpu_test::{gpu_test, FailureCase, GpuTestConfiguration, TestParameters}; #[gpu_test] -static STENCIL_ONLY_VIEW_CREATION: GpuTestConfiguration = - GpuTestConfiguration::new().run_async(|ctx| async move { +static STENCIL_ONLY_VIEW_CREATION: GpuTestConfiguration = GpuTestConfiguration::new() + .parameters( + TestParameters::default() + .skip(FailureCase::webgl2()) // WebGL doesn't have stencil only views + .limits(wgpu::Limits::downlevel_defaults()), + ) + .run_async(|ctx| async move { for format in [TextureFormat::Stencil8, TextureFormat::Depth24PlusStencil8] { let texture = ctx.device.create_texture(&TextureDescriptor { label: None,