mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-05-15 03:41:34 +00:00
Support enabling/disabling toggles in unittests
Refactors support for toggle control flags, --enable-toggles= & --disable-toggles, from the end2end tests into a utility class to make them available elsewhere. The unittests now uses this utility class to parse toggle control flags. For some toggles, like 'use_tint_generator', the unittests are known to be broken with them turned on. They will be fixed in subsequent CLs. BUG=dawn:756 Change-Id: Ic283e8a82bedcbf255258cca3e62f58c79d3857b Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/47740 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org> Auto-Submit: Ryan Harrison <rharrison@chromium.org>
This commit is contained in:
parent
f7d01e07cd
commit
acdc35dc39
@ -151,6 +151,8 @@ test("dawn_unittests") {
|
|||||||
"${dawn_root}/src/dawn_wire/server/ServerMemoryTransferService_mock.cpp",
|
"${dawn_root}/src/dawn_wire/server/ServerMemoryTransferService_mock.cpp",
|
||||||
"${dawn_root}/src/dawn_wire/server/ServerMemoryTransferService_mock.h",
|
"${dawn_root}/src/dawn_wire/server/ServerMemoryTransferService_mock.h",
|
||||||
"MockCallback.h",
|
"MockCallback.h",
|
||||||
|
"ToggleParser.cpp",
|
||||||
|
"ToggleParser.h",
|
||||||
"unittests/BitSetIteratorTests.cpp",
|
"unittests/BitSetIteratorTests.cpp",
|
||||||
"unittests/BuddyAllocatorTests.cpp",
|
"unittests/BuddyAllocatorTests.cpp",
|
||||||
"unittests/BuddyMemoryAllocatorTests.cpp",
|
"unittests/BuddyMemoryAllocatorTests.cpp",
|
||||||
@ -280,6 +282,8 @@ source_set("dawn_end2end_tests_sources") {
|
|||||||
sources = [
|
sources = [
|
||||||
"DawnTest.h",
|
"DawnTest.h",
|
||||||
"MockCallback.h",
|
"MockCallback.h",
|
||||||
|
"ToggleParser.cpp",
|
||||||
|
"ToggleParser.h",
|
||||||
"end2end/BasicTests.cpp",
|
"end2end/BasicTests.cpp",
|
||||||
"end2end/BindGroupTests.cpp",
|
"end2end/BindGroupTests.cpp",
|
||||||
"end2end/BufferTests.cpp",
|
"end2end/BufferTests.cpp",
|
||||||
@ -404,7 +408,10 @@ source_set("dawn_white_box_tests_sources") {
|
|||||||
"${dawn_root}/src/utils:dawn_utils",
|
"${dawn_root}/src/utils:dawn_utils",
|
||||||
]
|
]
|
||||||
|
|
||||||
sources = [ "DawnTest.h" ]
|
sources = [
|
||||||
|
"DawnTest.h",
|
||||||
|
"ToggleParser.h",
|
||||||
|
]
|
||||||
|
|
||||||
if (dawn_enable_vulkan) {
|
if (dawn_enable_vulkan) {
|
||||||
deps += [ "${dawn_root}/third_party/khronos:vulkan_headers" ]
|
deps += [ "${dawn_root}/third_party/khronos:vulkan_headers" ]
|
||||||
@ -505,6 +512,8 @@ test("dawn_perf_tests") {
|
|||||||
"DawnTest.cpp",
|
"DawnTest.cpp",
|
||||||
"DawnTest.h",
|
"DawnTest.h",
|
||||||
"ParamGenerator.h",
|
"ParamGenerator.h",
|
||||||
|
"ToggleParser.cpp",
|
||||||
|
"ToggleParser.h",
|
||||||
"perf_tests/BufferUploadPerf.cpp",
|
"perf_tests/BufferUploadPerf.cpp",
|
||||||
"perf_tests/DawnPerfTest.cpp",
|
"perf_tests/DawnPerfTest.cpp",
|
||||||
"perf_tests/DawnPerfTest.h",
|
"perf_tests/DawnPerfTest.h",
|
||||||
|
@ -265,25 +265,11 @@ void DawnTestEnvironment::ParseArgs(int argc, char** argv) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr const char kEnableTogglesSwitch[] = "--enable-toggles=";
|
if (mToggleParser.ParseEnabledToggles(argv[i])) {
|
||||||
argLen = sizeof(kEnableTogglesSwitch) - 1;
|
|
||||||
if (strncmp(argv[i], kEnableTogglesSwitch, argLen) == 0) {
|
|
||||||
std::string toggle;
|
|
||||||
std::stringstream toggles(argv[i] + argLen);
|
|
||||||
while (getline(toggles, toggle, ',')) {
|
|
||||||
mEnabledToggles.push_back(toggle);
|
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr const char kDisableTogglesSwitch[] = "--disable-toggles=";
|
if (mToggleParser.ParseDisabledToggles(argv[i])) {
|
||||||
argLen = sizeof(kDisableTogglesSwitch) - 1;
|
|
||||||
if (strncmp(argv[i], kDisableTogglesSwitch, argLen) == 0) {
|
|
||||||
std::string toggle;
|
|
||||||
std::stringstream toggles(argv[i] + argLen);
|
|
||||||
while (getline(toggles, toggle, ',')) {
|
|
||||||
mDisabledToggles.push_back(toggle);
|
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -667,11 +653,11 @@ const char* DawnTestEnvironment::GetWireTraceDir() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<std::string>& DawnTestEnvironment::GetEnabledToggles() const {
|
const std::vector<std::string>& DawnTestEnvironment::GetEnabledToggles() const {
|
||||||
return mEnabledToggles;
|
return mToggleParser.GetEnabledToggles();
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<std::string>& DawnTestEnvironment::GetDisabledToggles() const {
|
const std::vector<std::string>& DawnTestEnvironment::GetDisabledToggles() const {
|
||||||
return mDisabledToggles;
|
return mToggleParser.GetDisabledToggles();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implementation of DawnTest
|
// Implementation of DawnTest
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "dawn/dawn_proc_table.h"
|
#include "dawn/dawn_proc_table.h"
|
||||||
#include "dawn/webgpu_cpp.h"
|
#include "dawn/webgpu_cpp.h"
|
||||||
#include "dawn_native/DawnNative.h"
|
#include "dawn_native/DawnNative.h"
|
||||||
|
#include "tests/ToggleParser.h"
|
||||||
|
|
||||||
#include <dawn_platform/DawnPlatform.h>
|
#include <dawn_platform/DawnPlatform.h>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
@ -232,8 +233,8 @@ class DawnTestEnvironment : public testing::Environment {
|
|||||||
wgpu::BackendType mBackendTypeFilter;
|
wgpu::BackendType mBackendTypeFilter;
|
||||||
std::string mWireTraceDir;
|
std::string mWireTraceDir;
|
||||||
|
|
||||||
std::vector<std::string> mEnabledToggles;
|
ToggleParser mToggleParser;
|
||||||
std::vector<std::string> mDisabledToggles;
|
|
||||||
std::vector<dawn_native::DeviceType> mDevicePreferences;
|
std::vector<dawn_native::DeviceType> mDevicePreferences;
|
||||||
std::vector<TestAdapterProperties> mAdapterProperties;
|
std::vector<TestAdapterProperties> mAdapterProperties;
|
||||||
|
|
||||||
|
57
src/tests/ToggleParser.cpp
Normal file
57
src/tests/ToggleParser.cpp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
// Copyright 2021 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/ToggleParser.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
ToggleParser::ToggleParser() = default;
|
||||||
|
ToggleParser::~ToggleParser() = default;
|
||||||
|
|
||||||
|
bool ToggleParser::ParseEnabledToggles(char* arg) {
|
||||||
|
constexpr const char kEnableTogglesSwitch[] = "--enable-toggles=";
|
||||||
|
size_t argLen = sizeof(kEnableTogglesSwitch) - 1;
|
||||||
|
if (strncmp(arg, kEnableTogglesSwitch, argLen) == 0) {
|
||||||
|
std::string toggle;
|
||||||
|
std::stringstream toggles(arg + argLen);
|
||||||
|
while (getline(toggles, toggle, ',')) {
|
||||||
|
mEnabledToggles.push_back(toggle);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ToggleParser::ParseDisabledToggles(char* arg) {
|
||||||
|
constexpr const char kDisableTogglesSwitch[] = "--disable-toggles=";
|
||||||
|
size_t argLDis = sizeof(kDisableTogglesSwitch) - 1;
|
||||||
|
if (strncmp(arg, kDisableTogglesSwitch, argLDis) == 0) {
|
||||||
|
std::string toggle;
|
||||||
|
std::stringstream toggles(arg + argLDis);
|
||||||
|
while (getline(toggles, toggle, ',')) {
|
||||||
|
mDisabledToggles.push_back(toggle);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::vector<std::string>& ToggleParser::GetEnabledToggles() const {
|
||||||
|
return mEnabledToggles;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::vector<std::string>& ToggleParser::GetDisabledToggles() const {
|
||||||
|
return mDisabledToggles;
|
||||||
|
}
|
37
src/tests/ToggleParser.h
Normal file
37
src/tests/ToggleParser.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// Copyright 2021 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.
|
||||||
|
|
||||||
|
#ifndef TESTS_TOGGLEPARSER_H_
|
||||||
|
#define TESTS_TOGGLEPARSER_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class ToggleParser {
|
||||||
|
public:
|
||||||
|
ToggleParser();
|
||||||
|
~ToggleParser();
|
||||||
|
|
||||||
|
bool ParseEnabledToggles(char* arg);
|
||||||
|
bool ParseDisabledToggles(char* arg);
|
||||||
|
|
||||||
|
const std::vector<std::string>& GetEnabledToggles() const;
|
||||||
|
const std::vector<std::string>& GetDisabledToggles() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<std::string> mEnabledToggles;
|
||||||
|
std::vector<std::string> mDisabledToggles;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TESTS_TOGGLEPARSER_H_
|
@ -1772,6 +1772,8 @@ TEST_F(BindGroupLayoutCompatibilityTest, RWStorageInBGLWithROStorageInShader) {
|
|||||||
// Test that it is invalid to pass a readonly storage buffer in the pipeline layout when the shader
|
// Test that it is invalid to pass a readonly storage buffer in the pipeline layout when the shader
|
||||||
// uses the binding as a writable storage buffer.
|
// uses the binding as a writable storage buffer.
|
||||||
TEST_F(BindGroupLayoutCompatibilityTest, ROStorageInBGLWithRWStorageInShader) {
|
TEST_F(BindGroupLayoutCompatibilityTest, ROStorageInBGLWithRWStorageInShader) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// Set up the bind group layout.
|
// Set up the bind group layout.
|
||||||
wgpu::BindGroupLayout bgl0 = utils::MakeBindGroupLayout(
|
wgpu::BindGroupLayout bgl0 = utils::MakeBindGroupLayout(
|
||||||
device, {{0, wgpu::ShaderStage::Compute | wgpu::ShaderStage::Fragment,
|
device, {{0, wgpu::ShaderStage::Compute | wgpu::ShaderStage::Fragment,
|
||||||
@ -1786,6 +1788,8 @@ TEST_F(BindGroupLayoutCompatibilityTest, ROStorageInBGLWithRWStorageInShader) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(BindGroupLayoutCompatibilityTest, TextureViewDimension) {
|
TEST_F(BindGroupLayoutCompatibilityTest, TextureViewDimension) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
constexpr char kTexture2DShaderFS[] = R"(
|
constexpr char kTexture2DShaderFS[] = R"(
|
||||||
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
|
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
|
||||||
[[stage(fragment)]] fn main() {
|
[[stage(fragment)]] fn main() {
|
||||||
@ -1929,6 +1933,8 @@ TEST_F(BindingsValidationTest, PipelineLayoutWithMoreBindingsThanPipeline) {
|
|||||||
// Test that it is invalid to set a pipeline layout that doesn't have all necessary bindings
|
// Test that it is invalid to set a pipeline layout that doesn't have all necessary bindings
|
||||||
// required by the pipeline.
|
// required by the pipeline.
|
||||||
TEST_F(BindingsValidationTest, PipelineLayoutWithLessBindingsThanPipeline) {
|
TEST_F(BindingsValidationTest, PipelineLayoutWithLessBindingsThanPipeline) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// Set up bind group layout.
|
// Set up bind group layout.
|
||||||
wgpu::BindGroupLayout bgl0 = utils::MakeBindGroupLayout(
|
wgpu::BindGroupLayout bgl0 = utils::MakeBindGroupLayout(
|
||||||
device, {{0, wgpu::ShaderStage::Compute | wgpu::ShaderStage::Fragment,
|
device, {{0, wgpu::ShaderStage::Compute | wgpu::ShaderStage::Fragment,
|
||||||
|
@ -38,6 +38,8 @@ class GetBindGroupLayoutTests : public ValidationTest {
|
|||||||
// Test that GetBindGroupLayout returns the same object for the same index
|
// Test that GetBindGroupLayout returns the same object for the same index
|
||||||
// and for matching layouts.
|
// and for matching layouts.
|
||||||
TEST_F(GetBindGroupLayoutTests, SameObject) {
|
TEST_F(GetBindGroupLayoutTests, SameObject) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// This test works assuming Dawn Native's object deduplication.
|
// This test works assuming Dawn Native's object deduplication.
|
||||||
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
||||||
// Native.
|
// Native.
|
||||||
@ -91,6 +93,8 @@ TEST_F(GetBindGroupLayoutTests, SameObject) {
|
|||||||
// - shader stage visibility is the stage that adds the binding.
|
// - shader stage visibility is the stage that adds the binding.
|
||||||
// - dynamic offsets is false
|
// - dynamic offsets is false
|
||||||
TEST_F(GetBindGroupLayoutTests, DefaultShaderStageAndDynamicOffsets) {
|
TEST_F(GetBindGroupLayoutTests, DefaultShaderStageAndDynamicOffsets) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// This test works assuming Dawn Native's object deduplication.
|
// This test works assuming Dawn Native's object deduplication.
|
||||||
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
||||||
// Native.
|
// Native.
|
||||||
@ -134,6 +138,8 @@ TEST_F(GetBindGroupLayoutTests, DefaultShaderStageAndDynamicOffsets) {
|
|||||||
|
|
||||||
// Test GetBindGroupLayout works with a compute pipeline
|
// Test GetBindGroupLayout works with a compute pipeline
|
||||||
TEST_F(GetBindGroupLayoutTests, ComputePipeline) {
|
TEST_F(GetBindGroupLayoutTests, ComputePipeline) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// This test works assuming Dawn Native's object deduplication.
|
// This test works assuming Dawn Native's object deduplication.
|
||||||
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
||||||
// Native.
|
// Native.
|
||||||
@ -171,6 +177,8 @@ TEST_F(GetBindGroupLayoutTests, ComputePipeline) {
|
|||||||
|
|
||||||
// Test that the binding type matches the shader.
|
// Test that the binding type matches the shader.
|
||||||
TEST_F(GetBindGroupLayoutTests, BindingType) {
|
TEST_F(GetBindGroupLayoutTests, BindingType) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// This test works assuming Dawn Native's object deduplication.
|
// This test works assuming Dawn Native's object deduplication.
|
||||||
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
||||||
// Native.
|
// Native.
|
||||||
@ -262,6 +270,8 @@ TEST_F(GetBindGroupLayoutTests, BindingType) {
|
|||||||
|
|
||||||
// Test that texture view dimension matches the shader.
|
// Test that texture view dimension matches the shader.
|
||||||
TEST_F(GetBindGroupLayoutTests, ViewDimension) {
|
TEST_F(GetBindGroupLayoutTests, ViewDimension) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// This test works assuming Dawn Native's object deduplication.
|
// This test works assuming Dawn Native's object deduplication.
|
||||||
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
||||||
// Native.
|
// Native.
|
||||||
@ -339,6 +349,8 @@ TEST_F(GetBindGroupLayoutTests, ViewDimension) {
|
|||||||
|
|
||||||
// Test that texture component type matches the shader.
|
// Test that texture component type matches the shader.
|
||||||
TEST_F(GetBindGroupLayoutTests, TextureComponentType) {
|
TEST_F(GetBindGroupLayoutTests, TextureComponentType) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// This test works assuming Dawn Native's object deduplication.
|
// This test works assuming Dawn Native's object deduplication.
|
||||||
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
||||||
// Native.
|
// Native.
|
||||||
@ -385,6 +397,8 @@ TEST_F(GetBindGroupLayoutTests, TextureComponentType) {
|
|||||||
|
|
||||||
// Test that binding= indices match.
|
// Test that binding= indices match.
|
||||||
TEST_F(GetBindGroupLayoutTests, BindingIndices) {
|
TEST_F(GetBindGroupLayoutTests, BindingIndices) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// This test works assuming Dawn Native's object deduplication.
|
// This test works assuming Dawn Native's object deduplication.
|
||||||
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
||||||
// Native.
|
// Native.
|
||||||
@ -471,6 +485,8 @@ TEST_F(GetBindGroupLayoutTests, DuplicateBinding) {
|
|||||||
|
|
||||||
// Test that minBufferSize is set on the BGL and that the max of the min buffer sizes is used.
|
// Test that minBufferSize is set on the BGL and that the max of the min buffer sizes is used.
|
||||||
TEST_F(GetBindGroupLayoutTests, MinBufferSize) {
|
TEST_F(GetBindGroupLayoutTests, MinBufferSize) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// This test works assuming Dawn Native's object deduplication.
|
// This test works assuming Dawn Native's object deduplication.
|
||||||
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
||||||
// Native.
|
// Native.
|
||||||
@ -557,6 +573,8 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) {
|
|||||||
|
|
||||||
// Test that the visibility is correctly aggregated if two stages have the exact same binding.
|
// Test that the visibility is correctly aggregated if two stages have the exact same binding.
|
||||||
TEST_F(GetBindGroupLayoutTests, StageAggregation) {
|
TEST_F(GetBindGroupLayoutTests, StageAggregation) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// This test works assuming Dawn Native's object deduplication.
|
// This test works assuming Dawn Native's object deduplication.
|
||||||
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
||||||
// Native.
|
// Native.
|
||||||
@ -625,6 +643,8 @@ TEST_F(GetBindGroupLayoutTests, StageAggregation) {
|
|||||||
|
|
||||||
// Test it is invalid to have conflicting binding types in the shaders.
|
// Test it is invalid to have conflicting binding types in the shaders.
|
||||||
TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) {
|
TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
|
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
|
||||||
[[block]] struct S {
|
[[block]] struct S {
|
||||||
pos : vec4<f32>;
|
pos : vec4<f32>;
|
||||||
@ -653,6 +673,8 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) {
|
|||||||
|
|
||||||
// Test it is invalid to have conflicting binding texture multisampling in the shaders.
|
// Test it is invalid to have conflicting binding texture multisampling in the shaders.
|
||||||
TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureMultisampling) {
|
TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureMultisampling) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
|
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
|
||||||
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
|
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
|
||||||
|
|
||||||
@ -675,6 +697,8 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureMultisampling) {
|
|||||||
|
|
||||||
// Test it is invalid to have conflicting binding texture dimension in the shaders.
|
// Test it is invalid to have conflicting binding texture dimension in the shaders.
|
||||||
TEST_F(GetBindGroupLayoutTests, ConflictingBindingViewDimension) {
|
TEST_F(GetBindGroupLayoutTests, ConflictingBindingViewDimension) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
|
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
|
||||||
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
|
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
|
||||||
|
|
||||||
@ -697,6 +721,8 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingViewDimension) {
|
|||||||
|
|
||||||
// Test it is invalid to have conflicting binding texture component type in the shaders.
|
// Test it is invalid to have conflicting binding texture component type in the shaders.
|
||||||
TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureComponentType) {
|
TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureComponentType) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
|
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
|
||||||
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
|
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
|
||||||
|
|
||||||
@ -732,6 +758,8 @@ TEST_F(GetBindGroupLayoutTests, OutOfRangeIndex) {
|
|||||||
|
|
||||||
// Test that unused indices return the empty bind group layout.
|
// Test that unused indices return the empty bind group layout.
|
||||||
TEST_F(GetBindGroupLayoutTests, UnusedIndex) {
|
TEST_F(GetBindGroupLayoutTests, UnusedIndex) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// This test works assuming Dawn Native's object deduplication.
|
// This test works assuming Dawn Native's object deduplication.
|
||||||
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
// Getting the same pointer to equivalent bind group layouts is an implementation detail of Dawn
|
||||||
// Native.
|
// Native.
|
||||||
|
@ -315,6 +315,8 @@ TEST_F(MinBufferSizePipelineCreationTests, ZeroMinBufferSize) {
|
|||||||
|
|
||||||
// Fail if layout given has non-zero minimum sizes smaller than shader requirements
|
// Fail if layout given has non-zero minimum sizes smaller than shader requirements
|
||||||
TEST_F(MinBufferSizePipelineCreationTests, LayoutSizesTooSmall) {
|
TEST_F(MinBufferSizePipelineCreationTests, LayoutSizesTooSmall) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
std::vector<BindingDescriptor> bindings = {{0, 0, "a : f32; b : f32;", 8},
|
std::vector<BindingDescriptor> bindings = {{0, 0, "a : f32; b : f32;", 8},
|
||||||
{0, 1, "c : f32;", 4}};
|
{0, 1, "c : f32;", 4}};
|
||||||
|
|
||||||
@ -336,6 +338,8 @@ TEST_F(MinBufferSizePipelineCreationTests, LayoutSizesTooSmall) {
|
|||||||
|
|
||||||
// Fail if layout given has non-zero minimum sizes smaller than shader requirements
|
// Fail if layout given has non-zero minimum sizes smaller than shader requirements
|
||||||
TEST_F(MinBufferSizePipelineCreationTests, LayoutSizesTooSmallMultipleGroups) {
|
TEST_F(MinBufferSizePipelineCreationTests, LayoutSizesTooSmallMultipleGroups) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
std::vector<BindingDescriptor> bg0Bindings = {{0, 0, "a : f32; b : f32;", 8},
|
std::vector<BindingDescriptor> bg0Bindings = {{0, 0, "a : f32; b : f32;", 8},
|
||||||
{0, 1, "c : f32;", 4}};
|
{0, 1, "c : f32;", 4}};
|
||||||
std::vector<BindingDescriptor> bg1Bindings = {{1, 0, "d : f32; e : f32; f : f32;", 12},
|
std::vector<BindingDescriptor> bg1Bindings = {{1, 0, "d : f32; e : f32; f : f32;", 12},
|
||||||
@ -398,6 +402,8 @@ class MinBufferSizeDrawTimeValidationTests : public MinBufferSizeTestsBase {};
|
|||||||
|
|
||||||
// Fail if binding sizes are too small at draw time
|
// Fail if binding sizes are too small at draw time
|
||||||
TEST_F(MinBufferSizeDrawTimeValidationTests, ZeroMinSizeAndTooSmallBinding) {
|
TEST_F(MinBufferSizeDrawTimeValidationTests, ZeroMinSizeAndTooSmallBinding) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
std::vector<BindingDescriptor> bindings = {{0, 0, "a : f32; b : f32;", 8},
|
std::vector<BindingDescriptor> bindings = {{0, 0, "a : f32; b : f32;", 8},
|
||||||
{0, 1, "c : f32;", 4}};
|
{0, 1, "c : f32;", 4}};
|
||||||
|
|
||||||
@ -419,6 +425,8 @@ TEST_F(MinBufferSizeDrawTimeValidationTests, ZeroMinSizeAndTooSmallBinding) {
|
|||||||
|
|
||||||
// Draw time validation works for non-contiguous bindings
|
// Draw time validation works for non-contiguous bindings
|
||||||
TEST_F(MinBufferSizeDrawTimeValidationTests, UnorderedBindings) {
|
TEST_F(MinBufferSizeDrawTimeValidationTests, UnorderedBindings) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
std::vector<BindingDescriptor> bindings = {{0, 2, "a : f32; b : f32;", 8},
|
std::vector<BindingDescriptor> bindings = {{0, 2, "a : f32; b : f32;", 8},
|
||||||
{0, 0, "c : f32;", 4},
|
{0, 0, "c : f32;", 4},
|
||||||
{0, 4, "d : f32; e : f32; f : f32;", 12}};
|
{0, 4, "d : f32; e : f32; f : f32;", 12}};
|
||||||
@ -441,6 +449,8 @@ TEST_F(MinBufferSizeDrawTimeValidationTests, UnorderedBindings) {
|
|||||||
|
|
||||||
// Draw time validation works for multiple bind groups
|
// Draw time validation works for multiple bind groups
|
||||||
TEST_F(MinBufferSizeDrawTimeValidationTests, MultipleGroups) {
|
TEST_F(MinBufferSizeDrawTimeValidationTests, MultipleGroups) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
std::vector<BindingDescriptor> bg0Bindings = {{0, 0, "a : f32; b : f32;", 8},
|
std::vector<BindingDescriptor> bg0Bindings = {{0, 0, "a : f32; b : f32;", 8},
|
||||||
{0, 1, "c : f32;", 4}};
|
{0, 1, "c : f32;", 4}};
|
||||||
std::vector<BindingDescriptor> bg1Bindings = {{1, 0, "d : f32; e : f32; f : f32;", 12},
|
std::vector<BindingDescriptor> bg1Bindings = {{1, 0, "d : f32; e : f32; f : f32;", 12},
|
||||||
@ -512,6 +522,8 @@ class MinBufferSizeDefaultLayoutTests : public MinBufferSizeTestsBase {
|
|||||||
|
|
||||||
// Test the minimum size computations for various WGSL types.
|
// Test the minimum size computations for various WGSL types.
|
||||||
TEST_F(MinBufferSizeDefaultLayoutTests, DefaultLayoutVariousWGSLTypes) {
|
TEST_F(MinBufferSizeDefaultLayoutTests, DefaultLayoutVariousWGSLTypes) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
CheckShaderBindingSizeReflection(
|
CheckShaderBindingSizeReflection(
|
||||||
{{{0, 0, "a : f32;", 4}, {0, 1, "b : array<f32>;", 4}, {0, 2, "c : mat2x2<f32>;", 16}}});
|
{{{0, 0, "a : f32;", 4}, {0, 1, "b : array<f32>;", 4}, {0, 2, "c : mat2x2<f32>;", 16}}});
|
||||||
CheckShaderBindingSizeReflection({{{0, 3, "d : u32; e : array<f32>;", 8},
|
CheckShaderBindingSizeReflection({{{0, 3, "d : u32; e : array<f32>;", 8},
|
||||||
@ -521,6 +533,8 @@ TEST_F(MinBufferSizeDefaultLayoutTests, DefaultLayoutVariousWGSLTypes) {
|
|||||||
|
|
||||||
// Test the minimum size computations for various buffer binding types.
|
// Test the minimum size computations for various buffer binding types.
|
||||||
TEST_F(MinBufferSizeDefaultLayoutTests, DefaultLayoutVariousBindingTypes) {
|
TEST_F(MinBufferSizeDefaultLayoutTests, DefaultLayoutVariousBindingTypes) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
CheckShaderBindingSizeReflection(
|
CheckShaderBindingSizeReflection(
|
||||||
{{{0, 0, "a : f32;", 4, wgpu::BufferBindingType::Uniform},
|
{{{0, 0, "a : f32;", 4, wgpu::BufferBindingType::Uniform},
|
||||||
{0, 1, "a : f32; b : f32;", 8, wgpu::BufferBindingType::Storage},
|
{0, 1, "a : f32; b : f32;", 8, wgpu::BufferBindingType::Storage},
|
||||||
@ -529,6 +543,8 @@ TEST_F(MinBufferSizeDefaultLayoutTests, DefaultLayoutVariousBindingTypes) {
|
|||||||
|
|
||||||
// Test the minimum size computations works with multiple bind groups.
|
// Test the minimum size computations works with multiple bind groups.
|
||||||
TEST_F(MinBufferSizeDefaultLayoutTests, MultipleBindGroups) {
|
TEST_F(MinBufferSizeDefaultLayoutTests, MultipleBindGroups) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
CheckShaderBindingSizeReflection(
|
CheckShaderBindingSizeReflection(
|
||||||
{{{0, 0, "a : f32;", 4, wgpu::BufferBindingType::Uniform}},
|
{{{0, 0, "a : f32;", 4, wgpu::BufferBindingType::Uniform}},
|
||||||
{{1, 0, "a : f32; b : f32;", 8, wgpu::BufferBindingType::Storage}},
|
{{1, 0, "a : f32; b : f32;", 8, wgpu::BufferBindingType::Storage}},
|
||||||
@ -537,6 +553,8 @@ TEST_F(MinBufferSizeDefaultLayoutTests, MultipleBindGroups) {
|
|||||||
|
|
||||||
// Test the minimum size computations with manual size/align/stride decorations.
|
// Test the minimum size computations with manual size/align/stride decorations.
|
||||||
TEST_F(MinBufferSizeDefaultLayoutTests, NonDefaultLayout) {
|
TEST_F(MinBufferSizeDefaultLayoutTests, NonDefaultLayout) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
CheckShaderBindingSizeReflection({{{0, 0, "[[size(256)]] a : u32; b : u32;", 260},
|
CheckShaderBindingSizeReflection({{{0, 0, "[[size(256)]] a : u32; b : u32;", 260},
|
||||||
{0, 1, "c : u32; [[align(16)]] d : u32;", 20},
|
{0, 1, "c : u32; [[align(16)]] d : u32;", 20},
|
||||||
{0, 2, "d : [[stride(40)]] array<u32, 3>;", 120},
|
{0, 2, "d : [[stride(40)]] array<u32, 3>;", 120},
|
||||||
@ -545,6 +563,8 @@ TEST_F(MinBufferSizeDefaultLayoutTests, NonDefaultLayout) {
|
|||||||
|
|
||||||
// Minimum size should be the max requirement of both vertex and fragment stages.
|
// Minimum size should be the max requirement of both vertex and fragment stages.
|
||||||
TEST_F(MinBufferSizeDefaultLayoutTests, RenderPassConsidersBothStages) {
|
TEST_F(MinBufferSizeDefaultLayoutTests, RenderPassConsidersBothStages) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
std::string vertexShader = CreateVertexShaderWithBindings(
|
std::string vertexShader = CreateVertexShaderWithBindings(
|
||||||
{{0, 0, "a : f32;", 4, wgpu::BufferBindingType::Uniform},
|
{{0, 0, "a : f32;", 4, wgpu::BufferBindingType::Uniform},
|
||||||
{0, 1, "b : vec4<f32>;", 16, wgpu::BufferBindingType::Uniform}});
|
{0, 1, "b : vec4<f32>;", 16, wgpu::BufferBindingType::Uniform}});
|
||||||
|
@ -393,6 +393,8 @@ TEST_F(RenderPipelineValidationTest, AlphaToCoverageAndSampleCount) {
|
|||||||
|
|
||||||
// Tests that the texture component type in shader must match the bind group layout.
|
// Tests that the texture component type in shader must match the bind group layout.
|
||||||
TEST_F(RenderPipelineValidationTest, TextureComponentTypeCompatibility) {
|
TEST_F(RenderPipelineValidationTest, TextureComponentTypeCompatibility) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
constexpr uint32_t kNumTextureComponentType = 3u;
|
constexpr uint32_t kNumTextureComponentType = 3u;
|
||||||
std::array<const char*, kNumTextureComponentType> kScalarTypes = {{"f32", "i32", "u32"}};
|
std::array<const char*, kNumTextureComponentType> kScalarTypes = {{"f32", "i32", "u32"}};
|
||||||
std::array<wgpu::TextureSampleType, kNumTextureComponentType> kTextureComponentTypes = {{
|
std::array<wgpu::TextureSampleType, kNumTextureComponentType> kTextureComponentTypes = {{
|
||||||
@ -430,6 +432,8 @@ TEST_F(RenderPipelineValidationTest, TextureComponentTypeCompatibility) {
|
|||||||
|
|
||||||
// Tests that the texture view dimension in shader must match the bind group layout.
|
// Tests that the texture view dimension in shader must match the bind group layout.
|
||||||
TEST_F(RenderPipelineValidationTest, TextureViewDimensionCompatibility) {
|
TEST_F(RenderPipelineValidationTest, TextureViewDimensionCompatibility) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
constexpr uint32_t kNumTextureViewDimensions = 6u;
|
constexpr uint32_t kNumTextureViewDimensions = 6u;
|
||||||
std::array<const char*, kNumTextureViewDimensions> kTextureKeywords = {{
|
std::array<const char*, kNumTextureViewDimensions> kTextureKeywords = {{
|
||||||
"texture_1d",
|
"texture_1d",
|
||||||
|
@ -118,6 +118,8 @@ TEST_F(ShaderModuleValidationTest, CombinedTextureAndSampler) {
|
|||||||
// Test that it is not allowed to declare a multisampled-array interface texture.
|
// Test that it is not allowed to declare a multisampled-array interface texture.
|
||||||
// TODO(enga): Also test multisampled cube, cube array, and 3D. These have no GLSL keywords.
|
// TODO(enga): Also test multisampled cube, cube array, and 3D. These have no GLSL keywords.
|
||||||
TEST_F(ShaderModuleValidationTest, MultisampledArrayTexture) {
|
TEST_F(ShaderModuleValidationTest, MultisampledArrayTexture) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// SPIR-V ASM produced by glslang for the following fragment shader:
|
// SPIR-V ASM produced by glslang for the following fragment shader:
|
||||||
//
|
//
|
||||||
// #version 450
|
// #version 450
|
||||||
|
@ -226,6 +226,8 @@ TEST_F(StorageTextureValidationTests, ComputePipeline) {
|
|||||||
|
|
||||||
// Validate read-write storage textures are not currently supported.
|
// Validate read-write storage textures are not currently supported.
|
||||||
TEST_F(StorageTextureValidationTests, ReadWriteStorageTexture) {
|
TEST_F(StorageTextureValidationTests, ReadWriteStorageTexture) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// Read-write storage textures cannot be declared in a vertex shader by default.
|
// Read-write storage textures cannot be declared in a vertex shader by default.
|
||||||
{
|
{
|
||||||
ASSERT_DEVICE_ERROR(utils::CreateShaderModule(device, R"(
|
ASSERT_DEVICE_ERROR(utils::CreateShaderModule(device, R"(
|
||||||
@ -286,6 +288,8 @@ TEST_F(StorageTextureValidationTests, BindGroupLayoutWithStorageTextureBindingTy
|
|||||||
// Validate it is an error to declare a read-only or write-only storage texture in shaders with any
|
// Validate it is an error to declare a read-only or write-only storage texture in shaders with any
|
||||||
// format that doesn't support TextureUsage::Storage texture usages.
|
// format that doesn't support TextureUsage::Storage texture usages.
|
||||||
TEST_F(StorageTextureValidationTests, StorageTextureFormatInShaders) {
|
TEST_F(StorageTextureValidationTests, StorageTextureFormatInShaders) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
// Not include RGBA8UnormSrgb, BGRA8Unorm, BGRA8UnormSrgb because they are not related to any
|
// Not include RGBA8UnormSrgb, BGRA8Unorm, BGRA8UnormSrgb because they are not related to any
|
||||||
// SPIR-V Image Formats.
|
// SPIR-V Image Formats.
|
||||||
constexpr std::array<wgpu::TextureFormat, 32> kWGPUTextureFormatSupportedAsSPIRVImageFormats = {
|
constexpr std::array<wgpu::TextureFormat, 32> kWGPUTextureFormatSupportedAsSPIRVImageFormats = {
|
||||||
@ -322,6 +326,8 @@ TEST_F(StorageTextureValidationTests, StorageTextureFormatInShaders) {
|
|||||||
// Verify that declaring a storage texture format that is not supported in WebGPU causes validation
|
// Verify that declaring a storage texture format that is not supported in WebGPU causes validation
|
||||||
// error.
|
// error.
|
||||||
TEST_F(StorageTextureValidationTests, UnsupportedWGSLStorageTextureFormat) {
|
TEST_F(StorageTextureValidationTests, UnsupportedWGSLStorageTextureFormat) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
constexpr std::array<wgpu::TextureFormat, 16> kUnsupportedTextureFormats = {
|
constexpr std::array<wgpu::TextureFormat, 16> kUnsupportedTextureFormats = {
|
||||||
wgpu::TextureFormat::R8Unorm, wgpu::TextureFormat::R8Snorm,
|
wgpu::TextureFormat::R8Unorm, wgpu::TextureFormat::R8Snorm,
|
||||||
wgpu::TextureFormat::R8Uint, wgpu::TextureFormat::R8Sint,
|
wgpu::TextureFormat::R8Uint, wgpu::TextureFormat::R8Sint,
|
||||||
@ -378,6 +384,8 @@ TEST_F(StorageTextureValidationTests, UnsupportedTextureViewDimensionInBindGroup
|
|||||||
// render and compute pipeline, the binding type in the bind group layout must match the
|
// render and compute pipeline, the binding type in the bind group layout must match the
|
||||||
// declaration in the shader.
|
// declaration in the shader.
|
||||||
TEST_F(StorageTextureValidationTests, BindGroupLayoutEntryTypeMatchesShaderDeclaration) {
|
TEST_F(StorageTextureValidationTests, BindGroupLayoutEntryTypeMatchesShaderDeclaration) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
constexpr wgpu::TextureFormat kStorageTextureFormat = wgpu::TextureFormat::R32Float;
|
constexpr wgpu::TextureFormat kStorageTextureFormat = wgpu::TextureFormat::R32Float;
|
||||||
|
|
||||||
std::initializer_list<utils::BindingLayoutEntryInitializationHelper> kSupportedBindingTypes = {
|
std::initializer_list<utils::BindingLayoutEntryInitializationHelper> kSupportedBindingTypes = {
|
||||||
@ -461,6 +469,8 @@ TEST_F(StorageTextureValidationTests, StorageTextureFormatInBindGroupLayout) {
|
|||||||
|
|
||||||
// Verify the storage texture format in the bind group layout must match the declaration in shader.
|
// Verify the storage texture format in the bind group layout must match the declaration in shader.
|
||||||
TEST_F(StorageTextureValidationTests, BindGroupLayoutStorageTextureFormatMatchesShaderDeclaration) {
|
TEST_F(StorageTextureValidationTests, BindGroupLayoutStorageTextureFormatMatchesShaderDeclaration) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
for (wgpu::StorageTextureAccess bindingType : kSupportedStorageTextureAccess) {
|
for (wgpu::StorageTextureAccess bindingType : kSupportedStorageTextureAccess) {
|
||||||
for (wgpu::TextureFormat storageTextureFormatInShader : utils::kAllTextureFormats) {
|
for (wgpu::TextureFormat storageTextureFormatInShader : utils::kAllTextureFormats) {
|
||||||
if (!utils::TextureFormatSupportsStorageTexture(storageTextureFormatInShader)) {
|
if (!utils::TextureFormatSupportsStorageTexture(storageTextureFormatInShader)) {
|
||||||
@ -517,6 +527,8 @@ TEST_F(StorageTextureValidationTests, BindGroupLayoutStorageTextureFormatMatches
|
|||||||
// Verify the dimension of the bind group layout with storage textures must match the one declared
|
// Verify the dimension of the bind group layout with storage textures must match the one declared
|
||||||
// in shader.
|
// in shader.
|
||||||
TEST_F(StorageTextureValidationTests, BindGroupLayoutViewDimensionMatchesShaderDeclaration) {
|
TEST_F(StorageTextureValidationTests, BindGroupLayoutViewDimensionMatchesShaderDeclaration) {
|
||||||
|
DAWN_SKIP_TEST_IF(HasToggleEnabled("use_tint_generator"));
|
||||||
|
|
||||||
constexpr std::array<wgpu::TextureViewDimension, 4> kSupportedDimensions = {
|
constexpr std::array<wgpu::TextureViewDimension, 4> kSupportedDimensions = {
|
||||||
wgpu::TextureViewDimension::e1D, wgpu::TextureViewDimension::e2D,
|
wgpu::TextureViewDimension::e1D, wgpu::TextureViewDimension::e2D,
|
||||||
wgpu::TextureViewDimension::e2DArray, wgpu::TextureViewDimension::e3D};
|
wgpu::TextureViewDimension::e2DArray, wgpu::TextureViewDimension::e3D};
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "dawn/dawn_proc.h"
|
#include "dawn/dawn_proc.h"
|
||||||
#include "dawn/webgpu.h"
|
#include "dawn/webgpu.h"
|
||||||
#include "dawn_native/NullBackend.h"
|
#include "dawn_native/NullBackend.h"
|
||||||
|
#include "tests/ToggleParser.h"
|
||||||
#include "utils/WireHelper.h"
|
#include "utils/WireHelper.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -27,10 +28,13 @@ namespace {
|
|||||||
|
|
||||||
bool gUseWire = false;
|
bool gUseWire = false;
|
||||||
std::string gWireTraceDir = "";
|
std::string gWireTraceDir = "";
|
||||||
|
std::unique_ptr<ToggleParser> gToggleParser = nullptr;
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void InitDawnValidationTestEnvironment(int argc, char** argv) {
|
void InitDawnValidationTestEnvironment(int argc, char** argv) {
|
||||||
|
gToggleParser = std::make_unique<ToggleParser>();
|
||||||
|
|
||||||
for (int i = 1; i < argc; ++i) {
|
for (int i = 1; i < argc; ++i) {
|
||||||
if (strcmp("-w", argv[i]) == 0 || strcmp("--use-wire", argv[i]) == 0) {
|
if (strcmp("-w", argv[i]) == 0 || strcmp("--use-wire", argv[i]) == 0) {
|
||||||
gUseWire = true;
|
gUseWire = true;
|
||||||
@ -44,6 +48,26 @@ void InitDawnValidationTestEnvironment(int argc, char** argv) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gToggleParser->ParseEnabledToggles(argv[i])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gToggleParser->ParseDisabledToggles(argv[i])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp("-h", argv[i]) == 0 || strcmp("--help", argv[i]) == 0) {
|
||||||
|
dawn::InfoLog()
|
||||||
|
<< "\n\nUsage: " << argv[0]
|
||||||
|
<< " [GTEST_FLAGS...] [-w]\n"
|
||||||
|
" [--enable-toggles=toggles] [--disable-toggles=toggles]\n"
|
||||||
|
" -w, --use-wire: Run the tests through the wire (defaults to no wire)\n"
|
||||||
|
" --enable-toggles: Comma-delimited list of Dawn toggles to enable.\n"
|
||||||
|
" ex.) skip_validation,use_tint_generator,disable_robustness,turn_off_vsync\n"
|
||||||
|
" --disable-toggles: Comma-delimited list of Dawn toggles to disable\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Skip over args that look like they're for Googletest.
|
// Skip over args that look like they're for Googletest.
|
||||||
constexpr const char kGtestArgPrefix[] = "--gtest_";
|
constexpr const char kGtestArgPrefix[] = "--gtest_";
|
||||||
if (strncmp(kGtestArgPrefix, argv[i], sizeof(kGtestArgPrefix) - 1) == 0) {
|
if (strncmp(kGtestArgPrefix, argv[i], sizeof(kGtestArgPrefix) - 1) == 0) {
|
||||||
@ -159,6 +183,15 @@ WGPUDevice ValidationTest::CreateTestDevice() {
|
|||||||
// Disabled disallowing unsafe APIs so we can test them.
|
// Disabled disallowing unsafe APIs so we can test them.
|
||||||
dawn_native::DeviceDescriptor deviceDescriptor;
|
dawn_native::DeviceDescriptor deviceDescriptor;
|
||||||
deviceDescriptor.forceDisabledToggles.push_back("disallow_unsafe_apis");
|
deviceDescriptor.forceDisabledToggles.push_back("disallow_unsafe_apis");
|
||||||
|
|
||||||
|
for (const std::string& toggle : gToggleParser->GetEnabledToggles()) {
|
||||||
|
deviceDescriptor.forceEnabledToggles.push_back(toggle.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const std::string& toggle : gToggleParser->GetDisabledToggles()) {
|
||||||
|
deviceDescriptor.forceDisabledToggles.push_back(toggle.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
return adapter.CreateDevice(&deviceDescriptor);
|
return adapter.CreateDevice(&deviceDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,8 @@
|
|||||||
#include "common/Log.h"
|
#include "common/Log.h"
|
||||||
#include "dawn/webgpu_cpp.h"
|
#include "dawn/webgpu_cpp.h"
|
||||||
#include "dawn_native/DawnNative.h"
|
#include "dawn_native/DawnNative.h"
|
||||||
#include "gtest/gtest.h"
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
#define ASSERT_DEVICE_ERROR(statement) \
|
#define ASSERT_DEVICE_ERROR(statement) \
|
||||||
FlushWire(); \
|
FlushWire(); \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user