blob: 9b587491652c3450ef7c834752e1b3a3217eb39d [file] [log] [blame]
// Copyright 2023 The Dawn & Tint Authors
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
////////////////////////////////////////////////////////////////////////////////
// File generated by 'tools/src/cmd/gen' using the template:
// src/tint/lang/spirv/builtin_fn.cc.tmpl
//
// To regenerate run: './tools/run gen'
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
#include "src/tint/lang/spirv/builtin_fn.h"
namespace tint::spirv {
const char* str(BuiltinFn i) {
switch (i) {
case BuiltinFn::kNone:
return "<none>";
case BuiltinFn::kArrayLength:
return "array_length";
case BuiltinFn::kAtomicLoad:
return "atomic_load";
case BuiltinFn::kAtomicStore:
return "atomic_store";
case BuiltinFn::kAtomicExchange:
return "atomic_exchange";
case BuiltinFn::kAtomicCompareExchange:
return "atomic_compare_exchange";
case BuiltinFn::kAtomicIAdd:
return "atomic_i_add";
case BuiltinFn::kAtomicISub:
return "atomic_i_sub";
case BuiltinFn::kAtomicSMax:
return "atomic_s_max";
case BuiltinFn::kAtomicSMin:
return "atomic_s_min";
case BuiltinFn::kAtomicUMax:
return "atomic_u_max";
case BuiltinFn::kAtomicUMin:
return "atomic_u_min";
case BuiltinFn::kAtomicAnd:
return "atomic_and";
case BuiltinFn::kAtomicOr:
return "atomic_or";
case BuiltinFn::kAtomicXor:
return "atomic_xor";
case BuiltinFn::kAtomicIIncrement:
return "atomic_i_increment";
case BuiltinFn::kAtomicIDecrement:
return "atomic_i_decrement";
case BuiltinFn::kDot:
return "dot";
case BuiltinFn::kImageDrefGather:
return "image_dref_gather";
case BuiltinFn::kImageFetch:
return "image_fetch";
case BuiltinFn::kImageGather:
return "image_gather";
case BuiltinFn::kImageQuerySize:
return "image_query_size";
case BuiltinFn::kImageQuerySizeLod:
return "image_query_size_lod";
case BuiltinFn::kImageQueryLevels:
return "image_query_levels";
case BuiltinFn::kImageQuerySamples:
return "image_query_samples";
case BuiltinFn::kImageRead:
return "image_read";
case BuiltinFn::kImageSampleImplicitLod:
return "image_sample_implicit_lod";
case BuiltinFn::kImageSampleProjImplicitLod:
return "image_sample_proj_implicit_lod";
case BuiltinFn::kImageSampleExplicitLod:
return "image_sample_explicit_lod";
case BuiltinFn::kImageSampleProjExplicitLod:
return "image_sample_proj_explicit_lod";
case BuiltinFn::kImageSampleDrefImplicitLod:
return "image_sample_dref_implicit_lod";
case BuiltinFn::kImageSampleDrefExplicitLod:
return "image_sample_dref_explicit_lod";
case BuiltinFn::kImageWrite:
return "image_write";
case BuiltinFn::kSampledImage:
return "sampled_image";
case BuiltinFn::kMatrixTimesMatrix:
return "matrix_times_matrix";
case BuiltinFn::kMatrixTimesScalar:
return "matrix_times_scalar";
case BuiltinFn::kMatrixTimesVector:
return "matrix_times_vector";
case BuiltinFn::kSelect:
return "select";
case BuiltinFn::kVectorTimesMatrix:
return "vector_times_matrix";
case BuiltinFn::kVectorTimesScalar:
return "vector_times_scalar";
case BuiltinFn::kNormalize:
return "normalize";
case BuiltinFn::kInverse:
return "inverse";
case BuiltinFn::kSign:
return "sign";
case BuiltinFn::kAbs:
return "abs";
case BuiltinFn::kSMax:
return "s_max";
case BuiltinFn::kSMin:
return "s_min";
case BuiltinFn::kSClamp:
return "s_clamp";
case BuiltinFn::kUMax:
return "u_max";
case BuiltinFn::kUMin:
return "u_min";
case BuiltinFn::kUClamp:
return "u_clamp";
case BuiltinFn::kFindILsb:
return "find_i_lsb";
case BuiltinFn::kFindSMsb:
return "find_s_msb";
case BuiltinFn::kFindUMsb:
return "find_u_msb";
case BuiltinFn::kRefract:
return "refract";
case BuiltinFn::kReflect:
return "reflect";
case BuiltinFn::kFaceForward:
return "face_forward";
case BuiltinFn::kLdexp:
return "ldexp";
case BuiltinFn::kModf:
return "modf";
case BuiltinFn::kFrexp:
return "frexp";
case BuiltinFn::kBitCount:
return "bit_count";
case BuiltinFn::kBitFieldInsert:
return "bit_field_insert";
case BuiltinFn::kBitFieldSExtract:
return "bit_field_s_extract";
case BuiltinFn::kBitFieldUExtract:
return "bit_field_u_extract";
case BuiltinFn::kAdd:
return "add";
case BuiltinFn::kSub:
return "sub";
case BuiltinFn::kMul:
return "mul";
case BuiltinFn::kSDiv:
return "s_div";
case BuiltinFn::kSMod:
return "s_mod";
case BuiltinFn::kSGreaterThan:
return "s_greater_than";
case BuiltinFn::kSGreaterThanEqual:
return "s_greater_than_equal";
case BuiltinFn::kSLessThan:
return "s_less_than";
case BuiltinFn::kSLessThanEqual:
return "s_less_than_equal";
case BuiltinFn::kUGreaterThan:
return "u_greater_than";
case BuiltinFn::kUGreaterThanEqual:
return "u_greater_than_equal";
case BuiltinFn::kULessThan:
return "u_less_than";
case BuiltinFn::kULessThanEqual:
return "u_less_than_equal";
case BuiltinFn::kConvertFToS:
return "convert_f_to_s";
case BuiltinFn::kConvertSToF:
return "convert_s_to_f";
case BuiltinFn::kConvertUToF:
return "convert_u_to_f";
case BuiltinFn::kBitwiseAnd:
return "bitwise_and";
case BuiltinFn::kBitwiseOr:
return "bitwise_or";
case BuiltinFn::kBitwiseXor:
return "bitwise_xor";
case BuiltinFn::kEqual:
return "equal";
case BuiltinFn::kNotEqual:
return "not_equal";
case BuiltinFn::kShiftLeftLogical:
return "shift_left_logical";
case BuiltinFn::kShiftRightLogical:
return "shift_right_logical";
case BuiltinFn::kShiftRightArithmetic:
return "shift_right_arithmetic";
case BuiltinFn::kNot:
return "not";
case BuiltinFn::kSNegate:
return "s_negate";
case BuiltinFn::kFMod:
return "f_mod";
case BuiltinFn::kOuterProduct:
return "outer_product";
case BuiltinFn::kSDot:
return "s_dot";
case BuiltinFn::kUDot:
return "u_dot";
case BuiltinFn::kCooperativeMatrixLoad:
return "cooperative_matrix_load";
case BuiltinFn::kCooperativeMatrixStore:
return "cooperative_matrix_store";
case BuiltinFn::kCooperativeMatrixMulAdd:
return "cooperative_matrix_mul_add";
}
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::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