[tint][fuzz] Use printer capabilities in writer_fuzz passes
Exposes the capabilities that are required after running all of the
transforms before the printer, and use them in the appropriate
writer_fuzz pass. This prevents spurious ICEs in the fuzzer due to IR
not being considered valid after running the transforms due to missing
capabilities.
Fixes: 426017505
Change-Id: I4a7eab200794da881b5b5894135f019e266ea88a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/248994
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
Reviewed-by: James Price <jrprice@google.com>
Auto-Submit: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
diff --git a/src/tint/lang/glsl/writer/BUILD.cmake b/src/tint/lang/glsl/writer/BUILD.cmake
index 168508d..3e8277e 100644
--- a/src/tint/lang/glsl/writer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/BUILD.cmake
@@ -162,7 +162,6 @@
tint_cmd_fuzz_ir_fuzz
tint_lang_core
tint_lang_core_constant
- tint_lang_core_intrinsic
tint_lang_core_ir
tint_lang_core_ir_transform
tint_lang_core_type
@@ -188,6 +187,7 @@
tint_lang_glsl_writer
tint_lang_glsl_writer_common
tint_lang_glsl_writer_helpers
+ tint_lang_glsl_writer_printer
)
endif(TINT_BUILD_GLSL_WRITER)
diff --git a/src/tint/lang/glsl/writer/BUILD.gn b/src/tint/lang/glsl/writer/BUILD.gn
index 61aeae6..9afdceb 100644
--- a/src/tint/lang/glsl/writer/BUILD.gn
+++ b/src/tint/lang/glsl/writer/BUILD.gn
@@ -141,7 +141,6 @@
"${tint_src_dir}/cmd/fuzz/ir:fuzz",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
- "${tint_src_dir}/lang/core/intrinsic",
"${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/ir/transform",
"${tint_src_dir}/lang/core/type",
@@ -163,6 +162,7 @@
"${tint_src_dir}/lang/glsl/writer",
"${tint_src_dir}/lang/glsl/writer/common",
"${tint_src_dir}/lang/glsl/writer/helpers",
+ "${tint_src_dir}/lang/glsl/writer/printer",
]
}
}
diff --git a/src/tint/lang/glsl/writer/printer/printer.cc b/src/tint/lang/glsl/writer/printer/printer.cc
index cbde070..c4eaa9f 100644
--- a/src/tint/lang/glsl/writer/printer/printer.cc
+++ b/src/tint/lang/glsl/writer/printer/printer.cc
@@ -126,10 +126,7 @@
/// @returns the generated GLSL shader
tint::Result<Output> Generate() {
- auto valid = core::ir::ValidateAndDumpIfNeeded(
- ir_, "glsl.Printer",
- core::ir::Capabilities{core::ir::Capability::kAllowHandleVarsWithoutBindings,
- core::ir::Capability::kAllowDuplicateBindings});
+ auto valid = core::ir::ValidateAndDumpIfNeeded(ir_, "glsl.Printer", kPrinterCapabilities);
if (valid != Success) {
return std::move(valid.Failure());
}
diff --git a/src/tint/lang/glsl/writer/printer/printer.h b/src/tint/lang/glsl/writer/printer/printer.h
index 7a9d786..baf43ca 100644
--- a/src/tint/lang/glsl/writer/printer/printer.h
+++ b/src/tint/lang/glsl/writer/printer/printer.h
@@ -28,6 +28,7 @@
#ifndef SRC_TINT_LANG_GLSL_WRITER_PRINTER_PRINTER_H_
#define SRC_TINT_LANG_GLSL_WRITER_PRINTER_PRINTER_H_
+#include "src/tint/lang/core/ir/validator.h"
#include "src/tint/lang/glsl/writer/common/output.h"
#include "src/tint/utils/result.h"
@@ -41,6 +42,11 @@
namespace tint::glsl::writer {
+// The capabilities that might be needed due to raising.
+const core::ir::Capabilities kPrinterCapabilities{
+ core::ir::Capability::kAllowHandleVarsWithoutBindings,
+ core::ir::Capability::kAllowDuplicateBindings};
+
/// @returns the generated GLSL shader on success, or failure
/// @param module the Tint IR module to generate
/// @param options the options to use
diff --git a/src/tint/lang/glsl/writer/writer_fuzz.cc b/src/tint/lang/glsl/writer/writer_fuzz.cc
index de57e7e..814c652 100644
--- a/src/tint/lang/glsl/writer/writer_fuzz.cc
+++ b/src/tint/lang/glsl/writer/writer_fuzz.cc
@@ -28,14 +28,13 @@
#include <iostream>
#include "src/tint/cmd/fuzz/ir/fuzz.h"
-#include "src/tint/lang/core/ir/core_builtin_call.h"
#include "src/tint/lang/core/ir/module.h"
#include "src/tint/lang/core/ir/transform/single_entry_point.h"
#include "src/tint/lang/core/ir/var.h"
-#include "src/tint/lang/core/type/input_attachment.h"
#include "src/tint/lang/core/type/pointer.h"
#include "src/tint/lang/core/type/storage_texture.h"
#include "src/tint/lang/glsl/writer/helpers/generate_bindings.h"
+#include "src/tint/lang/glsl/writer/printer/printer.h"
#include "src/tint/lang/glsl/writer/writer.h"
namespace tint::glsl::writer {
@@ -148,5 +147,4 @@
TINT_IR_MODULE_FUZZER(tint::glsl::writer::IRFuzzer,
tint::core::ir::Capabilities{},
- tint::core::ir::Capabilities{
- tint::core::ir::Capability::kAllowHandleVarsWithoutBindings});
+ tint::glsl::writer::kPrinterCapabilities);
diff --git a/src/tint/lang/hlsl/writer/BUILD.cmake b/src/tint/lang/hlsl/writer/BUILD.cmake
index b0766e7..5703c4e 100644
--- a/src/tint/lang/hlsl/writer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/BUILD.cmake
@@ -156,6 +156,7 @@
tint_lang_core_type
tint_lang_hlsl_writer_common
tint_lang_hlsl_writer_helpers
+ tint_lang_hlsl_writer_printer
tint_lang_wgsl_ast
tint_utils
tint_utils_bytes
diff --git a/src/tint/lang/hlsl/writer/BUILD.gn b/src/tint/lang/hlsl/writer/BUILD.gn
index 328b2ea..eadca96 100644
--- a/src/tint/lang/hlsl/writer/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/BUILD.gn
@@ -139,6 +139,7 @@
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/hlsl/writer/common",
"${tint_src_dir}/lang/hlsl/writer/helpers",
+ "${tint_src_dir}/lang/hlsl/writer/printer",
"${tint_src_dir}/lang/wgsl/ast",
"${tint_src_dir}/utils",
"${tint_src_dir}/utils/bytes",
diff --git a/src/tint/lang/hlsl/writer/printer/printer.cc b/src/tint/lang/hlsl/writer/printer/printer.cc
index 7255e89..437e197 100644
--- a/src/tint/lang/hlsl/writer/printer/printer.cc
+++ b/src/tint/lang/hlsl/writer/printer/printer.cc
@@ -175,14 +175,7 @@
/// @returns the generated HLSL shader
tint::Result<Output> Generate() {
- core::ir::Capabilities capabilities{
- core::ir::Capability::kAllowModuleScopeLets,
- core::ir::Capability::kAllowVectorElementPointer,
- core::ir::Capability::kAllowClipDistancesOnF32,
- core::ir::Capability::kAllowDuplicateBindings,
- core::ir::Capability::kAllowNonCoreTypes,
- };
- auto valid = core::ir::ValidateAndDumpIfNeeded(ir_, "hlsl.Printer", capabilities);
+ auto valid = core::ir::ValidateAndDumpIfNeeded(ir_, "hlsl.Printer", kPrinterCapabilities);
if (valid != Success) {
return std::move(valid.Failure());
}
diff --git a/src/tint/lang/hlsl/writer/printer/printer.h b/src/tint/lang/hlsl/writer/printer/printer.h
index 97b5110..c258140 100644
--- a/src/tint/lang/hlsl/writer/printer/printer.h
+++ b/src/tint/lang/hlsl/writer/printer/printer.h
@@ -28,6 +28,7 @@
#ifndef SRC_TINT_LANG_HLSL_WRITER_PRINTER_PRINTER_H_
#define SRC_TINT_LANG_HLSL_WRITER_PRINTER_PRINTER_H_
+#include "src/tint/lang/core/ir/validator.h"
#include "src/tint/lang/hlsl/writer/common/options.h"
#include "src/tint/lang/hlsl/writer/common/output.h"
#include "src/tint/utils/result.h"
@@ -39,6 +40,15 @@
namespace tint::hlsl::writer {
+// The capabilities that might be needed due to raising.
+const core::ir::Capabilities kPrinterCapabilities{
+ core::ir::Capability::kAllowModuleScopeLets,
+ core::ir::Capability::kAllowVectorElementPointer,
+ core::ir::Capability::kAllowClipDistancesOnF32,
+ core::ir::Capability::kAllowDuplicateBindings,
+ core::ir::Capability::kAllowNonCoreTypes,
+};
+
/// @param module the Tint IR module to generate
/// @param options the printer options
/// @returns the result of printing the HLSL shader on success, or failure
diff --git a/src/tint/lang/hlsl/writer/writer_fuzz.cc b/src/tint/lang/hlsl/writer/writer_fuzz.cc
index 4c670af..e0b65d8 100644
--- a/src/tint/lang/hlsl/writer/writer_fuzz.cc
+++ b/src/tint/lang/hlsl/writer/writer_fuzz.cc
@@ -33,6 +33,7 @@
#include "src/tint/lang/core/type/pointer.h"
#include "src/tint/lang/hlsl/validate/validate.h"
#include "src/tint/lang/hlsl/writer/helpers/generate_bindings.h"
+#include "src/tint/lang/hlsl/writer/printer/printer.h"
#include "src/tint/lang/hlsl/writer/writer.h"
#include "src/tint/utils/command/command.h"
@@ -133,5 +134,4 @@
TINT_IR_MODULE_FUZZER(tint::hlsl::writer::IRFuzzer,
tint::core::ir::Capabilities{},
- tint::core::ir::Capabilities{
- tint::core::ir::Capability::kAllowModuleScopeLets});
+ tint::hlsl::writer::kPrinterCapabilities);
diff --git a/src/tint/lang/msl/writer/BUILD.cmake b/src/tint/lang/msl/writer/BUILD.cmake
index 6a69fae..690b8db 100644
--- a/src/tint/lang/msl/writer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/BUILD.cmake
@@ -176,6 +176,7 @@
tint_lang_msl_writer
tint_lang_msl_writer_common
tint_lang_msl_writer_helpers
+ tint_lang_msl_writer_printer
)
endif(TINT_BUILD_MSL_WRITER)
diff --git a/src/tint/lang/msl/writer/BUILD.gn b/src/tint/lang/msl/writer/BUILD.gn
index de4d62e..2412e0f 100644
--- a/src/tint/lang/msl/writer/BUILD.gn
+++ b/src/tint/lang/msl/writer/BUILD.gn
@@ -155,6 +155,7 @@
"${tint_src_dir}/lang/msl/writer",
"${tint_src_dir}/lang/msl/writer/common",
"${tint_src_dir}/lang/msl/writer/helpers",
+ "${tint_src_dir}/lang/msl/writer/printer",
]
}
}
diff --git a/src/tint/lang/msl/writer/printer/printer.cc b/src/tint/lang/msl/writer/printer/printer.cc
index a95be18..9c38261 100644
--- a/src/tint/lang/msl/writer/printer/printer.cc
+++ b/src/tint/lang/msl/writer/printer/printer.cc
@@ -124,18 +124,7 @@
/// @returns the generated MSL shader
tint::Result<Output> Generate() {
- auto valid = core::ir::ValidateAndDumpIfNeeded(
- ir_, "msl.Printer",
- core::ir::Capabilities{
- core::ir::Capability::kAllow8BitIntegers,
- core::ir::Capability::kAllow64BitIntegers,
- core::ir::Capability::kAllowPointersAndHandlesInStructures,
- core::ir::Capability::kAllowPrivateVarsInFunctions,
- core::ir::Capability::kAllowAnyLetType,
- core::ir::Capability::kAllowModuleScopeLets,
- core::ir::Capability::kAllowWorkspacePointerInputToEntryPoint,
- core::ir::Capability::kAllowNonCoreTypes,
- });
+ auto valid = core::ir::ValidateAndDumpIfNeeded(ir_, "msl.Printer", kPrinterCapabilities);
if (valid != Success) {
return std::move(valid.Failure());
}
diff --git a/src/tint/lang/msl/writer/printer/printer.h b/src/tint/lang/msl/writer/printer/printer.h
index 956722b..3392793 100644
--- a/src/tint/lang/msl/writer/printer/printer.h
+++ b/src/tint/lang/msl/writer/printer/printer.h
@@ -28,6 +28,7 @@
#ifndef SRC_TINT_LANG_MSL_WRITER_PRINTER_PRINTER_H_
#define SRC_TINT_LANG_MSL_WRITER_PRINTER_PRINTER_H_
+#include "src/tint/lang/core/ir/validator.h"
#include "src/tint/lang/msl/writer/common/options.h"
#include "src/tint/lang/msl/writer/common/output.h"
#include "src/tint/utils/result.h"
@@ -39,6 +40,18 @@
namespace tint::msl::writer {
+// The capabilities that might be needed due to raising.
+const core::ir::Capabilities kPrinterCapabilities{
+ core::ir::Capability::kAllow8BitIntegers,
+ core::ir::Capability::kAllow64BitIntegers,
+ core::ir::Capability::kAllowPointersAndHandlesInStructures,
+ core::ir::Capability::kAllowPrivateVarsInFunctions,
+ core::ir::Capability::kAllowAnyLetType,
+ core::ir::Capability::kAllowModuleScopeLets,
+ core::ir::Capability::kAllowWorkspacePointerInputToEntryPoint,
+ core::ir::Capability::kAllowNonCoreTypes,
+};
+
/// @param module the Tint IR module to generate
/// @returns the result of printing the MSL shader on success, or failure
Result<Output> Print(core::ir::Module& module, const Options& options);
diff --git a/src/tint/lang/msl/writer/writer_fuzz.cc b/src/tint/lang/msl/writer/writer_fuzz.cc
index d35172f..46cb83b 100644
--- a/src/tint/lang/msl/writer/writer_fuzz.cc
+++ b/src/tint/lang/msl/writer/writer_fuzz.cc
@@ -32,6 +32,7 @@
#include "src/tint/lang/core/ir/var.h"
#include "src/tint/lang/core/type/pointer.h"
#include "src/tint/lang/msl/writer/helpers/generate_bindings.h"
+#include "src/tint/lang/msl/writer/printer/printer.h"
#include "src/tint/lang/msl/writer/writer.h"
namespace tint::msl::writer {
@@ -80,5 +81,4 @@
TINT_IR_MODULE_FUZZER(tint::msl::writer::IRFuzzer,
tint::core::ir::Capabilities{},
- tint::core::ir::Capabilities{
- tint::core::ir::Capability::kAllowWorkspacePointerInputToEntryPoint});
+ tint::msl::writer::kPrinterCapabilities);
diff --git a/src/tint/lang/spirv/writer/BUILD.cmake b/src/tint/lang/spirv/writer/BUILD.cmake
index 1e81d00..e818506 100644
--- a/src/tint/lang/spirv/writer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/BUILD.cmake
@@ -205,6 +205,7 @@
tint_lang_spirv_writer
tint_lang_spirv_writer_common
tint_lang_spirv_writer_helpers
+ tint_lang_spirv_writer_printer
)
endif(TINT_BUILD_SPV_WRITER)
diff --git a/src/tint/lang/spirv/writer/BUILD.gn b/src/tint/lang/spirv/writer/BUILD.gn
index 2c91907..d688bf0 100644
--- a/src/tint/lang/spirv/writer/BUILD.gn
+++ b/src/tint/lang/spirv/writer/BUILD.gn
@@ -182,6 +182,7 @@
"${tint_src_dir}/lang/spirv/writer",
"${tint_src_dir}/lang/spirv/writer/common",
"${tint_src_dir}/lang/spirv/writer/helpers",
+ "${tint_src_dir}/lang/spirv/writer/printer",
]
}
}
diff --git a/src/tint/lang/spirv/writer/writer_fuzz.cc b/src/tint/lang/spirv/writer/writer_fuzz.cc
index 6dc4993..d71f328 100644
--- a/src/tint/lang/spirv/writer/writer_fuzz.cc
+++ b/src/tint/lang/spirv/writer/writer_fuzz.cc
@@ -31,6 +31,7 @@
#include "src/tint/lang/core/ir/disassembler.h"
#include "src/tint/lang/spirv/validate/validate.h"
#include "src/tint/lang/spirv/writer/helpers/generate_bindings.h"
+#include "src/tint/lang/spirv/writer/printer/printer.h"
namespace tint::spirv::writer {
namespace {
@@ -65,5 +66,4 @@
TINT_IR_MODULE_FUZZER(tint::spirv::writer::IRFuzzer,
tint::core::ir::Capabilities{},
- tint::core::ir::Capabilities{
- tint::core::ir::Capability::kAllowAnyInputAttachmentIndexType});
+ tint::spirv::writer::kPrinterCapabilities);