blob: a0b4c62189af6c7227b14810b020022f9281b50b [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/hlsl/hlsl.def" -}}
#include "src/tint/lang/hlsl/builtin_fn.h"
namespace tint::hlsl {
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::kInterlockedCompareExchange:
case BuiltinFn::kInterlockedExchange:
case BuiltinFn::kInterlockedAdd:
case BuiltinFn::kInterlockedMax:
case BuiltinFn::kInterlockedMin:
case BuiltinFn::kInterlockedAnd:
case BuiltinFn::kInterlockedOr:
case BuiltinFn::kInterlockedXor:
case BuiltinFn::kWaveReadLaneAt:
return core::ir::Instruction::Accesses{core::ir::Instruction::Access::kLoad, core::ir::Instruction::Access::kStore};
case BuiltinFn::kTextureStore:
case BuiltinFn::kStore:
case BuiltinFn::kStore2:
case BuiltinFn::kStore3:
case BuiltinFn::kStore4:
case BuiltinFn::kStoreF16:
case BuiltinFn::kStore2F16:
case BuiltinFn::kStore3F16:
case BuiltinFn::kStore4F16:
return core::ir::Instruction::Accesses{core::ir::Instruction::Access::kStore};
case BuiltinFn::kLoad:
case BuiltinFn::kLoad2:
case BuiltinFn::kLoad3:
case BuiltinFn::kLoad4:
case BuiltinFn::kLoadF16:
case BuiltinFn::kLoad2F16:
case BuiltinFn::kLoad3F16:
case BuiltinFn::kLoad4F16:
case BuiltinFn::kGatherCmp:
case BuiltinFn::kGather:
case BuiltinFn::kGatherAlpha:
case BuiltinFn::kGatherBlue:
case BuiltinFn::kGatherGreen:
case BuiltinFn::kGatherRed:
case BuiltinFn::kSample:
case BuiltinFn::kSampleBias:
case BuiltinFn::kSampleCmp:
case BuiltinFn::kSampleCmpLevelZero:
case BuiltinFn::kSampleGrad:
case BuiltinFn::kSampleLevel:
return core::ir::Instruction::Accesses{core::ir::Instruction::Access::kLoad};
case BuiltinFn::kAsint:
case BuiltinFn::kAsuint:
case BuiltinFn::kAsfloat:
case BuiltinFn::kDot4AddI8Packed:
case BuiltinFn::kDot4AddU8Packed:
case BuiltinFn::kF32Tof16:
case BuiltinFn::kF16Tof32:
case BuiltinFn::kFrexp:
case BuiltinFn::kGetDimensions:
case BuiltinFn::kModf:
case BuiltinFn::kMul:
case BuiltinFn::kPackU8:
case BuiltinFn::kPackS8:
case BuiltinFn::kPackClampS8:
case BuiltinFn::kSign:
case BuiltinFn::kUnpackS8S32:
case BuiltinFn::kUnpackU8U32:
case BuiltinFn::kWaveGetLaneIndex:
case BuiltinFn::kWaveGetLaneCount:
case BuiltinFn::kNone:
break;
}
return core::ir::Instruction::Accesses{};
}
} // namespace tint::hlsl