DirectXShaderCompiler/include/dxc/HlslIntrinsicOp.h

325 строки
8.0 KiB
C
Исходник Обычный вид История

2016-12-28 22:52:27 +03:00
///////////////////////////////////////////////////////////////////////////////
// //
// HlslIntrinsicOp.h //
// Copyright (C) Microsoft Corporation. All rights reserved. //
2017-01-28 03:48:08 +03:00
// This file is distributed under the University of Illinois Open Source //
// License. See LICENSE.TXT for details. //
2016-12-28 22:52:27 +03:00
// //
// Enumeration for HLSL intrinsics operations. //
// //
///////////////////////////////////////////////////////////////////////////////
#pragma once
namespace hlsl
{
enum class IntrinsicOp
{
/* <py>
import hctdb_instrhelp
</py> */
/* <py::lines('HLSL-INTRINSICS')>hctdb_instrhelp.enum_hlsl_intrinsics()</py>*/
// HLSL-INTRINSICS:BEGIN
IOP_AddUint64,
IOP_AllMemoryBarrier,
IOP_AllMemoryBarrierWithGroupSync,
IOP_CheckAccessFullyMapped,
IOP_D3DCOLORtoUBYTE4,
IOP_DeviceMemoryBarrier,
IOP_DeviceMemoryBarrierWithGroupSync,
IOP_EvaluateAttributeAtSample,
IOP_EvaluateAttributeCentroid,
IOP_EvaluateAttributeSnapped,
IOP_GetAttributeAtVertex,
2016-12-28 22:52:27 +03:00
IOP_GetRenderTargetSampleCount,
IOP_GetRenderTargetSamplePosition,
IOP_GroupMemoryBarrier,
IOP_GroupMemoryBarrierWithGroupSync,
IOP_InterlockedAdd,
IOP_InterlockedAnd,
IOP_InterlockedCompareExchange,
IOP_InterlockedCompareStore,
IOP_InterlockedExchange,
IOP_InterlockedMax,
IOP_InterlockedMin,
IOP_InterlockedOr,
IOP_InterlockedXor,
IOP_NonUniformResourceIndex,
IOP_Process2DQuadTessFactorsAvg,
IOP_Process2DQuadTessFactorsMax,
IOP_Process2DQuadTessFactorsMin,
IOP_ProcessIsolineTessFactors,
IOP_ProcessQuadTessFactorsAvg,
IOP_ProcessQuadTessFactorsMax,
IOP_ProcessQuadTessFactorsMin,
IOP_ProcessTriTessFactorsAvg,
IOP_ProcessTriTessFactorsMax,
IOP_ProcessTriTessFactorsMin,
IOP_QuadReadAcrossDiagonal,
IOP_QuadReadAcrossX,
IOP_QuadReadAcrossY,
IOP_QuadReadLaneAt,
IOP_WaveActiveAllEqual,
IOP_WaveActiveAllTrue,
IOP_WaveActiveAnyTrue,
IOP_WaveActiveBallot,
IOP_WaveActiveBitAnd,
IOP_WaveActiveBitOr,
IOP_WaveActiveBitXor,
IOP_WaveActiveCountBits,
IOP_WaveActiveMax,
IOP_WaveActiveMin,
IOP_WaveActiveProduct,
IOP_WaveActiveSum,
IOP_WaveGetLaneCount,
IOP_WaveGetLaneIndex,
IOP_WaveIsFirstLane,
IOP_WavePrefixCountBits,
IOP_WavePrefixProduct,
IOP_WavePrefixSum,
IOP_WaveReadLaneAt,
IOP_WaveReadLaneFirst,
IOP_abort,
IOP_abs,
IOP_acos,
IOP_all,
IOP_any,
IOP_asdouble,
IOP_asfloat,
IOP_asin,
IOP_asint,
IOP_asuint,
IOP_atan,
IOP_atan2,
IOP_ceil,
IOP_clamp,
IOP_clip,
IOP_cos,
IOP_cosh,
IOP_countbits,
IOP_cross,
IOP_ddx,
IOP_ddx_coarse,
IOP_ddx_fine,
IOP_ddy,
IOP_ddy_coarse,
IOP_ddy_fine,
IOP_degrees,
IOP_determinant,
IOP_distance,
IOP_dot,
IOP_dst,
IOP_exp,
IOP_exp2,
IOP_f16tof32,
IOP_f32tof16,
IOP_faceforward,
IOP_firstbithigh,
IOP_firstbitlow,
IOP_floor,
IOP_fma,
IOP_fmod,
IOP_frac,
IOP_frexp,
IOP_fwidth,
IOP_isfinite,
IOP_isinf,
IOP_isnan,
IOP_ldexp,
IOP_length,
IOP_lerp,
IOP_lit,
IOP_log,
IOP_log10,
IOP_log2,
IOP_mad,
IOP_max,
IOP_min,
IOP_modf,
IOP_msad4,
IOP_mul,
IOP_normalize,
IOP_pow,
IOP_radians,
IOP_rcp,
IOP_reflect,
IOP_refract,
IOP_reversebits,
IOP_round,
IOP_rsqrt,
IOP_saturate,
IOP_sign,
IOP_sin,
IOP_sincos,
IOP_sinh,
IOP_smoothstep,
IOP_source_mark,
IOP_sqrt,
IOP_step,
IOP_tan,
IOP_tanh,
IOP_tex1D,
IOP_tex1Dbias,
IOP_tex1Dgrad,
IOP_tex1Dlod,
IOP_tex1Dproj,
IOP_tex2D,
IOP_tex2Dbias,
IOP_tex2Dgrad,
IOP_tex2Dlod,
IOP_tex2Dproj,
IOP_tex3D,
IOP_tex3Dbias,
IOP_tex3Dgrad,
IOP_tex3Dlod,
IOP_tex3Dproj,
IOP_texCUBE,
IOP_texCUBEbias,
IOP_texCUBEgrad,
IOP_texCUBElod,
IOP_texCUBEproj,
IOP_transpose,
IOP_trunc,
MOP_Append,
MOP_RestartStrip,
MOP_CalculateLevelOfDetail,
MOP_CalculateLevelOfDetailUnclamped,
MOP_GetDimensions,
MOP_Load,
MOP_Sample,
MOP_SampleBias,
MOP_SampleCmp,
MOP_SampleCmpLevelZero,
MOP_SampleGrad,
MOP_SampleLevel,
MOP_Gather,
MOP_GatherAlpha,
MOP_GatherBlue,
MOP_GatherCmp,
MOP_GatherCmpAlpha,
MOP_GatherCmpBlue,
MOP_GatherCmpGreen,
MOP_GatherCmpRed,
MOP_GatherGreen,
MOP_GatherRed,
MOP_GetSamplePosition,
MOP_Load2,
MOP_Load3,
MOP_Load4,
MOP_InterlockedAdd,
MOP_InterlockedAnd,
MOP_InterlockedCompareExchange,
MOP_InterlockedCompareStore,
MOP_InterlockedExchange,
MOP_InterlockedMax,
MOP_InterlockedMin,
MOP_InterlockedOr,
MOP_InterlockedXor,
MOP_Store,
MOP_Store2,
MOP_Store3,
MOP_Store4,
MOP_DecrementCounter,
MOP_IncrementCounter,
MOP_Consume,
// unsigned
IOP_InterlockedUMax,
IOP_InterlockedUMin,
IOP_WaveActiveUMax,
IOP_WaveActiveUMin,
IOP_WaveActiveUProduct,
IOP_WaveActiveUSum,
IOP_WavePrefixUProduct,
IOP_WavePrefixUSum,
IOP_uclamp,
IOP_ufirstbithigh,
IOP_umad,
IOP_umax,
IOP_umin,
2017-04-05 20:39:56 +03:00
IOP_umul,
2016-12-28 22:52:27 +03:00
MOP_InterlockedUMax,
MOP_InterlockedUMin,
Num_Intrinsics,
// HLSL-INTRINSICS:END
};
inline bool HasUnsignedIntrinsicOpcode(IntrinsicOp opcode) {
switch (opcode) {
/* <py>
import hctdb_instrhelp
</py> */
/* <py::lines('HLSL-HAS-UNSIGNED-INTRINSICS')>hctdb_instrhelp.has_unsigned_hlsl_intrinsics()</py>*/
// HLSL-HAS-UNSIGNED-INTRINSICS:BEGIN
case IntrinsicOp::IOP_InterlockedMax:
case IntrinsicOp::IOP_InterlockedMin:
case IntrinsicOp::IOP_WaveActiveMax:
case IntrinsicOp::IOP_WaveActiveMin:
case IntrinsicOp::IOP_WaveActiveProduct:
case IntrinsicOp::IOP_WaveActiveSum:
case IntrinsicOp::IOP_WavePrefixProduct:
case IntrinsicOp::IOP_WavePrefixSum:
case IntrinsicOp::IOP_clamp:
case IntrinsicOp::IOP_firstbithigh:
case IntrinsicOp::IOP_mad:
case IntrinsicOp::IOP_max:
case IntrinsicOp::IOP_min:
2017-04-05 20:39:56 +03:00
case IntrinsicOp::IOP_mul:
2016-12-28 22:52:27 +03:00
case IntrinsicOp::MOP_InterlockedMax:
case IntrinsicOp::MOP_InterlockedMin:
// HLSL-HAS-UNSIGNED-INTRINSICS:END
return true;
default:
return false;
}
}
inline unsigned GetUnsignedIntrinsicOpcode(IntrinsicOp opcode) {
switch (opcode) {
/* <py>
import hctdb_instrhelp
</py> */
/* <py::lines('HLSL-GET-UNSIGNED-INTRINSICS')>hctdb_instrhelp.get_unsigned_hlsl_intrinsics()</py>*/
// HLSL-GET-UNSIGNED-INTRINSICS:BEGIN
case IntrinsicOp::IOP_InterlockedMax:
return static_cast<unsigned>(IntrinsicOp::IOP_InterlockedUMax);
case IntrinsicOp::IOP_InterlockedMin:
return static_cast<unsigned>(IntrinsicOp::IOP_InterlockedUMin);
case IntrinsicOp::IOP_WaveActiveMax:
return static_cast<unsigned>(IntrinsicOp::IOP_WaveActiveUMax);
case IntrinsicOp::IOP_WaveActiveMin:
return static_cast<unsigned>(IntrinsicOp::IOP_WaveActiveUMin);
case IntrinsicOp::IOP_WaveActiveProduct:
return static_cast<unsigned>(IntrinsicOp::IOP_WaveActiveUProduct);
case IntrinsicOp::IOP_WaveActiveSum:
return static_cast<unsigned>(IntrinsicOp::IOP_WaveActiveUSum);
case IntrinsicOp::IOP_WavePrefixProduct:
return static_cast<unsigned>(IntrinsicOp::IOP_WavePrefixUProduct);
case IntrinsicOp::IOP_WavePrefixSum:
return static_cast<unsigned>(IntrinsicOp::IOP_WavePrefixUSum);
case IntrinsicOp::IOP_clamp:
return static_cast<unsigned>(IntrinsicOp::IOP_uclamp);
case IntrinsicOp::IOP_firstbithigh:
return static_cast<unsigned>(IntrinsicOp::IOP_ufirstbithigh);
case IntrinsicOp::IOP_mad:
return static_cast<unsigned>(IntrinsicOp::IOP_umad);
case IntrinsicOp::IOP_max:
return static_cast<unsigned>(IntrinsicOp::IOP_umax);
case IntrinsicOp::IOP_min:
return static_cast<unsigned>(IntrinsicOp::IOP_umin);
2017-04-05 20:39:56 +03:00
case IntrinsicOp::IOP_mul:
return static_cast<unsigned>(IntrinsicOp::IOP_umul);
2016-12-28 22:52:27 +03:00
case IntrinsicOp::MOP_InterlockedMax:
return static_cast<unsigned>(IntrinsicOp::MOP_InterlockedUMax);
case IntrinsicOp::MOP_InterlockedMin:
return static_cast<unsigned>(IntrinsicOp::MOP_InterlockedUMin);
// HLSL-GET-UNSIGNED-INTRINSICS:END
default:
return static_cast<unsigned>(opcode);
}
}
}