tint: Support dot4I8Packed and dot4U8Packed in sem

This patch adds the support of dot4I8Packed and dot4U8Packed in
semantics under the extension "chromium_experimental_dp4a".

Bug: tint:1497
Test: tint_unittests
Change-Id: I659172fcb8953ba13b49664c6c9ad75724ff5957
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/88962
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
Jiawei Shao
2022-05-10 09:05:54 +00:00
committed by Dawn LUCI CQ
parent 4b6d3f4346
commit 6c9e475211
14 changed files with 2921 additions and 2724 deletions

View File

@@ -145,6 +145,16 @@ bool Builtin::HasSideEffects() const {
return false;
}
ast::Enable::ExtensionKind Builtin::RequiredExtension() const {
switch (type_) {
case sem::BuiltinType::kDot4I8Packed:
case sem::BuiltinType::kDot4U8Packed:
return ast::Enable::ExtensionKind::kChromiumExperimentalDP4a;
default:
return ast::Enable::ExtensionKind::kNotAnExtension;
}
}
} // namespace tint::sem
//! @endcond

View File

@@ -134,6 +134,10 @@ class Builtin final : public Castable<Builtin, CallTarget> {
/// one of its inputs)
bool HasSideEffects() const;
/// @returns the required extension of this builtin function. Returns
/// ast::Enable::ExtensionKind::kNotAnExtension if no extension is required.
ast::Enable::ExtensionKind RequiredExtension() const;
private:
const BuiltinType type_;
const PipelineStageSet supported_stages_;

View File

@@ -56,6 +56,8 @@ INSTANTIATE_TEST_SUITE_P(
BuiltinData{"determinant", BuiltinType::kDeterminant},
BuiltinData{"distance", BuiltinType::kDistance},
BuiltinData{"dot", BuiltinType::kDot},
BuiltinData{"dot4I8Packed", BuiltinType::kDot4I8Packed},
BuiltinData{"dot4U8Packed", BuiltinType::kDot4U8Packed},
BuiltinData{"dpdx", BuiltinType::kDpdx},
BuiltinData{"dpdxCoarse", BuiltinType::kDpdxCoarse},
BuiltinData{"dpdxFine", BuiltinType::kDpdxFine},

View File

@@ -89,6 +89,12 @@ BuiltinType ParseBuiltinType(const std::string& name) {
if (name == "dot") {
return BuiltinType::kDot;
}
if (name == "dot4I8Packed") {
return BuiltinType::kDot4I8Packed;
}
if (name == "dot4U8Packed") {
return BuiltinType::kDot4U8Packed;
}
if (name == "dpdx") {
return BuiltinType::kDpdx;
}
@@ -391,6 +397,10 @@ const char* str(BuiltinType i) {
return "distance";
case BuiltinType::kDot:
return "dot";
case BuiltinType::kDot4I8Packed:
return "dot4I8Packed";
case BuiltinType::kDot4U8Packed:
return "dot4U8Packed";
case BuiltinType::kDpdx:
return "dpdx";
case BuiltinType::kDpdxCoarse:

View File

@@ -53,6 +53,8 @@ enum class BuiltinType {
kDeterminant,
kDistance,
kDot,
kDot4I8Packed,
kDot4U8Packed,
kDpdx,
kDpdxCoarse,
kDpdxFine,