mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-08 13:14:56 +00:00
src/sem: Generate ParameterUsage from intrinsics.def
Add a template file to generate parameter_usage.h and parameter_usage.cc when using tools/intrinsic-gen Bug: tint:832 Change-Id: I0ca4d092fdcda7d7846b968d43202f34450e516d Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/52644 Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
committed by
Tint LUCI CQ
parent
21f8772d65
commit
1934f59427
@@ -28,7 +28,7 @@ CallTarget::CallTarget(sem::Type* return_type, const ParameterList& parameters)
|
||||
|
||||
CallTarget::~CallTarget() = default;
|
||||
|
||||
int IndexOf(const ParameterList& parameters, Parameter::Usage usage) {
|
||||
int IndexOf(const ParameterList& parameters, ParameterUsage usage) {
|
||||
for (size_t i = 0; i < parameters.size(); i++) {
|
||||
if (parameters[i].usage == usage) {
|
||||
return static_cast<int>(i);
|
||||
@@ -37,37 +37,6 @@ int IndexOf(const ParameterList& parameters, Parameter::Usage usage) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
const char* str(Parameter::Usage usage) {
|
||||
switch (usage) {
|
||||
case Parameter::Usage::kArrayIndex:
|
||||
return "array_index";
|
||||
case Parameter::Usage::kBias:
|
||||
return "bias";
|
||||
case Parameter::Usage::kCoords:
|
||||
return "coords";
|
||||
case Parameter::Usage::kDepthRef:
|
||||
return "depth_ref";
|
||||
case Parameter::Usage::kDdx:
|
||||
return "ddx";
|
||||
case Parameter::Usage::kDdy:
|
||||
return "ddy";
|
||||
case Parameter::Usage::kLevel:
|
||||
return "level";
|
||||
case Parameter::Usage::kOffset:
|
||||
return "offset";
|
||||
case Parameter::Usage::kSampler:
|
||||
return "sampler";
|
||||
case Parameter::Usage::kSampleIndex:
|
||||
return "sample_index";
|
||||
case Parameter::Usage::kTexture:
|
||||
return "texture";
|
||||
case Parameter::Usage::kValue:
|
||||
return "value";
|
||||
default:
|
||||
return "<unknown>";
|
||||
}
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream& out, Parameter parameter) {
|
||||
out << "[type: " << parameter.type->FriendlyName(SymbolTable{ProgramID{}})
|
||||
<< ", usage: " << str(parameter.usage) << "]";
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "src/sem/node.h"
|
||||
#include "src/sem/parameter_usage.h"
|
||||
#include "src/sem/sampler_type.h"
|
||||
|
||||
namespace tint {
|
||||
@@ -28,28 +29,10 @@ class Type;
|
||||
|
||||
/// Parameter describes a single parameter of a call target
|
||||
struct Parameter {
|
||||
/// Usage is extra metadata for identifying a parameter based on its overload
|
||||
/// position
|
||||
enum class Usage {
|
||||
kNone,
|
||||
kArrayIndex,
|
||||
kBias,
|
||||
kCoords,
|
||||
kDepthRef,
|
||||
kDdx,
|
||||
kDdy,
|
||||
kLevel,
|
||||
kOffset,
|
||||
kSampler,
|
||||
kSampleIndex,
|
||||
kTexture,
|
||||
kValue,
|
||||
};
|
||||
|
||||
/// Parameter type
|
||||
sem::Type* const type;
|
||||
/// Parameter usage
|
||||
Usage const usage = Usage::kNone;
|
||||
ParameterUsage const usage = ParameterUsage::kNone;
|
||||
};
|
||||
|
||||
std::ostream& operator<<(std::ostream& out, Parameter parameter);
|
||||
@@ -59,9 +42,6 @@ static inline bool operator==(const Parameter& a, const Parameter& b) {
|
||||
return a.type == b.type && a.usage == b.usage;
|
||||
}
|
||||
|
||||
/// @returns a string representation of the given parameter usage.
|
||||
const char* str(Parameter::Usage usage);
|
||||
|
||||
/// ParameterList is a list of Parameter
|
||||
using ParameterList = std::vector<Parameter>;
|
||||
|
||||
@@ -69,7 +49,7 @@ using ParameterList = std::vector<Parameter>;
|
||||
/// @param usage the parameter usage to find
|
||||
/// @returns the index of the parameter with the given usage, or -1 if no
|
||||
/// parameter with the given usage exists.
|
||||
int IndexOf(const ParameterList& parameters, Parameter::Usage usage);
|
||||
int IndexOf(const ParameterList& parameters, ParameterUsage usage);
|
||||
|
||||
/// CallTarget is the base for callable functions
|
||||
class CallTarget : public Castable<CallTarget, Node> {
|
||||
|
||||
@@ -33,7 +33,7 @@ ParameterList GetParameters(const std::vector<const Variable*>& params) {
|
||||
ParameterList parameters;
|
||||
parameters.reserve(params.size());
|
||||
for (auto* param : params) {
|
||||
parameters.emplace_back(Parameter{param->Type(), Parameter::Usage::kNone});
|
||||
parameters.emplace_back(Parameter{param->Type(), ParameterUsage::kNone});
|
||||
}
|
||||
return parameters;
|
||||
}
|
||||
|
||||
58
src/sem/parameter_usage.cc
Normal file
58
src/sem/parameter_usage.cc
Normal file
@@ -0,0 +1,58 @@
|
||||
// Copyright 2021 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.
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// File generated by tools/intrinsic-gen
|
||||
// Do not modify this file directly
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "src/sem/parameter_usage.h"
|
||||
|
||||
namespace tint {
|
||||
namespace sem {
|
||||
|
||||
const char* str(ParameterUsage usage) {
|
||||
switch (usage) {
|
||||
case ParameterUsage::kNone:
|
||||
return "none";
|
||||
case ParameterUsage::kArrayIndex:
|
||||
return "array_index";
|
||||
case ParameterUsage::kBias:
|
||||
return "bias";
|
||||
case ParameterUsage::kCoords:
|
||||
return "coords";
|
||||
case ParameterUsage::kDdx:
|
||||
return "ddx";
|
||||
case ParameterUsage::kDdy:
|
||||
return "ddy";
|
||||
case ParameterUsage::kDepthRef:
|
||||
return "depth_ref";
|
||||
case ParameterUsage::kLevel:
|
||||
return "level";
|
||||
case ParameterUsage::kOffset:
|
||||
return "offset";
|
||||
case ParameterUsage::kSampleIndex:
|
||||
return "sample_index";
|
||||
case ParameterUsage::kSampler:
|
||||
return "sampler";
|
||||
case ParameterUsage::kTexture:
|
||||
return "texture";
|
||||
case ParameterUsage::kValue:
|
||||
return "value";
|
||||
}
|
||||
return "<unknown>";
|
||||
}
|
||||
|
||||
} // namespace sem
|
||||
} // namespace tint
|
||||
29
src/sem/parameter_usage.cc.tmpl
Normal file
29
src/sem/parameter_usage.cc.tmpl
Normal file
@@ -0,0 +1,29 @@
|
||||
{{- /*
|
||||
--------------------------------------------------------------------------------
|
||||
Template file for use with tools/intrinsic-gen to generate parameter_usage.cc
|
||||
|
||||
See:
|
||||
* tools/cmd/intrinsic-gen/gen for structures used by this template
|
||||
* https://golang.org/pkg/text/template/ for documentation on the template syntax
|
||||
--------------------------------------------------------------------------------
|
||||
*/ -}}
|
||||
|
||||
#include "src/sem/parameter_usage.h"
|
||||
|
||||
namespace tint {
|
||||
namespace sem {
|
||||
|
||||
const char* str(ParameterUsage usage) {
|
||||
switch (usage) {
|
||||
case ParameterUsage::kNone:
|
||||
return "none";
|
||||
{{- range .Sem.UniqueParameterNames }}
|
||||
case ParameterUsage::k{{PascalCase .}}:
|
||||
return "{{.}}";
|
||||
{{- end }}
|
||||
}
|
||||
return "<unknown>";
|
||||
}
|
||||
|
||||
} // namespace sem
|
||||
} // namespace tint
|
||||
50
src/sem/parameter_usage.h
Normal file
50
src/sem/parameter_usage.h
Normal file
@@ -0,0 +1,50 @@
|
||||
// Copyright 2021 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.
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// File generated by tools/intrinsic-gen
|
||||
// Do not modify this file directly
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef SRC_SEM_PARAMETER_USAGE_H_
|
||||
#define SRC_SEM_PARAMETER_USAGE_H_
|
||||
|
||||
namespace tint {
|
||||
namespace sem {
|
||||
|
||||
/// ParameterUsage is extra metadata for identifying a parameter based on its
|
||||
/// overload position
|
||||
enum class ParameterUsage {
|
||||
kNone = -1,
|
||||
kArrayIndex,
|
||||
kBias,
|
||||
kCoords,
|
||||
kDdx,
|
||||
kDdy,
|
||||
kDepthRef,
|
||||
kLevel,
|
||||
kOffset,
|
||||
kSampleIndex,
|
||||
kSampler,
|
||||
kTexture,
|
||||
kValue,
|
||||
};
|
||||
|
||||
/// @returns a string representation of the given parameter usage.
|
||||
const char* str(ParameterUsage usage);
|
||||
|
||||
} // namespace sem
|
||||
} // namespace tint
|
||||
|
||||
#endif // SRC_SEM_PARAMETER_USAGE_H_
|
||||
32
src/sem/parameter_usage.h.tmpl
Normal file
32
src/sem/parameter_usage.h.tmpl
Normal file
@@ -0,0 +1,32 @@
|
||||
{{- /*
|
||||
--------------------------------------------------------------------------------
|
||||
Template file for use with tools/intrinsic-gen to generate parameter_usage.h
|
||||
|
||||
See:
|
||||
* tools/cmd/intrinsic-gen/gen for structures used by this template
|
||||
* https://golang.org/pkg/text/template/ for documentation on the template syntax
|
||||
--------------------------------------------------------------------------------
|
||||
*/ -}}
|
||||
|
||||
#ifndef SRC_SEM_PARAMETER_USAGE_H_
|
||||
#define SRC_SEM_PARAMETER_USAGE_H_
|
||||
|
||||
namespace tint {
|
||||
namespace sem {
|
||||
|
||||
/// ParameterUsage is extra metadata for identifying a parameter based on its
|
||||
/// overload position
|
||||
enum class ParameterUsage {
|
||||
kNone = -1,
|
||||
{{- range .Sem.UniqueParameterNames }}
|
||||
k{{PascalCase .}},
|
||||
{{- end }}
|
||||
};
|
||||
|
||||
/// @returns a string representation of the given parameter usage.
|
||||
const char* str(ParameterUsage usage);
|
||||
|
||||
} // namespace sem
|
||||
} // namespace tint
|
||||
|
||||
#endif // SRC_SEM_PARAMETER_USAGE_H_
|
||||
Reference in New Issue
Block a user