mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-17 00:47:13 +00:00
Add validation on the creation of 4x Multisampled textures
This patch adds validations on the creation of the multisampled textures with sampleCount == 4. The validations include: 1. Only accept 1 or 4 as valid value of sampleCount. 2. According to Vulkan SPEC, when sampleCount > 1: - The value of mipLevelCount can only be 1 - We cannot create cube map or cube map array texture views on this texture. BUG=dawn:56 TEST=dawn_unittests Change-Id: Iac7cbe7cd7af16216b9185afd37a80eef0712f6b Reviewed-on: https://dawn-review.googlesource.com/c/5160 Commit-Queue: Jiawei Shao <jiawei.shao@intel.com> Reviewed-by: Kai Ninomiya <kainino@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
1c92c159ad
commit
a8ce0a434e
@@ -56,6 +56,14 @@ TEST_F(TextureValidationTest, SampleCount) {
|
||||
device.CreateTexture(&descriptor);
|
||||
}
|
||||
|
||||
// sampleCount == 4 is allowed.
|
||||
{
|
||||
dawn::TextureDescriptor descriptor = defaultDescriptor;
|
||||
descriptor.sampleCount = 4;
|
||||
|
||||
device.CreateTexture(&descriptor);
|
||||
}
|
||||
|
||||
// It is an error to create a texture with an invalid sampleCount.
|
||||
{
|
||||
dawn::TextureDescriptor descriptor = defaultDescriptor;
|
||||
@@ -63,5 +71,14 @@ TEST_F(TextureValidationTest, SampleCount) {
|
||||
|
||||
ASSERT_DEVICE_ERROR(device.CreateTexture(&descriptor));
|
||||
}
|
||||
|
||||
// It is an error to create a multisampled texture with mipLevelCount > 1.
|
||||
{
|
||||
dawn::TextureDescriptor descriptor = defaultDescriptor;
|
||||
descriptor.sampleCount = 4;
|
||||
descriptor.mipLevelCount = 2;
|
||||
|
||||
ASSERT_DEVICE_ERROR(device.CreateTexture(&descriptor));
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
@@ -28,16 +28,18 @@ constexpr dawn::TextureFormat kDefaultTextureFormat = dawn::TextureFormat::R8G8B
|
||||
dawn::Texture Create2DArrayTexture(dawn::Device& device,
|
||||
uint32_t arrayLayerCount,
|
||||
uint32_t width = kWidth,
|
||||
uint32_t height = kHeight) {
|
||||
uint32_t height = kHeight,
|
||||
uint32_t mipLevelCount = kDefaultMipLevels,
|
||||
uint32_t sampleCount = 1) {
|
||||
dawn::TextureDescriptor descriptor;
|
||||
descriptor.dimension = dawn::TextureDimension::e2D;
|
||||
descriptor.size.width = width;
|
||||
descriptor.size.height = height;
|
||||
descriptor.size.depth = 1;
|
||||
descriptor.arrayLayerCount = arrayLayerCount;
|
||||
descriptor.sampleCount = 1;
|
||||
descriptor.sampleCount = sampleCount;
|
||||
descriptor.format = kDefaultTextureFormat;
|
||||
descriptor.mipLevelCount = kDefaultMipLevels;
|
||||
descriptor.mipLevelCount = mipLevelCount;
|
||||
descriptor.usage = dawn::TextureUsageBit::Sampled;
|
||||
return device.CreateTexture(&descriptor);
|
||||
}
|
||||
@@ -198,6 +200,30 @@ TEST_F(TextureViewValidationTest, CreateCubeMapTextureView) {
|
||||
descriptor.arrayLayerCount = 12;
|
||||
ASSERT_DEVICE_ERROR(nonSquareTexture.CreateTextureView(&descriptor));
|
||||
}
|
||||
|
||||
// It is an error to create a cube map texture view on a multisampled texture.
|
||||
{
|
||||
constexpr uint32_t kSampleCount = 4;
|
||||
dawn::Texture multisampledTexture = Create2DArrayTexture(device, kDefaultArrayLayers,
|
||||
kWidth, kHeight, 1, kSampleCount);
|
||||
dawn::TextureViewDescriptor descriptor = base2DArrayTextureViewDescriptor;
|
||||
descriptor.dimension = dawn::TextureViewDimension::Cube;
|
||||
descriptor.arrayLayerCount = 6;
|
||||
descriptor.mipLevelCount = 1;
|
||||
ASSERT_DEVICE_ERROR(multisampledTexture.CreateTextureView(&descriptor));
|
||||
}
|
||||
|
||||
// It is an error to create a cube map array texture view on a multisampled texture.
|
||||
{
|
||||
constexpr uint32_t kSampleCount = 4;
|
||||
dawn::Texture multisampledTexture = Create2DArrayTexture(device, kDefaultArrayLayers,
|
||||
kWidth, kHeight, 1, kSampleCount);
|
||||
dawn::TextureViewDescriptor descriptor = base2DArrayTextureViewDescriptor;
|
||||
descriptor.dimension = dawn::TextureViewDimension::CubeArray;
|
||||
descriptor.arrayLayerCount = 12;
|
||||
descriptor.mipLevelCount = 1;
|
||||
ASSERT_DEVICE_ERROR(multisampledTexture.CreateTextureView(&descriptor));
|
||||
}
|
||||
}
|
||||
|
||||
// Test the format compatibility rules when creating a texture view.
|
||||
|
||||
Reference in New Issue
Block a user