dawn-cmake/src/tests/unittests/validation/SamplerValidationTests.cpp
shrekshao b3177d418e Make SamplerDescriptor optional in CreateSampler
Use default SamplerDescriptor if not descriptor is passed in.
Change some createSampler calls to pass nothing in for testing.
The default values for SamplerDescriptor and that from
utils::GetDefaultSamplerDescriptor are different so we may still want to
keep it.

Bug: dawn:599
Change-Id: Ie75d9e1fde608cb19049b50f4613be63802c8719
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/38621
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Shrek Shao <shrekshao@google.com>
2021-01-26 02:22:58 +00:00

128 lines
5.0 KiB
C++

// Copyright 2019 The Dawn Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "tests/unittests/validation/ValidationTest.h"
#include "utils/WGPUHelpers.h"
#include <cmath>
namespace {
class SamplerValidationTest : public ValidationTest {};
// Test NaN and INFINITY values are not allowed
TEST_F(SamplerValidationTest, InvalidLOD) {
{
wgpu::SamplerDescriptor samplerDesc = utils::GetDefaultSamplerDescriptor();
device.CreateSampler(&samplerDesc);
}
{
wgpu::SamplerDescriptor samplerDesc = utils::GetDefaultSamplerDescriptor();
samplerDesc.lodMinClamp = NAN;
ASSERT_DEVICE_ERROR(device.CreateSampler(&samplerDesc));
}
{
wgpu::SamplerDescriptor samplerDesc = utils::GetDefaultSamplerDescriptor();
samplerDesc.lodMaxClamp = NAN;
ASSERT_DEVICE_ERROR(device.CreateSampler(&samplerDesc));
}
{
wgpu::SamplerDescriptor samplerDesc = utils::GetDefaultSamplerDescriptor();
samplerDesc.lodMaxClamp = INFINITY;
device.CreateSampler(&samplerDesc);
}
{
wgpu::SamplerDescriptor samplerDesc = utils::GetDefaultSamplerDescriptor();
samplerDesc.lodMaxClamp = INFINITY;
samplerDesc.lodMinClamp = INFINITY;
device.CreateSampler(&samplerDesc);
}
}
TEST_F(SamplerValidationTest, InvalidFilterAnisotropic) {
wgpu::SamplerDescriptor kValidAnisoSamplerDesc = {};
kValidAnisoSamplerDesc.maxAnisotropy = 2;
kValidAnisoSamplerDesc.minFilter = wgpu::FilterMode::Linear;
kValidAnisoSamplerDesc.magFilter = wgpu::FilterMode::Linear;
kValidAnisoSamplerDesc.mipmapFilter = wgpu::FilterMode::Linear;
{
// when maxAnisotropy > 1, min, mag, mipmap filter should be linear
device.CreateSampler(&kValidAnisoSamplerDesc);
}
{
wgpu::SamplerDescriptor samplerDesc = kValidAnisoSamplerDesc;
samplerDesc.maxAnisotropy = 0;
ASSERT_DEVICE_ERROR(device.CreateSampler(&samplerDesc));
}
{
wgpu::SamplerDescriptor samplerDesc = kValidAnisoSamplerDesc;
samplerDesc.minFilter = wgpu::FilterMode::Nearest;
samplerDesc.magFilter = wgpu::FilterMode::Nearest;
samplerDesc.mipmapFilter = wgpu::FilterMode::Nearest;
ASSERT_DEVICE_ERROR(device.CreateSampler(&samplerDesc));
}
{
wgpu::SamplerDescriptor samplerDesc = kValidAnisoSamplerDesc;
samplerDesc.minFilter = wgpu::FilterMode::Nearest;
ASSERT_DEVICE_ERROR(device.CreateSampler(&samplerDesc));
}
{
wgpu::SamplerDescriptor samplerDesc = kValidAnisoSamplerDesc;
samplerDesc.magFilter = wgpu::FilterMode::Nearest;
ASSERT_DEVICE_ERROR(device.CreateSampler(&samplerDesc));
}
{
wgpu::SamplerDescriptor samplerDesc = kValidAnisoSamplerDesc;
samplerDesc.mipmapFilter = wgpu::FilterMode::Nearest;
ASSERT_DEVICE_ERROR(device.CreateSampler(&samplerDesc));
}
}
TEST_F(SamplerValidationTest, ValidFilterAnisotropic) {
wgpu::SamplerDescriptor kValidAnisoSamplerDesc = {};
kValidAnisoSamplerDesc.maxAnisotropy = 2;
kValidAnisoSamplerDesc.minFilter = wgpu::FilterMode::Linear;
kValidAnisoSamplerDesc.magFilter = wgpu::FilterMode::Linear;
kValidAnisoSamplerDesc.mipmapFilter = wgpu::FilterMode::Linear;
{ device.CreateSampler(); }
{
wgpu::SamplerDescriptor samplerDesc = kValidAnisoSamplerDesc;
samplerDesc.maxAnisotropy = 16;
device.CreateSampler(&samplerDesc);
}
{
wgpu::SamplerDescriptor samplerDesc = kValidAnisoSamplerDesc;
samplerDesc.maxAnisotropy = 32;
device.CreateSampler(&samplerDesc);
}
{
wgpu::SamplerDescriptor samplerDesc = kValidAnisoSamplerDesc;
samplerDesc.maxAnisotropy = 0x7FFF;
device.CreateSampler(&samplerDesc);
}
{
wgpu::SamplerDescriptor samplerDesc = kValidAnisoSamplerDesc;
samplerDesc.maxAnisotropy = 0x8000;
device.CreateSampler(&samplerDesc);
}
{
wgpu::SamplerDescriptor samplerDesc = kValidAnisoSamplerDesc;
samplerDesc.maxAnisotropy = 0xFFFF;
device.CreateSampler(&samplerDesc);
}
}
} // anonymous namespace