blob: eb0c72c9e207647b7087ae4edd6c34304d1ca019 [file] [log] [blame]
// Copyright 2024 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/hlsl/builtin_fn.cc.tmpl
//
// To regenerate run: './tools/run gen'
//
// Do not modify this file directly
////////////////////////////////////////////////////////////////////////////////
#include "src/tint/lang/hlsl/builtin_fn.h"
namespace tint::hlsl {
const char* str(BuiltinFn i) {
switch (i) {
case BuiltinFn::kNone:
return "<none>";
case BuiltinFn::kAsint:
return "asint";
case BuiltinFn::kAsuint:
return "asuint";
case BuiltinFn::kAsfloat:
return "asfloat";
case BuiltinFn::kDot4AddI8Packed:
return "dot4add_i8packed";
case BuiltinFn::kDot4AddU8Packed:
return "dot4add_u8packed";
case BuiltinFn::kF32Tof16:
return "f32tof16";
case BuiltinFn::kF16Tof32:
return "f16tof32";
case BuiltinFn::kInterlockedCompareExchange:
return "InterlockedCompareExchange";
case BuiltinFn::kInterlockedExchange:
return "InterlockedExchange";
case BuiltinFn::kInterlockedAdd:
return "InterlockedAdd";
case BuiltinFn::kInterlockedMax:
return "InterlockedMax";
case BuiltinFn::kInterlockedMin:
return "InterlockedMin";
case BuiltinFn::kInterlockedAnd:
return "InterlockedAnd";
case BuiltinFn::kInterlockedOr:
return "InterlockedOr";
case BuiltinFn::kInterlockedXor:
return "InterlockedXor";
case BuiltinFn::kMul:
return "mul";
case BuiltinFn::kPackU8:
return "pack_u8";
case BuiltinFn::kPackS8:
return "pack_s8";
case BuiltinFn::kPackClampS8:
return "pack_clamp_s8";
case BuiltinFn::kSign:
return "sign";
case BuiltinFn::kTextureStore:
return "textureStore";
case BuiltinFn::kUnpackS8S32:
return "unpack_s8s32";
case BuiltinFn::kUnpackU8U32:
return "unpack_u8u32";
case BuiltinFn::kWaveGetLaneIndex:
return "WaveGetLaneIndex";
case BuiltinFn::kWaveGetLaneCount:
return "WaveGetLaneCount";
case BuiltinFn::kWaveReadLaneAt:
return "WaveReadLaneAt";
case BuiltinFn::kModf:
return "modf";
case BuiltinFn::kFrexp:
return "frexp";
case BuiltinFn::kLoad:
return "Load";
case BuiltinFn::kLoad2:
return "Load2";
case BuiltinFn::kLoad3:
return "Load3";
case BuiltinFn::kLoad4:
return "Load4";
case BuiltinFn::kLoadF16:
return "LoadF16";
case BuiltinFn::kLoad2F16:
return "Load2F16";
case BuiltinFn::kLoad3F16:
return "Load3F16";
case BuiltinFn::kLoad4F16:
return "Load4F16";
case BuiltinFn::kStore:
return "Store";
case BuiltinFn::kStore2:
return "Store2";
case BuiltinFn::kStore3:
return "Store3";
case BuiltinFn::kStore4:
return "Store4";
case BuiltinFn::kStoreF16:
return "StoreF16";
case BuiltinFn::kStore2F16:
return "Store2F16";
case BuiltinFn::kStore3F16:
return "Store3F16";
case BuiltinFn::kStore4F16:
return "Store4F16";
case BuiltinFn::kGatherCmp:
return "GatherCmp";
case BuiltinFn::kGather:
return "Gather";
case BuiltinFn::kGatherAlpha:
return "GatherAlpha";
case BuiltinFn::kGatherBlue:
return "GatherBlue";
case BuiltinFn::kGatherGreen:
return "GatherGreen";
case BuiltinFn::kGatherRed:
return "GatherRed";
case BuiltinFn::kGetDimensions:
return "GetDimensions";
case BuiltinFn::kSample:
return "Sample";
case BuiltinFn::kSampleBias:
return "SampleBias";
case BuiltinFn::kSampleCmp:
return "SampleCmp";
case BuiltinFn::kSampleCmpLevelZero:
return "SampleCmpLevelZero";
case BuiltinFn::kSampleGrad:
return "SampleGrad";
case BuiltinFn::kSampleLevel:
return "SampleLevel";
}
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