blob: a01da2670c384ff4a07eed09af0dcef6f0340fd1 [file] [log] [blame]
{{- /*
--------------------------------------------------------------------------------
Template file for use with tools/src/cmd/gen to generate builtin_fn.cc
To update the generated file, run:
./tools/run gen
See:
* tools/src/cmd/gen for structures used by this template
* https://golang.org/pkg/text/template/ for documentation on the template syntax
--------------------------------------------------------------------------------
*/ -}}
{{- $I := LoadIntrinsics "src/tint/lang/spirv/spirv.def" -}}
#include "src/tint/lang/spirv/builtin_fn.h"
namespace tint::spirv {
const char* str(BuiltinFn i) {
switch (i) {
case BuiltinFn::kNone:
return "<none>";
{{- range $I.Sem.Builtins }}
case BuiltinFn::k{{PascalCase .Name}}:
return "{{.Name}}";
{{- end }}
}
return "<unknown>";
}
tint::core::ir::Instruction::Accesses GetSideEffects(BuiltinFn fn) {
switch (fn) {
case BuiltinFn::kAtomicLoad:
case BuiltinFn::kImageDrefGather:
case BuiltinFn::kImageFetch:
case BuiltinFn::kImageGather:
case BuiltinFn::kImageRead:
case BuiltinFn::kImageSampleImplicitLod:
case BuiltinFn::kImageSampleExplicitLod:
case BuiltinFn::kImageSampleProjImplicitLod:
case BuiltinFn::kImageSampleProjExplicitLod:
case BuiltinFn::kImageSampleDrefImplicitLod:
case BuiltinFn::kImageSampleDrefExplicitLod:
case BuiltinFn::kImageSampleProjDrefImplicitLod:
case BuiltinFn::kImageSampleProjDrefExplicitLod:
case BuiltinFn::kImage:
case BuiltinFn::kSampledImage:
case BuiltinFn::kCooperativeMatrixLoad:
return core::ir::Instruction::Accesses{core::ir::Instruction::Access::kLoad};
case BuiltinFn::kImageWrite:
case BuiltinFn::kModf:
case BuiltinFn::kFrexp:
case BuiltinFn::kCooperativeMatrixStore:
return core::ir::Instruction::Accesses{core::ir::Instruction::Access::kStore};
case BuiltinFn::kAtomicAnd:
case BuiltinFn::kAtomicCompareExchange:
case BuiltinFn::kAtomicExchange:
case BuiltinFn::kAtomicIAdd:
case BuiltinFn::kAtomicISub:
case BuiltinFn::kAtomicOr:
case BuiltinFn::kAtomicSMax:
case BuiltinFn::kAtomicSMin:
case BuiltinFn::kAtomicStore:
case BuiltinFn::kAtomicUMax:
case BuiltinFn::kAtomicUMin:
case BuiltinFn::kAtomicXor:
case BuiltinFn::kAtomicIIncrement:
case BuiltinFn::kAtomicIDecrement:
return core::ir::Instruction::Accesses{core::ir::Instruction::Access::kLoad, core::ir::Instruction::Access::kStore};
case BuiltinFn::kArrayLength:
case BuiltinFn::kDot:
case BuiltinFn::kImageQuerySize:
case BuiltinFn::kImageQuerySizeLod:
case BuiltinFn::kImageQueryLevels:
case BuiltinFn::kImageQuerySamples:
case BuiltinFn::kMatrixTimesMatrix:
case BuiltinFn::kMatrixTimesScalar:
case BuiltinFn::kMatrixTimesVector:
case BuiltinFn::kSelect:
case BuiltinFn::kVectorTimesMatrix:
case BuiltinFn::kVectorTimesScalar:
case BuiltinFn::kSDot:
case BuiltinFn::kUDot:
case BuiltinFn::kNone:
case BuiltinFn::kNormalize:
case BuiltinFn::kInverse:
case BuiltinFn::kSign:
case BuiltinFn::kAbs:
case BuiltinFn::kSMax:
case BuiltinFn::kSMin:
case BuiltinFn::kSClamp:
case BuiltinFn::kUMax:
case BuiltinFn::kUMin:
case BuiltinFn::kUClamp:
case BuiltinFn::kFindILsb:
case BuiltinFn::kFindSMsb:
case BuiltinFn::kFindUMsb:
case BuiltinFn::kRefract:
case BuiltinFn::kReflect:
case BuiltinFn::kFaceForward:
case BuiltinFn::kLdexp:
case BuiltinFn::kCooperativeMatrixMulAdd:
case BuiltinFn::kBitCount:
case BuiltinFn::kBitFieldInsert:
case BuiltinFn::kBitFieldSExtract:
case BuiltinFn::kBitFieldUExtract:
case BuiltinFn::kAdd:
case BuiltinFn::kSub:
case BuiltinFn::kMul:
case BuiltinFn::kSDiv:
case BuiltinFn::kSMod:
case BuiltinFn::kConvertFToS:
case BuiltinFn::kConvertSToF:
case BuiltinFn::kConvertUToF:
case BuiltinFn::kBitwiseAnd:
case BuiltinFn::kBitwiseOr:
case BuiltinFn::kBitwiseXor:
case BuiltinFn::kEqual:
case BuiltinFn::kNotEqual:
case BuiltinFn::kSGreaterThan:
case BuiltinFn::kSGreaterThanEqual:
case BuiltinFn::kSLessThan:
case BuiltinFn::kSLessThanEqual:
case BuiltinFn::kUGreaterThan:
case BuiltinFn::kUGreaterThanEqual:
case BuiltinFn::kULessThan:
case BuiltinFn::kULessThanEqual:
case BuiltinFn::kShiftLeftLogical:
case BuiltinFn::kShiftRightLogical:
case BuiltinFn::kShiftRightArithmetic:
case BuiltinFn::kNot:
case BuiltinFn::kSNegate:
case BuiltinFn::kFMod:
case BuiltinFn::kOuterProduct:
break;
}
return core::ir::Instruction::Accesses{};
}
} // namespace tint::spirv