mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-22 06:23:33 +00:00
This patch: 1. Add the `f16` WGSL extension. 2. Add `f16` as keyword, and remove it from reserved word list. 3. Add ast::f16 and sem::f16, and implement validation that using `f16` type must be with `f16` extension enabled. 4. Add `Number<NumberKindF16>` for f16 literal and constant, and add `ast::FloatLiteralExpression::Suffix::kH`. 5. Add placeholder in all writer which report error when try to emit f16 type. Bugs: tint:1473, tint:1502 Change-Id: Ifb363beeb2699ed7cac57e07227d1b2cfa8050b4 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/89922 Reviewed-by: Ben Clayton <bclayton@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Zhaoming Jiang <zhaoming.jiang@intel.com>
75 lines
2.5 KiB
C++
75 lines
2.5 KiB
C++
// Copyright 2022 The Tint 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 "src/tint/ast/enable.h"
|
|
|
|
#include "src/tint/program_builder.h"
|
|
#include "src/tint/sem/variable.h"
|
|
|
|
TINT_INSTANTIATE_TYPEINFO(tint::ast::Enable);
|
|
|
|
namespace tint::ast {
|
|
|
|
Enable::ExtensionKind Enable::NameToKind(const std::string& name) {
|
|
if (name == "chromium_experimental_dp4a") {
|
|
return Enable::ExtensionKind::kChromiumExperimentalDP4a;
|
|
}
|
|
if (name == "chromium_disable_uniformity_analysis") {
|
|
return Enable::ExtensionKind::kChromiumDisableUniformityAnalysis;
|
|
}
|
|
if (name == "f16") {
|
|
return Enable::ExtensionKind::kF16;
|
|
}
|
|
|
|
// The reserved internal extension name for testing
|
|
if (name == "InternalExtensionForTesting") {
|
|
return Enable::ExtensionKind::kInternalExtensionForTesting;
|
|
}
|
|
|
|
return Enable::ExtensionKind::kNoExtension;
|
|
}
|
|
|
|
std::string Enable::KindToName(ExtensionKind kind) {
|
|
switch (kind) {
|
|
case ExtensionKind::kChromiumExperimentalDP4a:
|
|
return "chromium_experimental_dp4a";
|
|
case ExtensionKind::kChromiumDisableUniformityAnalysis:
|
|
return "chromium_disable_uniformity_analysis";
|
|
case ExtensionKind::kF16:
|
|
return "f16";
|
|
// The reserved internal extension for testing
|
|
case ExtensionKind::kInternalExtensionForTesting:
|
|
return "InternalExtensionForTesting";
|
|
case ExtensionKind::kNoExtension:
|
|
// Return an empty string for kNoExtension
|
|
return {};
|
|
// No default case, as this switch must cover all ExtensionKind values.
|
|
}
|
|
// This return shall never get hit.
|
|
return {};
|
|
}
|
|
|
|
Enable::Enable(ProgramID pid, const Source& src, const std::string& ext_name)
|
|
: Base(pid, src), name(ext_name), kind(NameToKind(ext_name)) {}
|
|
|
|
Enable::Enable(Enable&&) = default;
|
|
|
|
Enable::~Enable() = default;
|
|
|
|
const Enable* Enable::Clone(CloneContext* ctx) const {
|
|
auto src = ctx->Clone(source);
|
|
return ctx->dst->create<Enable>(src, name);
|
|
}
|
|
} // namespace tint::ast
|