Fix bugs about TextureViewDesc's default values

TextureViewDescriptor's default values for dimension and
arrayLayerCount in Dawn are not correct according to WebGPU spec.
This change fixes these bugs.

Bug: dawn:760
Change-Id: Ic1d069838d6c0f7bb1afa1dceaf73e91bdfdb20a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/58020
Commit-Queue: Yunchao He <yunchao.he@intel.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
This commit is contained in:
Yunchao He
2021-07-15 18:33:48 +00:00
committed by Dawn LUCI CQ
parent 5cbb168bbc
commit 37140e7c62
5 changed files with 75 additions and 27 deletions

View File

@@ -559,7 +559,9 @@ namespace {
wgpu::Texture resolveTexture =
CreateTexture(device, wgpu::TextureDimension::e2D, kColorFormat, kSize, kSize,
kArrayLayers2, kLevelCount);
wgpu::TextureView resolveTextureView = resolveTexture.CreateView();
wgpu::TextureViewDescriptor viewDesc;
viewDesc.dimension = wgpu::TextureViewDimension::e2DArray;
wgpu::TextureView resolveTextureView = resolveTexture.CreateView(&viewDesc);
utils::ComboRenderPassDescriptor renderPass = CreateMultisampledRenderPass();
renderPass.cColorAttachments[0].resolveTarget = resolveTextureView;

View File

@@ -288,7 +288,7 @@ namespace {
// specifying the values they're supposed to default to.
// Variant for a 2D texture with more than 1 array layer.
TEST_F(TextureViewValidationTest, TextureViewDescriptorDefaults2DArray) {
constexpr uint32_t kDefaultArrayLayers = 6;
constexpr uint32_t kDefaultArrayLayers = 8;
wgpu::Texture texture = Create2DArrayTexture(device, kDefaultArrayLayers);
{ texture.CreateView(); }
@@ -307,7 +307,25 @@ namespace {
texture.CreateView(&descriptor);
descriptor.dimension = wgpu::TextureViewDimension::e2DArray;
texture.CreateView(&descriptor);
// Setting view dimension to 2D, its arrayLayer will default to 1. And view creation
// will success.
descriptor.dimension = wgpu::TextureViewDimension::e2D;
texture.CreateView(&descriptor);
// Setting view dimension to Cube, its arrayLayer will default to 6.
descriptor.dimension = wgpu::TextureViewDimension::Cube;
texture.CreateView(&descriptor);
descriptor.baseArrayLayer = 2;
texture.CreateView(&descriptor);
descriptor.baseArrayLayer = 3;
ASSERT_DEVICE_ERROR(texture.CreateView(&descriptor));
// Setting view dimension to CubeArray, its arrayLayer will default to
// size.depthOrArrayLayers (kDefaultArrayLayers) - baseArrayLayer.
descriptor.dimension = wgpu::TextureViewDimension::CubeArray;
descriptor.baseArrayLayer = 0;
ASSERT_DEVICE_ERROR(texture.CreateView(&descriptor));
descriptor.baseArrayLayer = 2;
texture.CreateView(&descriptor);
descriptor.baseArrayLayer = 3;
ASSERT_DEVICE_ERROR(texture.CreateView(&descriptor));
}
{