// Copyright (C) Microsoft Corporation. All rights reserved. // This file is distributed under the University of Illinois Open Source License. See LICENSE.TXT for details. // // See hctdb.py for the implementation of intrinsic file processing. // // Intrinsic declarations are grouped into namespaces that // turn into qualifiers for the generated names. This lets // intrinsics be grouped into sets such as base function-style // intrinsics, Texture1D intrinsics, etc. // // Intrinsic declarations are a line of the form: // // \[\[[attr]\]\] ([ [, ... ]]) [ : ] // // is a C++ identifier for the intrinsic or argument name. // // is the D3DIOP_* (or D3DMOP_* if the namespace has "Method" // in the name) enumerant. By default it's the same as the intrinsic // name, but can be given to set it arbitrarily. // // is one of "in", "out" or "inout" plus optional qualifiers // "col_major", "row_major". // variadic functions assume of "in" for any arguments that are not // explicitly specified. // // is where most of the work goes. lets you // specify particular types and layouts for arguments and // also lets you indicate which types must share characteristics // with other types. can be a simple scalar like "bool" // or it can require an N-vector with "bool" or an N-by-M // matrix with "bool". You can refer to input columns // and rows with r, c, r2 and c2, so "float" means a // float matrix with the same number of rows and columns and // the size comes from the parse input. "<>" means any kind // of layout is acceptable. // // Basic types are bool, int, uint, u64, float, sampler1d, sampler2d, // sampler3d, sampler_cube, sampler_cmp, sampler, wave and void. // There are meta-types too: any_int, uint_only, numeric and any. // // Along with a type and layout you can also give relations // between types in an intrinsic. The types of an intrinsic // are indexed start with 0 at the return type and increasing // left to right (first argument is 1, second is 2, etc.). // $match says that the template type (layout) of // a particular type must match the template type of the X'th // type and that the component type (base type) of a particular // type must match the component type of the Y'th type. // For example, in "float<> acos(in $match<0, 0> float<> x)" the // $match<0, 0> means that both the template and component type // of the argument must match that of the return type (index 0). // The float<> means that any layout (scalar/vector/matrix) of // floats is acceptable, and then the parameter and return // type must match. // // A value of -1 for X in $match is a special marker for // object method intrinsics meaning that the type is taken // from the object's template type. // // A value of -1 for Y in $match is a special marker for // object method intrinsics meaning that the component type // of the type is taken from the first subelement of the // object's template type. // // Certain $match situations are aliased for readability // and conciseness. // // $classT - This equates to $match<-1, 0> void and is // used for method return types that are set from // the object template type. // // $funcT - This equates to $match<-3, 0> void and is // used for method return types that are set from // the function template type. // // $typeN - This equates to $match and is // shorthand for a direct match of another type. // For example, in "$type1 abs(in numeric<> x)" the // $type means that the return type is a direct match // of the argument type ($type cannot be used on the // first argument since there's nothing to match at // that point and can't refer to the return type as // it is matched after the inputs). // namespace Intrinsics { int<4> [[rn]] D3DCOLORtoUBYTE4(in $match<0, 1> float<4> x) : d3dcolortoubyte4; uint [[rn]] GetRenderTargetSampleCount() : rtsampleinfo; float<2> [[rn]] GetRenderTargetSamplePosition(in int s) : rtsamplepos; void [[]] abort(); $type1 [[rn,unsigned_op=uabs]] abs(in numeric<> x); $type1 [[rn]] acos(in float_like<> x); bool [[rn]] all(in any<> x); void [[]] AllMemoryBarrier() : syncallmemory_ug; void [[]] AllMemoryBarrierWithGroupSync() : syncgroupandallmemory_ug; bool [[rn]] any(in any<> x); double<> [[rn]] asdouble(in $match<0, 1> uint<> x, in $match<0, 2> uint<> y) : reinterpret_fuse_double; float<> [[rn]] asfloat(in $match<0, 1> numeric32_only<> x) : reinterpret_float; float16_t<> [[rn]] asfloat16(in $match<0,1> numeric16_only<> x) : reinterpret_float16; int16_t<> [[rn]] asint16(in $match<0,1> numeric16_only<> x) : reinterpret_int16; $type1 [[rn]] asin(in float_like<> x); int<> [[rn]] asint(in $match<0, 1> numeric32_only<> x) : reinterpret_int; void [[]] asuint(in double<> d, out $match<1, 2> uint<> x, out $match<1, 3> uint<> y) : reinterpret_split_double_uint; uint<> [[rn]] asuint(in $match<0, 1> numeric32_only<> x) : reinterpret_uint; uint16_t<> [[rn]] asuint16(in $match<0,1> numeric16_only<> x) : reinterpret_uint16; $type1 [[rn]] atan(in float_like<> x); $type1 [[rn]] atan2(in float_like<> x, in $type1 y); $type1 [[rn]] ceil(in float_like<> x); $type1 [[rn,unsigned_op=uclamp]] clamp(in numeric<> x, in $type1 min, in $type1 max); void [[]] clip(in float<> x); $type1 [[rn]] cos(in float_like<> x); $type1 [[rn]] cosh(in float_like<> x); $match<1, 0> uint<> [[rn]] countbits(in any_int<> x); $type1 [[rn]] cross(in float_like<3> a, in $type1 b); $type1 [[rn]] ddx(in float_like<> x); $type1 [[rn]] ddx_coarse(in float_like<> x); $type1 [[rn]] ddx_fine(in float_like<> x); $type1 [[rn]] ddy(in float_like<> x); $type1 [[rn]] ddy_coarse(in float_like<> x); $type1 [[rn]] ddy_fine(in float_like<> x); $type1 [[rn]] degrees(in float_like<> x); $match<0, 1> float_like [[rn]] determinant(in float_like x); void [[]] DeviceMemoryBarrier() : syncdevicememory_ug; void [[]] DeviceMemoryBarrierWithGroupSync() : syncgroupanddevicememory_ug; $match<0, 1> float_like [[rn]] distance(in float_like a, in $type1 b); $match<0, 1> numeric [[rn]] dot(in numeric a, in $type1 b); $type1 [[rn]] dst(in numeric<4> a, in $type1 b); // void errorf(in string Format, ...); $type1 [[rn]] EvaluateAttributeAtSample(in numeric<> value, in uint index); $type1 [[rn]] EvaluateAttributeCentroid(in numeric<> value); $type1 [[rn]] EvaluateAttributeSnapped(in numeric<> value, in int<2> offset); $type1 [[rn]] GetAttributeAtVertex(in numeric<> value, in uint VertexID); $type1 [[rn]] exp(in float_like<> x); $type1 [[rn]] exp2(in float_like<> x); float<> [[rn]] f16tof32(in uint<> x); // Use float for DXIL don't support f16 on f32tof16. uint<> [[rn]] f32tof16(in float<> x); $type1 [[rn]] faceforward(in float_like N, in $type1 I, in $type1 Ng); $match<1, 0> uint<> [[rn,unsigned_op=ufirstbithigh,overload=0]] firstbithigh(in any_int<> x); $match<1, 0> uint<> [[rn]] firstbitlow(in any_int<> x); $type1 [[rn]] floor(in float_like<> x); $type1 [[rn]] fma(in double_only<> a, in $type1 b, in $type1 c); $type1 [[rn]] fmod(in float_like<> a, in $type1 b); $type1 [[rn]] frac(in float_like<> x); $type1 [[]] frexp(in float<> x, out $type1 exp); $type1 [[rn]] fwidth(in float_like<> x); void [[]] GroupMemoryBarrier() : syncsharedmemory; void [[]] GroupMemoryBarrierWithGroupSync() : syncgroupandsharedmemory; // 64-bit integers interlocks void [[]] InterlockedAdd(in int64_only result, in u64 value); void [[]] InterlockedAdd(in int64_only result, in u64 value, out any_int64 original) : interlockedadd_immediate; void [[unsigned_op=InterlockedUMin,overload=0]] InterlockedMin(in int64_only result, in any_int64 value) : interlockedmin; void [[unsigned_op=InterlockedUMin,overload=0]] InterlockedMin(in int64_only result, in any_int64 value, out any_int64 original) : interlockedmin_immediate; void [[unsigned_op=InterlockedUMax,overload=0]] InterlockedMax(in int64_only result, in any_int64 value) : interlockedmax; void [[unsigned_op=InterlockedUMax,overload=0]] InterlockedMax(in int64_only result, in any_int64 value, out any_int64 original) : interlockedmax_immediate; void [[]] InterlockedAnd(in int64_only result, in u64 value); void [[]] InterlockedAnd(in int64_only result, in u64 value, out any_int64 original) : interlockedand_immediate; void [[]] InterlockedOr(in int64_only result, in u64 value); void [[]] InterlockedOr(in int64_only result, in u64 value, out any_int64 original) : interlockedor_immediate; void [[]] InterlockedXor(in int64_only result, in u64 value); void [[]] InterlockedXor(in int64_only result, in u64 value, out any_int64 original) : interlockedxor_immediate; void [[]] InterlockedCompareStore(in int64_only result, in u64 compare, in u64 value); void [[]] InterlockedExchange(in int64_only result, in any_int64 value, out any_int64 original); void [[]] InterlockedCompareExchange(in int64_only result, in u64 compare, in u64 value, out any_int64 original); // floating point interlocks void [[]] InterlockedExchange(in float32_only result, in float value, out float original); void [[]] InterlockedCompareStoreFloatBitwise(in float32_only result, in float compare, in float value); void [[]] InterlockedCompareExchangeFloatBitwise(in float32_only result, in float compare, in float value, out float original); // 32-bit integer interlocks void [[]] InterlockedAdd(in int32_only result, in uint value); void [[]] InterlockedAdd(in int32_only result, in uint value, out any_int32 original) : interlockedadd_immediate; void [[unsigned_op=InterlockedUMin,overload=0]] InterlockedMin(in int32_only result, in any_int32 value) : interlockedmin; void [[unsigned_op=InterlockedUMin,overload=0]] InterlockedMin(in int32_only result, in any_int32 value, out any_int32 original) : interlockedmin_immediate; void [[unsigned_op=InterlockedUMax,overload=0]] InterlockedMax(in int32_only result, in any_int32 value) : interlockedmax; void [[unsigned_op=InterlockedUMax,overload=0]] InterlockedMax(in int32_only result, in any_int32 value, out any_int32 original) : interlockedmax_immediate; void [[]] InterlockedAnd(in int32_only result, in uint value); void [[]] InterlockedAnd(in int32_only result, in uint value, out any_int32 original) : interlockedand_immediate; void [[]] InterlockedOr(in int32_only result, in uint value); void [[]] InterlockedOr(in int32_only result, in uint value, out any_int32 original) : interlockedor_immediate; void [[]] InterlockedXor(in int32_only result, in uint value); void [[]] InterlockedXor(in int32_only result, in uint value, out any_int32 original) : interlockedxor_immediate; void [[]] InterlockedCompareStore(in int32_only result, in uint compare, in uint value); void [[]] InterlockedExchange(in int32_only result, in uint value, out any_int32 original); void [[]] InterlockedCompareExchange(in int32_only result, in uint compare, in uint value, out any_int32 original); $match<1, 0> bool<> [[rn]] isfinite(in float<> x); $match<1, 0> bool<> [[rn]] isinf(in float<> x); $match<1, 0> bool<> [[rn]] isnan(in float<> x); $type1 [[rn]] ldexp(in float_like<> x, in $type1 exp); $match<0, 1> float_like [[rn]] length(in float_like x); $type1 [[rn]] lerp(in float_like<> a, in $type1 b, in $type1 s); $match<0, 1> float_like<4> [[rn]] lit(in float_like l, in $match<2, 1> float_like h, in $match<3, 1> float_like m); $type1 [[rn]] log(in float_like<> x); $type1 [[rn]] log10(in float_like<> x); $type1 [[rn]] log2(in float_like<> x); $type1 [[rn,unsigned_op=umad]] mad(in numeric<> a, in $type1 b, in $type1 c); $type1 [[rn,unsigned_op=umax]] max(in numeric<> a, in $type1 b); $type1 [[rn,unsigned_op=umin]] min(in numeric<> a, in $type1 b); $type1 [[]] modf(in float_like<> x, out $type1 ip); uint<4> [[rn]] msad4(in uint reference, in uint<2> source, in uint<4> accum); numeric [[rn]] mul(in $match<1, 0> numeric a, in $match<2, 0> numeric b) : mul_ss; numeric [[rn]] mul(in $match<1, 0> numeric a, in $match<2, 0> numeric b) : mul_sv; numeric [[rn]] mul(in $match<1, 0> numeric a, in $match<2, 0> numeric b) : mul_sm; numeric [[rn]] mul(in $match<1, 0> numeric a, in $match<2, 0> numeric b) : mul_vs; numeric [[rn]] mul(in $match<1, 0> numeric a, in $match<2, 0> numeric b) : mul_vv; numeric [[rn,unsigned_op=umul]] mul(in $match<1, 0> numeric a, in col_major $match<2, 0> numeric b) : mul_vm; numeric [[rn]] mul(in $match<1, 0> numeric a, in $match<2, 0> numeric b) : mul_ms; numeric [[rn,unsigned_op=umul]] mul(in row_major $match<1, 0> numeric a, in $match<2, 0> numeric b) : mul_mv; numeric [[rn,unsigned_op=umul]] mul(in row_major $match<1, 0> numeric a, in col_major $match<2, 0> numeric b) : mul_mm; $type1 [[rn]] normalize(in float_like x); $type1 [[rn]] pow(in float_like<> x, in $type1 y); void [[]] printf(in string Format, ...); void [[]] Process2DQuadTessFactorsAvg(in float<4> RawEdgeFactors, in float<2> InsideScale, out float<4> RoundedEdgeFactors, out float<2> RoundedInsideFactors, out float<2> UnroundedInsideFactors) : ptf_2dqavg; void [[]] Process2DQuadTessFactorsMax(in float<4> RawEdgeFactors, in float<2> InsideScale, out float<4> RoundedEdgeFactors, out float<2> RoundedInsideFactors, out float<2> UnroundedInsideFactors) : ptf_2dqmax; void [[]] Process2DQuadTessFactorsMin(in float<4> RawEdgeFactors, in float<2> InsideScale, out float<4> RoundedEdgeFactors, out float<2> RoundedInsideFactors, out float<2> UnroundedInsideFactors) : ptf_2dqmin; void [[]] ProcessIsolineTessFactors(in float<1> RawDetailFactor, in float<1> RawDensityFactor, out float<1> RoundedDetailFactorr, out float<1> RoundedDensityFactor) : ptf_i; void [[]] ProcessQuadTessFactorsAvg(in float<4> RawEdgeFactors, in float<1> InsideScale, out float<4> RoundedEdgeFactors, out float<2> RoundedInsideFactors, out float<2> UnroundedInsideFactors) : ptf_qavg; void [[]] ProcessQuadTessFactorsMax(in float<4> RawEdgeFactors, in float<1> InsideScale, out float<4> RoundedEdgeFactors, out float<2> RoundedInsideFactors, out float<2> UnroundedInsideFactors) : ptf_qmax; void [[]] ProcessQuadTessFactorsMin(in float<4> RawEdgeFactors, in float<1> InsideScale, out float<4> RoundedEdgeFactors, out float<2> RoundedInsideFactors, out float<2> UnroundedInsideFactors) : ptf_qmin; void [[]] ProcessTriTessFactorsAvg(in float<3> RawEdgeFactors, in float<1> InsideScale, out float<3> RoundedEdgeFactors, out float<1> RoundedInsideFactor, out float<1> UnroundedInsideFactor) : ptf_tmin; void [[]] ProcessTriTessFactorsMax(in float<3> RawEdgeFactors, in float<1> InsideScale, out float<3> RoundedEdgeFactors, out float<1> RoundedInsideFactor, out float<1> UnroundedInsideFactor) : ptf_tmax; void [[]] ProcessTriTessFactorsMin(in float<3> RawEdgeFactors, in float<1> InsideScale, out float<3> RoundedEdgeFactors, out float<1> RoundedInsideFactor, out float<1> UnroundedInsideFactor) : ptf_tavg; $type1 [[rn]] radians(in float_like<> x); $type1 [[rn]] rcp(in any_float<> x) : rcp_approx; $type1 [[rn]] reflect(in float_like i, in $type1 n); $type1 [[rn]] refract(in float_like i, in $type1 n, in $match<3, 1> float_like ri); $type1 [[rn]] reversebits(in any_int<> x); $type1 [[rn]] round(in float_like<> x); $type1 [[rn]] rsqrt(in float_like<> x); $type1 [[rn]] saturate(in any_float<> x); $match<1, 0> int<> [[rn,unsigned_op=usign,overload=0]] sign(in numeric<> x); $type1 [[rn]] sin(in float_like<> x); void [[]] sincos(in float_like<> x, out $type1 s, out $type1 c); $type1 [[rn]] sinh(in float_like<> x); $type1 [[rn]] smoothstep(in float_like<> a, in $type1 b, in $type1 x); void [[]] source_mark(); $type1 [[rn]] sqrt(in float_like<> x); $type1 [[rn]] step(in float_like<> a, in $type1 x); $type1 [[rn]] tan(in float_like<> x); $type1 [[rn]] tanh(in float_like<> x); float_like<4> [[ro]] tex1D(in sampler1d s, in float_like x) : tex1d; float_like<4> [[ro]] tex1D(in sampler1d s, in float_like<1> x, in $type2 ddx, in $type2 ddy) : tex1d_dd; float_like<4> [[ro]] tex1Dbias(in sampler1d s, in float_like<4> x) : tex1d_bias; float_like<4> [[ro]] tex1Dgrad(in sampler1d s, in float_like<1> x, in $type2 ddx, in $type2 ddy) : tex1d_dd; float_like<4> [[ro]] tex1Dlod(in sampler1d s, in float_like<4> x) : tex1d_lod; float_like<4> [[ro]] tex1Dproj(in sampler1d s, in float_like<4> x) : tex1d_proj; float_like<4> [[ro]] tex2D(in sampler2d s, in float_like<2> x) : tex2d; float_like<4> [[ro]] tex2D(in sampler2d s, in float_like<2> x, in $type2 ddx, in $type2 ddy) : tex2d_dd; float_like<4> [[ro]] tex2Dbias(in sampler2d s, in float_like<4> x) : tex2d_bias; float_like<4> [[ro]] tex2Dgrad(in sampler2d s, in float_like<2> x, in $type2 ddx, in $type2 ddy) : tex2d_dd; float_like<4> [[ro]] tex2Dlod(in sampler2d s, in float_like<4> x) : tex2d_lod; float_like<4> [[ro]] tex2Dproj(in sampler2d s, in float_like<4> x) : tex2d_proj; float_like<4> [[ro]] tex3D(in sampler3d s, in float_like<3> x) : tex3d; float_like<4> [[ro]] tex3D(in sampler3d s, in float_like<3> x, in $type2 ddx, in $type2 ddy) : tex3d_dd; float_like<4> [[ro]] tex3Dbias(in sampler3d s, in float_like<4> x) : tex3d_bias; float_like<4> [[ro]] tex3Dgrad(in sampler3d s, in float_like<3> x, in $type2 ddx, in $type2 ddy) : tex3d_dd; float_like<4> [[ro]] tex3Dlod(in sampler3d s, in float_like<4> x) : tex3d_lod; float_like<4> [[ro]] tex3Dproj(in sampler3d s, in float_like<4> x) : tex3d_proj; float_like<4> [[ro]] texCUBE(in sampler_cube s, in float_like<3> x) : texcube; float_like<4> [[ro]] texCUBE(in sampler_cube s, in float_like<3> x, in $type2 ddx, in $type2 ddy) : texcube_dd; float_like<4> [[ro]] texCUBEbias(in sampler_cube s, in float_like<4> x) : texcube_bias; float_like<4> [[ro]] texCUBEgrad(in sampler_cube s, in float_like<3> x, in $type2 ddx, in $type2 ddy) : texcube_dd; float_like<4> [[ro]] texCUBElod(in sampler_cube s, in float_like<4> x) : texcube_lod; float_like<4> [[ro]] texCUBEproj(in sampler_cube s, in float_like<4> x) : texcube_proj; $match<1, 1> any [[rn]] transpose(in any x); $type1 [[rn]] trunc(in float_like<> x); bool [[rn]] CheckAccessFullyMapped(in uint_only status) : check_access_fully_mapped; uint [[rn]] AddUint64(in $match<1, 0> uint a, in $match<2, 0> uint b) : adduint64; $type1 [[rn]] NonUniformResourceIndex(in any<> index) : nonuniform_resource_index; // Wave intrinsics. Only those that depend on the exec mask are marked as wave-sensitive bool [[wv]] WaveIsFirstLane(); uint [[rn]] WaveGetLaneIndex(); uint [[rn]] WaveGetLaneCount(); bool [[wv]] WaveActiveAnyTrue(in bool cond); bool [[wv]] WaveActiveAllTrue(in bool cond); $match<1, 0> bool<> [[wv]] WaveActiveAllEqual(in any<> value); uint<4> [[wv]] WaveActiveBallot(in bool cond); $type1 [[]] WaveReadLaneAt(in any<> value, in uint lane); $type1 [[wv]] WaveReadLaneFirst(in any<> value); uint [[wv]] WaveActiveCountBits(in bool value); $type1 [[unsigned_op=WaveActiveUSum,wv]] WaveActiveSum(in numeric<> value); $type1 [[unsigned_op=WaveActiveUProduct,wv]] WaveActiveProduct(in numeric<> value); $type1 [[wv]] WaveActiveBitAnd(in uint_only<> value); $type1 [[wv]] WaveActiveBitOr(in uint_only<> value); $type1 [[wv]] WaveActiveBitXor(in uint_only<> value); $type1 [[unsigned_op=WaveActiveUMin,wv]] WaveActiveMin(in numeric<> value); $type1 [[unsigned_op=WaveActiveUMax,wv]] WaveActiveMax(in numeric<> value); uint [[wv]] WavePrefixCountBits(in bool value); $type1 [[unsigned_op=WavePrefixUSum,wv]] WavePrefixSum(in numeric<> value); $type1 [[unsigned_op=WavePrefixUProduct,wv]] WavePrefixProduct(in numeric<> value); uint<4> [[wv]] WaveMatch(in numeric<> value); $type1 [[wv]] WaveMultiPrefixBitAnd(in any_int<> value, in uint<4> mask); $type1 [[wv]] WaveMultiPrefixBitOr(in any_int<> value, in uint<4> mask); $type1 [[wv]] WaveMultiPrefixBitXor(in any_int<> value, in uint<4> mask); uint [[wv]] WaveMultiPrefixCountBits(in bool value, in uint<4> mask); $type1 [[unsigned_op=WaveMultiPrefixUProduct,wv]] WaveMultiPrefixProduct(in numeric<> value, in uint<4> mask); $type1 [[unsigned_op=WaveMultiPrefixUSum,wv]] WaveMultiPrefixSum(in numeric<> value, in uint<4> mask); $type1 [[]] QuadReadLaneAt(in numeric<> value, in uint quadLane); $type1 [[]] QuadReadAcrossX(in numeric<> value); $type1 [[]] QuadReadAcrossY(in numeric<> value); $type1 [[]] QuadReadAcrossDiagonal(in numeric<> value); bool [[]] QuadAny(in bool cond); bool [[]] QuadAll(in bool cond); // Raytracing void [[]] TraceRay(in acceleration_struct AccelerationStructure, in uint RayFlags, in uint InstanceInclusionMask, in uint RayContributionToHitGroupIndex, in uint MultiplierForGeometryContributionToHitGroupIndex, in uint MissShaderIndex, in ray_desc Ray, inout udt Payload); bool [[]] ReportHit(in float THit, in uint HitKind, in udt Attributes); void [[]] CallShader(in uint ShaderIndex, inout udt Parameter); void [[]] IgnoreHit(); void [[]] AcceptHitAndEndSearch(); uint<3> [[rn]] DispatchRaysIndex(); uint<3> [[rn]] DispatchRaysDimensions(); // group: Ray Vectors float<3> [[rn]] WorldRayOrigin(); float<3> [[rn]] WorldRayDirection(); float<3> [[rn]] ObjectRayOrigin(); float<3> [[rn]] ObjectRayDirection(); // group: RayT float [[rn]] RayTMin(); float [[rn]] RayTCurrent(); // group: Raytracing uint System Values uint [[rn]] PrimitiveIndex(); uint [[rn]] InstanceID(); uint [[rn]] InstanceIndex(); uint [[rn]] GeometryIndex(); uint [[rn]] HitKind(); uint [[rn]] RayFlags(); // group: Ray Transforms float<3,4> [[rn]] ObjectToWorld(); float<3,4> [[rn]] WorldToObject(); float<3,4> [[rn]] ObjectToWorld3x4(); float<3,4> [[rn]] WorldToObject3x4(); float<4,3> [[rn]] ObjectToWorld4x3(); float<4,3> [[rn]] WorldToObject4x3(); // Packed dot products with accumulate: $type3 [[rn]] dot4add_u8packed(in uint a, in $type1 b, in uint c); $type3 [[rn]] dot4add_i8packed(in uint a, in $type1 b, in int c); $type3 [[rn]] dot2add(in float16_t<2> a, in $type1 b, in float c); // Unpacking intrinsics int16_t<4> [[rn]] unpack_s8s16(in p32i8 pk); uint16_t<4> [[rn]] unpack_u8u16(in p32u8 pk); int<4> [[rn]] unpack_s8s32(in p32i8 pk); uint<4> [[rn]] unpack_u8u32(in p32u8 pk); // Packing intrinsics p32i8 [[rn]] pack_s8(in any_int16or32<4> v); p32u8 [[rn]] pack_u8(in any_int16or32<4> v); p32i8 [[rn]] pack_clamp_s8(in sint16or32_only<4> v); p32u8 [[rn]] pack_clamp_u8(in sint16or32_only<4> v); // Mesh shader intrinsics: void [[]] SetMeshOutputCounts(in uint numVertices, in uint numPrimitives); // Amplification shader intrinsics: void [[]] DispatchMesh(in uint threadGroupCountX, in uint threadGroupCountY, in uint threadGroupCountZ, in udt meshPayload); // Return true if the current lane is a helper lane bool [[ro]] IsHelperLane(); // HL Op for allocating ray query object that default constructor uses uint [[hidden]] AllocateRayQuery(in uint flags); resource [[hidden]] CreateResourceFromHeap(in uint index); // Replacement for vector logical &&, ||, and ternary conditional operators, // For use when HLSL changes to support short-circuiting and only scalar // conditions to maintain clarity. $match<1, 0> bool<> [[rn]] and(in any<> x, in $type1 y); $match<1, 0> bool<> [[rn]] or(in any<> x, in $type1 y); $type2 [[rn]] select(in bool<> cond, in $match<1, 2> any<> t, in $type2 f); } namespace // SPIRV Change Starts namespace VkIntrinsics { u64 [[]] ReadClock(in uint scope); $funcT [[ro]] RawBufferLoad(in u64 addr); $funcT [[ro]] RawBufferLoad(in u64 addr, in uint alignment); void [[]] RawBufferStore(in u64 addr, in $funcT value); void [[]] RawBufferStore(in u64 addr, in $funcT value, in uint alignment); void [[]] ext_execution_mode(in uint mode, ...); void [[]] ext_execution_mode_id(in uint mode, ...); } namespace // SPIRV Change Ends namespace StreamMethods { void [[]] Append(in $match<-1, 1> void x) : stream_append; void [[]] RestartStrip() : stream_restart; } namespace namespace Texture1DMethods { // Use float for DXIL don't support f16 on CalcLOD. float [[ro]] CalculateLevelOfDetail(in sampler1d s, in float<1> x) : tex1d_t_calc_lod; float [[ro]] CalculateLevelOfDetailUnclamped(in sampler s, in float<1> x) : tex1d_t_calc_lod_unclamped; void [[]] GetDimensions(in uint x, out uint_only width, out $type2 levels) : resinfo_uint; void [[]] GetDimensions(in uint x, out float_like width, out $type2 levels) : resinfo; void [[]] GetDimensions(out uint_only width) : resinfo_o; void [[]] GetDimensions(out float_like width) : resinfo_o; $classT [[ro]] Load(in int<2> x) : tex1d_t_load; $classT [[ro]] Load(in int<2> x, in int<1> o) : tex1d_t_load_o; $classT [[]] Load(in int<2> x, in int<1> o, out uint_only status) : tex1d_t_load_o_s; $classT [[ro]] Sample(in sampler s, in float<1> x) : tex1d_t; $classT [[ro]] Sample(in sampler s, in float<1> x, in int<1> o) : tex1d_t_o; $classT [[ro]] SampleBias(in sampler s, in float<1> x, in float bias) : tex1d_t_bias; $classT [[ro]] SampleBias(in sampler s, in float<1> x, in float bias, in int<1> o) : tex1d_t_bias_o; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<1> x, in float compareValue) : tex1d_t_comp; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<1> x, in float compareValue, in int<1> o) : tex1d_t_comp_o; float_like [[ro]] SampleCmpLevel(in sampler_cmp s, in float<1> x, in float compareValue, in float lod); float_like [[ro]] SampleCmpLevel(in sampler_cmp s, in float<1> x, in float compareValue, in float lod, in int<1> o); float_like [[ro]] SampleCmpLevelZero(in sampler_cmp s, in float<1> x, in float compareValue) : tex1d_t_comp_lz; float_like [[ro]] SampleCmpLevelZero(in sampler_cmp s, in float<1> x, in float compareValue, in int<1> o) : tex1d_t_comp_lz_o; $classT [[ro]] SampleGrad(in sampler s, in float<1> x, in $type2 ddx, in $type2 ddy) : tex1d_t_dd; $classT [[ro]] SampleGrad(in sampler s, in float<1> x, in $type2 ddx, in $type2 ddy, in int<1> o) : tex1d_t_dd_o; $classT [[ro]] SampleLevel(in sampler s, in float<1> x, in float lod) : tex1d_t_lod; $classT [[ro]] SampleLevel(in sampler s, in float<1> x, in float lod, in int<1> o) : tex1d_t_lod_o; $classT [[ro]] Sample(in sampler s, in float<1> x, in int<1> o, in float clamp) : tex1d_t_o_cl; $classT [[]] Sample(in sampler s, in float<1> x, in int<1> o, in float clamp, out uint_only status) : tex1d_t_o_cl_s; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<1> x, in float compareValue, in int<1> o, in float clamp) : tex1d_t_comp_o_cl; float_like [[]] SampleCmp(in sampler_cmp s, in float<1> x, in float compareValue, in int<1> o, in float clamp, out uint_only status) : tex1d_t_comp_o_cl_s; float_like [[]] SampleCmpLevel(in sampler_cmp s, in float<1> x, in float compareValue, in float lod, in int<1> o, out uint_only status); float_like [[]] SampleCmpLevelZero(in sampler_cmp s, in float<1> x, in float compareValue, in int<1> o, out uint_only status) : tex1d_t_comp_o_s; $classT [[]] SampleLevel(in sampler s, in float<1> x, in float lod, in int<1> o, out uint_only status) : tex1d_t_lod_o_s; $classT [[ro]] SampleBias(in sampler s, in float<1> x, in float bias, in int<1> o, in float clamp) : tex1d_t_bias_o_cl; $classT [[]] SampleBias(in sampler s, in float<1> x, in float bias, in int<1> o, in float clamp, out uint_only status) : tex1d_t_bias_o_cl_s; $classT [[]] SampleGrad(in sampler s, in float<1> x, in $type2 ddx, in $type2 ddy, in int<1> o, in float clamp) : tex1d_t_dd_o_cl; $classT [[]] SampleGrad(in sampler s, in float<1> x, in $type2 ddx, in $type2 ddy, in int<1> o, in float clamp, out uint_only status) : tex1d_t_dd_o_cl_s; } namespace namespace Texture1DArrayMethods { float [[ro]] CalculateLevelOfDetail(in sampler s, in float<1> x) : tex1d_t_calc_lod_array; float [[ro]] CalculateLevelOfDetailUnclamped(in sampler s, in float<1> x) : tex1d_t_calc_lod_unclamped_array; void [[]] GetDimensions(in uint x, out uint_only width, out $type2 elements, out $type2 levels) : resinfo_uint; void [[]] GetDimensions(in uint x, out float_like width, out $type2 elements, out $type2 levels) : resinfo; void [[]] GetDimensions(out uint_only width, out $type1 elements) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 elements) : resinfo_o; $classT [[ro]] Load(in int<3> x) : tex1d_t_load_array; $classT [[ro]] Load(in int<3> x, in int<1> o) : tex1d_t_load_array_o; $classT [[]] Load(in int<3> x, in int<1> o, out uint_only status) : tex1d_t_load_array_o_s; $classT [[ro]] Sample(in sampler s, in float<2> x) : tex1d_t_array; $classT [[ro]] Sample(in sampler s, in float<2> x, in int<1> o) : tex1d_t_array_o; $classT [[ro]] SampleBias(in sampler s, in float<2> x, in float bias) : tex1d_t_bias_array; $classT [[ro]] SampleBias(in sampler s, in float<2> x, in float bias, in int<1> o) : tex1d_t_bias_array_o; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<2> x, in float compareValue) : tex1d_t_comp_array; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<2> x, in float compareValue, in int<1> o) : tex1d_t_comp_array_o; float_like [[ro]] SampleCmpLevel(in sampler_cmp s, in float<2> x, in float compareValue, in float lod); float_like [[ro]] SampleCmpLevel(in sampler_cmp s, in float<2> x, in float compareValue, in float lod, in int<1> o); float_like [[ro]] SampleCmpLevelZero(in sampler_cmp s, in float<2> x, in float compareValue) : tex1d_t_comp_lz_array; float_like [[ro]] SampleCmpLevelZero(in sampler_cmp s, in float<2> x, in float compareValue, in int<1> o) : tex1d_t_comp_lz_array_o; $classT [[ro]] SampleGrad(in sampler s, in float<2> x, in $match<2, 2> float<1> ddx, in $match<2, 2> float<1> ddy) : tex1d_t_dd_array; $classT [[ro]] SampleGrad(in sampler s, in float<2> x, in $match<2, 2> float<1> ddx, in $match<2, 2> float<1> ddy, in int<1> o) : tex1d_t_dd_array_o; $classT [[ro]] SampleLevel(in sampler s, in float<2> x, in float lod) : tex1d_t_lod_array; $classT [[ro]] SampleLevel(in sampler s, in float<2> x, in float lod, in int<1> o) : tex1d_t_lod_array_o; $classT [[ro]] Sample(in sampler s, in float<2> x, in int<1> o, in float clamp) : tex1d_t_array_o_cl; $classT [[]] Sample(in sampler s, in float<2> x, in int<1> o, in float clamp, out uint_only status) : tex1d_t_array_o_cl_s; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<2> x, in float compareValue, in int<1> o, in float clamp) : tex1d_t_comp_array_o_cl; float_like [[]] SampleCmp(in sampler_cmp s, in float<2> x, in float compareValue, in int<1> o, in float clamp, out uint_only status) : tex1d_t_comp_array_o_cl_s; float_like [[]] SampleCmpLevel(in sampler_cmp s, in float<2> x, in float compareValue, in float lod, in int<1> o, out uint_only status); float_like [[]] SampleCmpLevelZero(in sampler_cmp s, in float<2> x, in float compareValue, in int<1> o, out uint_only status) : tex1d_t_comp_array_o_s; $classT [[]] SampleLevel(in sampler s, in float<2> x, in float lod, in int<1> o, out uint_only status) : tex1d_t_lod_array_o_s; $classT [[ro]] SampleBias(in sampler s, in float<2> x, in float bias, in int<1> o, in float clamp) : tex1d_t_bias_array_o_cl; $classT [[]] SampleBias(in sampler s, in float<2> x, in float bias, in int<1> o, in float clamp, out uint_only status) : tex1d_t_bias_array_o_cl_s; $classT [[ro]] SampleGrad(in sampler s, in float<2> x, in $match<2, 2> float<1> ddx, in $match<2, 2> float<1> ddy, in int<1> o, in float clamp) : tex1d_t_dd_array_o_cl; $classT [[]] SampleGrad(in sampler s, in float<2> x, in $match<2, 2> float<1> ddx, in $match<2, 2> float<1> ddy, in int<1> o, in float clamp, out uint_only status) : tex1d_t_dd_array_o_cl_s; } namespace namespace Texture2DMethods { float [[ro]] CalculateLevelOfDetail(in sampler s, in float<2> x) : tex2d_t_calc_lod; float [[ro]] CalculateLevelOfDetailUnclamped(in sampler s, in float<2> x) : tex2d_t_calc_lod_unclamped; $match<0, -1> void<4> [[ro]] Gather(in sampler s, in float<2> x) : tex2d_t_gather; $match<0, -1> void<4> [[ro]] Gather(in sampler s, in float<2> x, in int<2> o) : tex2d_t_gather_o; $match<0, -1> void<4> [[ro]] GatherAlpha(in sampler s, in float<2> x) : tex2d_t_gather_alpha; $match<0, -1> void<4> [[ro]] GatherAlpha(in sampler s, in float<2> x, in int<2> o) : tex2d_t_gather_alpha_o; $match<0, -1> void<4> [[ro]] GatherAlpha(in sampler s, in float<2> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_alpha_o4; $match<0, -1> void<4> [[ro]] GatherBlue(in sampler s, in float<2> x) : tex2d_t_gather_blue; $match<0, -1> void<4> [[ro]] GatherBlue(in sampler s, in float<2> x, in int<2> o) : tex2d_t_gather_blue_o; $match<0, -1> void<4> [[ro]] GatherBlue(in sampler s, in float<2> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_blue_o4; $match<0, -1> void<4> [[ro]] GatherCmp(in sampler_cmp s, in float<2> x, in float compareValue) : tex2d_t_gather_comp; $match<0, -1> void<4> [[ro]] GatherCmp(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o) : tex2d_t_gather_comp_o; $match<0, -1> void<4> [[ro]] GatherCmpAlpha(in sampler_cmp s, in float<2> x, in float compareValue) : tex2d_t_gather_comp_alpha; $match<0, -1> void<4> [[ro]] GatherCmpAlpha(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o) : tex2d_t_gather_comp_alpha_o; $match<0, -1> void<4> [[ro]] GatherCmpAlpha(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_comp_alpha_o4; $match<0, -1> void<4> [[ro]] GatherCmpBlue(in sampler_cmp s, in float<2> x, in float compareValue) : tex2d_t_gather_comp_blue; $match<0, -1> void<4> [[ro]] GatherCmpBlue(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o) : tex2d_t_gather_comp_blue_o; $match<0, -1> void<4> [[ro]] GatherCmpBlue(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_comp_blue_o4; $match<0, -1> void<4> [[ro]] GatherCmpGreen(in sampler_cmp s, in float<2> x, in float compareValue) : tex2d_t_gather_comp_green; $match<0, -1> void<4> [[ro]] GatherCmpGreen(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o) : tex2d_t_gather_comp_green_o; $match<0, -1> void<4> [[ro]] GatherCmpGreen(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_comp_green_o4; $match<0, -1> void<4> [[ro]] GatherCmpRed(in sampler_cmp s, in float<2> x, in float compareValue) : tex2d_t_gather_comp_red; $match<0, -1> void<4> [[ro]] GatherCmpRed(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o) : tex2d_t_gather_comp_red_o; $match<0, -1> void<4> [[ro]] GatherCmpRed(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_comp_red_o4; $match<0, -1> void<4> [[ro]] GatherGreen(in sampler s, in float<2> x) : tex2d_t_gather_green; $match<0, -1> void<4> [[ro]] GatherGreen(in sampler s, in float<2> x, in int<2> o) : tex2d_t_gather_green_o; $match<0, -1> void<4> [[ro]] GatherGreen(in sampler s, in float<2> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_green_o4; $match<0, -1> void<4> [[ro]] GatherRed(in sampler s, in float<2> x) : tex2d_t_gather_red; $match<0, -1> void<4> [[ro]] GatherRed(in sampler s, in float<2> x, in int<2> o) : tex2d_t_gather_red_o; $match<0, -1> void<4> [[ro]] GatherRed(in sampler s, in float<2> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_red_o4; void [[]] GetDimensions(in uint x, out uint_only width, out $type2 height, out $type2 levels) : resinfo_uint; void [[]] GetDimensions(in uint x, out float_like width, out $type2 height, out $type2 levels) : resinfo; void [[]] GetDimensions(out uint_only width, out $type1 height) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 height) : resinfo_o; $classT [[ro]] Load(in int<3> x) : tex2d_t_load; $classT [[ro]] Load(in int<3> x, in int<2> o) : tex2d_t_load_o; $classT [[]] Load(in int<3> x, in int<2> o, out uint_only status) : tex2d_t_load_o_s; $classT [[ro]] Sample(in sampler s, in float<2> x) : tex2d_t; $classT [[ro]] Sample(in sampler s, in float<2> x, in int<2> o) : tex2d_t_o; $classT [[ro]] SampleBias(in sampler s, in float<2> x, in float bias) : tex2d_t_bias; $classT [[ro]] SampleBias(in sampler s, in float<2> x, in float bias, in int<2> o) : tex2d_t_bias_o; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<2> x, in float compareValue) : tex2d_t_comp; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o) : tex2d_t_comp_o; float_like [[ro]] SampleCmpLevel(in sampler_cmp s, in float<2> x, in float compareValue, in float lod); float_like [[ro]] SampleCmpLevel(in sampler_cmp s, in float<2> x, in float compareValue, in float lod, in int<2> o); float_like [[ro]] SampleCmpLevelZero(in sampler_cmp s, in float<2> x, in float compareValue) : tex2d_t_comp_lz; float_like [[ro]] SampleCmpLevelZero(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o) : tex2d_t_comp_lz_o; $classT [[ro]] SampleGrad(in sampler s, in float<2> x, in $type2 ddx, in $type2 ddy) : tex2d_t_dd; $classT [[ro]] SampleGrad(in sampler s, in float<2> x, in $type2 ddx, in $type2 ddy, in int<2> o) : tex2d_t_dd_o; $classT [[ro]] SampleLevel(in sampler s, in float<2> x, in float lod) : tex2d_t_lod; $classT [[ro]] SampleLevel(in sampler s, in float<2> x, in float lod, in int<2> o) : tex2d_t_lod_o; $classT [[ro]] Sample(in sampler s, in float<2> x, in int<2> o, in float clamp) : tex2d_t_o_cl; $classT [[]] Sample(in sampler s, in float<2> x, in int<2> o, in float clamp, out uint_only status) : tex2d_t_o_cl_s; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o, in float clamp) : tex2d_t_comp_o_cl; float_like [[]] SampleCmp(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o, in float clamp, out uint_only status) : tex2d_t_comp_o_cl_s; float_like [[]] SampleCmpLevel(in sampler_cmp s, in float<2> x, in float compareValue, in float lod, in int<2> o, out uint_only status); float_like [[]] SampleCmpLevelZero(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_comp_o_s; $classT [[]] SampleLevel(in sampler s, in float<2> x, in float lod, in int<2> o, out uint_only status) : tex2d_t_lod_o_s; $classT [[ro]] SampleBias(in sampler s, in float<2> x, in float bias, in int<2> o, in float clamp) : tex2d_t_bias_o_cl; $classT [[]] SampleBias(in sampler s, in float<2> x, in float bias, in int<2> o, in float clamp, out uint_only status) : tex2d_t_bias_o_cl_s; $classT [[ro]] SampleGrad(in sampler s, in float<2> x, in $type2 ddx, in $type2 ddy, in int<2> o, in float clamp) : tex2d_t_dd_o_cl; $classT [[]] SampleGrad(in sampler s, in float<2> x, in $type2 ddx, in $type2 ddy, in int<2> o, in float clamp, out uint_only status) : tex2d_t_dd_o_cl_s; $match<0, -1> void<4> [[]] Gather(in sampler s, in float<2> x, in int<2> o, out uint_only status) : tex2d_t_gather_o_s; $match<0, -1> void<4> [[]] GatherRed(in sampler s, in float<2> x, in int<2> o, out uint_only status) : tex2d_t_gather_red_o_s; $match<0, -1> void<4> [[]] GatherRed(in sampler s, in float<2> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_red_o4_s; $match<0, -1> void<4> [[]] GatherGreen(in sampler s, in float<2> x, in int<2> o, out uint_only status) : tex2d_t_gather_green_o_s; $match<0, -1> void<4> [[]] GatherGreen(in sampler s, in float<2> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_green_o4_s; $match<0, -1> void<4> [[]] GatherBlue(in sampler s, in float<2> x, in int<2> o, out uint_only status) : tex2d_t_gather_blue_o_s; $match<0, -1> void<4> [[]] GatherBlue(in sampler s, in float<2> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_blue_o4_s; $match<0, -1> void<4> [[]] GatherAlpha(in sampler s, in float<2> x, in int<2> o, out uint_only status) : tex2d_t_gather_alpha_o_s; $match<0, -1> void<4> [[]] GatherAlpha(in sampler s, in float<2> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_alpha_o4_s; $match<0, -1> void<4> [[]] GatherCmp(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_gather_comp_o_s; $match<0, -1> void<4> [[]] GatherCmpRed(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_gather_comp_red_o_s; $match<0, -1> void<4> [[]] GatherCmpGreen(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_gather_comp_green_o_s; $match<0, -1> void<4> [[]] GatherCmpBlue(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_gather_comp_blue_o_s; $match<0, -1> void<4> [[]] GatherCmpAlpha(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_gather_comp_alpha_o_s; $match<0, -1> void<4> [[]] GatherCmpRed(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_comp_red_o4_s; $match<0, -1> void<4> [[]] GatherCmpGreen(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_comp_green_o4_s; $match<0, -1> void<4> [[]] GatherCmpBlue(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_comp_blue_o4_s; $match<0, -1> void<4> [[]] GatherCmpAlpha(in sampler_cmp s, in float<2> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_comp_alpha_o4_s; $match<0, -1> void<4> [[ro]] GatherRaw(in sampler s, in float<2> x); $match<0, -1> void<4> [[ro]] GatherRaw(in sampler s, in float<2> x, in int<2> o); $match<0, -1> void<4> [[]] GatherRaw(in sampler s, in float<2> x, in int<2> o, out uint_only status); } namespace namespace Texture2DMSMethods { void [[]] GetDimensions(out uint_only width, out $type1 height, out $type2 samples) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 height, out $type2 samples) : resinfo_o; float_like<2> [[ro]] GetSamplePosition(in int s) : samplepos; $classT [[]] Load(in int<2> x, in int s) : texture2d_ms; $classT [[]] Load(in int<2> x, in int s, in int<2> o) : texture2d_ms_o; $classT [[]] Load(in int<2> x, in int s, in int<2> o, out uint_only status) : texture2d_ms_o_s; } namespace namespace Texture2DArrayMethods { float [[ro]] CalculateLevelOfDetail(in sampler s, in float<2> x) : tex2d_t_calc_lod_array; float [[ro]] CalculateLevelOfDetailUnclamped(in sampler s, in float<2> x) : tex2d_t_calc_lod_unclamped_array; $match<0, -1> void<4> [[ro]] Gather(in sampler s, in float<3> x) : tex2d_t_gather_array; $match<0, -1> void<4> [[ro]] Gather(in sampler s, in float<3> x, in int<2> o) : tex2d_t_gather_array_o; $match<0, -1> void<4> [[ro]] GatherAlpha(in sampler s, in float<3> x) : tex2d_t_gather_alpha_array; $match<0, -1> void<4> [[ro]] GatherAlpha(in sampler s, in float<3> x, in int<2> o) : tex2d_t_gather_alpha_array_o; $match<0, -1> void<4> [[ro]] GatherAlpha(in sampler s, in float<3> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_alpha_array_o4; $match<0, -1> void<4> [[ro]] GatherBlue(in sampler s, in float<3> x) : tex2d_t_gather_blue_array; $match<0, -1> void<4> [[ro]] GatherBlue(in sampler s, in float<3> x, in int<2> o) : tex2d_t_gather_blue_array_o; $match<0, -1> void<4> [[ro]] GatherBlue(in sampler s, in float<3> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_blue_array_o4; $match<0, -1> void<4> [[ro]] GatherCmp(in sampler_cmp s, in float<3> x, in float compareValue) : tex2d_t_gather_comp_array; $match<0, -1> void<4> [[ro]] GatherCmp(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o) : tex2d_t_gather_comp_array_o; $match<0, -1> void<4> [[ro]] GatherCmpAlpha(in sampler_cmp s, in float<3> x, in float compareValue) : tex2d_t_gather_comp_alpha_array; $match<0, -1> void<4> [[ro]] GatherCmpAlpha(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o) : tex2d_t_gather_comp_alpha_array_o; $match<0, -1> void<4> [[ro]] GatherCmpAlpha(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_comp_alpha_array_o4; $match<0, -1> void<4> [[ro]] GatherCmpBlue(in sampler_cmp s, in float<3> x, in float compareValue) : tex2d_t_gather_comp_blue_array; $match<0, -1> void<4> [[ro]] GatherCmpBlue(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o) : tex2d_t_gather_comp_blue_array_o; $match<0, -1> void<4> [[ro]] GatherCmpBlue(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_comp_blue_array_o4; $match<0, -1> void<4> [[ro]] GatherCmpGreen(in sampler_cmp s, in float<3> x, in float compareValue) : tex2d_t_gather_comp_green_array; $match<0, -1> void<4> [[ro]] GatherCmpGreen(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o) : tex2d_t_gather_comp_green_array_o; $match<0, -1> void<4> [[ro]] GatherCmpGreen(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_comp_green_array_o4; $match<0, -1> void<4> [[ro]] GatherCmpRed(in sampler_cmp s, in float<3> x, in float compareValue) : tex2d_t_gather_comp_red_array; $match<0, -1> void<4> [[ro]] GatherCmpRed(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o) : tex2d_t_gather_comp_red_array_o; $match<0, -1> void<4> [[ro]] GatherCmpRed(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_comp_red_array_o4; $match<0, -1> void<4> [[ro]] GatherGreen(in sampler s, in float<3> x) : tex2d_t_gather_green_array; $match<0, -1> void<4> [[ro]] GatherGreen(in sampler s, in float<3> x, in int<2> o) : tex2d_t_gather_green_array_o; $match<0, -1> void<4> [[ro]] GatherGreen(in sampler s, in float<3> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_green_array_o4; $match<0, -1> void<4> [[ro]] GatherRed(in sampler s, in float<3> x) : tex2d_t_gather_red_array; $match<0, -1> void<4> [[ro]] GatherRed(in sampler s, in float<3> x, in int<2> o) : tex2d_t_gather_red_array_o; $match<0, -1> void<4> [[ro]] GatherRed(in sampler s, in float<3> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4) : tex2d_t_gather_red_array_o4; void [[]] GetDimensions(in uint x, out uint_only width, out $type2 height, out $type2 elements, out $type2 levels) : resinfo_uint; void [[]] GetDimensions(in uint x, out float_like width, out $type2 height, out $type2 elements, out $type2 levels) : resinfo; void [[]] GetDimensions(out uint_only width, out $type1 height, out $type1 elements) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 height, out $type1 elements) : resinfo_o; $classT [[ro]] Load(in int<4> x) : tex2d_t_load_array; $classT [[ro]] Load(in int<4> x, in int<2> o) : tex2d_t_load_array_o; $classT [[]] Load(in int<4> x, in int<2> o, out uint_only status) : tex2d_t_load_array_o_s; $classT [[ro]] Sample(in sampler s, in float<3> x) : tex2d_t_array; $classT [[ro]] Sample(in sampler s, in float<3> x, in int<2> o) : tex2d_t_array_o; $classT [[ro]] SampleBias(in sampler s, in float<3> x, in float bias) : tex2d_t_bias_array; $classT [[ro]] SampleBias(in sampler s, in float<3> x, in float bias, in int<2> o) : tex2d_t_bias_array_o; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<3> x, in float compareValue) : tex2d_t_comp_array; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o) : tex2d_t_comp_array_o; float_like [[ro]] SampleCmpLevel(in sampler_cmp s, in float<3> x, in float compareValue, in float lod); float_like [[ro]] SampleCmpLevel(in sampler_cmp s, in float<3> x, in float compareValue, in float lod, in int<2> o); float_like [[ro]] SampleCmpLevelZero(in sampler_cmp s, in float<3> x, in float compareValue) : tex2d_t_comp_lz_array; float_like [[ro]] SampleCmpLevelZero(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o) : tex2d_t_comp_lz_array_o; $classT [[ro]] SampleGrad(in sampler s, in float<3> x, in $match<2, 2> float<2> ddx, in $match<2, 2> float<2> ddy) : tex2d_t_dd_array; $classT [[ro]] SampleGrad(in sampler s, in float<3> x, in $match<2, 2> float<2> ddx, in $match<2, 2> float<2> ddy, in int<2> o) : tex2d_t_dd_array_o; $classT [[ro]] SampleLevel(in sampler s, in float<3> x, in float lod) : tex2d_t_lod_array; $classT [[ro]] SampleLevel(in sampler s, in float<3> x, in float lod, in int<2> o) : tex2d_t_lod_array_o; $classT [[ro]] Sample(in sampler s, in float<3> x, in int<2> o, in float clamp) : tex2d_t_array_o_cl; $classT [[]] Sample(in sampler s, in float<3> x, in int<2> o, in float clamp, out uint_only status) : tex2d_t_array_o_cl_s; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o, in float clamp) : tex2d_t_comp_array_o_cl; float_like [[]] SampleCmp(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o, in float clamp, out uint_only status) : tex2d_t_comp_array_o_cl_s; float_like [[]] SampleCmpLevel(in sampler_cmp s, in float<3> x, in float compareValue, in float lod, in int<2> o, out uint_only status); float_like [[]] SampleCmpLevelZero(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_comp_array_o_s; $classT [[]] SampleLevel(in sampler s, in float<3> x, in float lod, in int<2> o, out uint_only status) : tex2d_t_lod_array_o_s; $classT [[ro]] SampleBias(in sampler s, in float<3> x, in float bias, in int<2> o, in float clamp) : tex2d_t_bias_array_o_cl; $classT [[]] SampleBias(in sampler s, in float<3> x, in float bias, in int<2> o, in float clamp, out uint_only status) : tex2d_t_bias_array_o_cl_s; $classT [[ro]] SampleGrad(in sampler s, in float<3> x, in $match<2, 2> float<2> ddx, in $match<2, 2> float<2> ddy, in int<2> o, in float clamp) : tex2d_t_dd_array_o_cl; $classT [[]] SampleGrad(in sampler s, in float<3> x, in $match<2, 2> float<2> ddx, in $match<2, 2> float<2> ddy, in int<2> o, in float clamp, out uint_only status) : tex2d_t_dd_array_o_cl_s; $match<0, -1> void<4> [[]] Gather(in sampler s, in float<3> x, in int<2> o, out uint_only status) : tex2d_t_gather_array_o_s; $match<0, -1> void<4> [[]] GatherRed(in sampler s, in float<3> x, in int<2> o, out uint_only status) : tex2d_t_gather_red_array_o_s; $match<0, -1> void<4> [[]] GatherRed(in sampler s, in float<3> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_red_array_o4_s; $match<0, -1> void<4> [[]] GatherGreen(in sampler s, in float<3> x, in int<2> o, out uint_only status) : tex2d_t_gather_green_array_o_s; $match<0, -1> void<4> [[]] GatherGreen(in sampler s, in float<3> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_green_array_o4_s; $match<0, -1> void<4> [[]] GatherBlue(in sampler s, in float<3> x, in int<2> o, out uint_only status) : tex2d_t_gather_blue_array_o_s; $match<0, -1> void<4> [[]] GatherBlue(in sampler s, in float<3> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_blue_array_o4_s; $match<0, -1> void<4> [[]] GatherAlpha(in sampler s, in float<3> x, in int<2> o, out uint_only status) : tex2d_t_gather_alpha_array_o_s; $match<0, -1> void<4> [[]] GatherAlpha(in sampler s, in float<3> x, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_alpha_array_o4_s; $match<0, -1> void<4> [[]] GatherCmp(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_gather_comp_array_o_s; $match<0, -1> void<4> [[]] GatherCmpRed(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_gather_comp_red_array_o_s; $match<0, -1> void<4> [[]] GatherCmpGreen(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_gather_comp_green_array_o_s; $match<0, -1> void<4> [[]] GatherCmpBlue(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_gather_comp_blue_array_o_s; $match<0, -1> void<4> [[]] GatherCmpAlpha(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o, out uint_only status) : tex2d_t_gather_comp_alpha_array_o_s; $match<0, -1> void<4> [[]] GatherCmpRed(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_comp_red_array_o4_s; $match<0, -1> void<4> [[]] GatherCmpGreen(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_comp_green_array_o4_s; $match<0, -1> void<4> [[]] GatherCmpBlue(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_comp_blue_array_o4_s; $match<0, -1> void<4> [[]] GatherCmpAlpha(in sampler_cmp s, in float<3> x, in float compareValue, in int<2> o1, in int<2> o2, in int<2> o3, in int<2> o4, out uint_only status) : tex2d_t_gather_comp_alpha_array_o4_s; $match<0, -1> void<4> [[ro]] GatherRaw(in sampler s, in float<3> x); $match<0, -1> void<4> [[ro]] GatherRaw(in sampler s, in float<3> x, in int<2> o); $match<0, -1> void<4> [[]] GatherRaw(in sampler s, in float<3> x, in int<2> o, out uint_only status); } namespace namespace Texture2DArrayMSMethods { void [[]] GetDimensions(out uint_only width, out $type1 height, out $type1 elements, out $type1 samples) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 height, out $type1 elements, out $type1 samples) : resinfo_o; float_like<2> [[ro]] GetSamplePosition(in int s) : samplepos; $classT [[ro]] Load(in int<3> x, in int s) : texture2darray_ms; $classT [[ro]] Load(in int<3> x, in int s, in int<2> o) : texture2darray_ms_o; $classT [[]] Load(in int<3> x, in int s, in int<2> o, out uint_only status) : texture2darray_ms_o_s; } namespace namespace Texture3DMethods { float [[ro]] CalculateLevelOfDetail(in sampler s, in float<3> x) : tex3d_t_calc_lod; float [[ro]] CalculateLevelOfDetailUnclamped(in sampler s, in float<3> x) : tex3d_t_calc_lod_unclamped; void [[]] GetDimensions(in uint x, out uint_only width, out $type2 height, out $type2 depth, out $type2 levels) : resinfo_uint; void [[]] GetDimensions(in uint x, out float_like width, out $type2 height, out $type2 depth, out $type2 levels) : resinfo; void [[]] GetDimensions(out uint_only width, out $type1 height, out $type1 depth) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 height, out $type1 depth) : resinfo_o; $classT [[ro]] Load(in int<4> x) : tex3d_t_load; $classT [[ro]] Load(in int<4> x, in int<3> o) : tex3d_t_load_o; $classT [[]] Load(in int<4> x, in int<3> o, out uint_only status) : tex3d_t_load_o_s; $classT [[ro]] Sample(in sampler s, in float<3> x) : tex3d_t; $classT [[ro]] Sample(in sampler s, in float<3> x, in int<3> o) : tex3d_t_o; $classT [[ro]] SampleBias(in sampler s, in float<3> x, in float bias) : tex3d_t_bias; $classT [[ro]] SampleBias(in sampler s, in float<3> x, in float bias, in int<3> o) : tex3d_t_bias_o; $classT [[ro]] SampleGrad(in sampler s, in float<3> x, in $type2 ddx, in $type2 ddy) : tex3d_t_dd; $classT [[ro]] SampleGrad(in sampler s, in float<3> x, in $type2 ddx, in $type2 ddy, in int<3> o) : tex3d_t_dd_o; $classT [[ro]] SampleLevel(in sampler s, in float<3> x, in float lod) : tex3d_t_lod; $classT [[ro]] SampleLevel(in sampler s, in float<3> x, in float lod, in int<3> o) : tex3d_t_lod_o; $classT [[ro]] Sample(in sampler s, in float<3> x, in int<3> o, in float clamp) : tex3d_t_o_cl; $classT [[]] Sample(in sampler s, in float<3> x, in int<3> o, in float clamp, out uint_only status) : tex3d_t_o_cl_s; $classT [[]] SampleLevel(in sampler s, in float<3> x, in float lod, in int<3> o, out uint_only status) : tex3d_t_lod_o_s; $classT [[ro]] SampleBias(in sampler s, in float<3> x, in float bias, in int<3> o, in float clamp) : tex3d_t_bias_o_cl; $classT [[]] SampleBias(in sampler s, in float<3> x, in float bias, in int<3> o, in float clamp, out uint_only status) : tex3d_t_bias_o_cl_s; $classT [[ro]] SampleGrad(in sampler s, in float<3> x, in $type2 ddx, in $type2 ddy, in int<3> o, in float clamp) : tex3d_t_dd_o_cl; $classT [[]] SampleGrad(in sampler s, in float<3> x, in $type2 ddx, in $type2 ddy, in int<3> o, in float clamp, out uint_only status) : tex3d_t_dd_o_cl_s; } namespace namespace TextureCUBEMethods { float [[ro]] CalculateLevelOfDetail(in sampler s, in float<3> x) : texcube_t_calc_lod; float [[ro]] CalculateLevelOfDetailUnclamped(in sampler s, in float<3> x) : texcube_t_calc_lod_unclamped; $match<0, -1> void<4> [[ro]] Gather(in sampler s, in float<3> x) : texcube_t_gather; $match<0, -1> void<4> [[ro]] GatherAlpha(in sampler s, in float<3> x) : texcube_t_gather_alpha; $match<0, -1> void<4> [[ro]] GatherBlue(in sampler s, in float<3> x) : texcube_t_gather_blue; $match<0, -1> void<4> [[ro]] GatherCmp(in sampler_cmp s, in float<3> x, in float compareValue) : texcube_t_gather_comp; $match<0, -1> void<4> [[ro]] GatherCmpAlpha(in sampler_cmp s, in float<3> x, in float compareValue) : texcube_t_gather_comp_alpha; $match<0, -1> void<4> [[ro]] GatherCmpBlue(in sampler_cmp s, in float<3> x, in float compareValue) : texcube_t_gather_comp_blue; $match<0, -1> void<4> [[ro]] GatherCmpGreen(in sampler_cmp s, in float<3> x, in float compareValue) : texcube_t_gather_comp_green; $match<0, -1> void<4> [[ro]] GatherCmpRed(in sampler_cmp s, in float<3> x, in float compareValue) : texcube_t_gather_comp_red; $match<0, -1> void<4> [[ro]] GatherGreen(in sampler s, in float<3> x) : texcube_t_gather_green; $match<0, -1> void<4> [[ro]] GatherRed(in sampler s, in float<3> x) : texcube_t_gather_red; void [[]] GetDimensions(in uint x, out uint_only width, out $type2 height, out $type2 levels) : resinfo_uint; void [[]] GetDimensions(in uint x, out float_like width, out $type2 height, out $type2 levels) : resinfo; void [[]] GetDimensions(out uint_only width, out $type1 height) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 height) : resinfo_o; $classT [[ro]] Sample(in sampler s, in float<3> x) : texcube_t; $classT [[ro]] SampleBias(in sampler s, in float<3> x, in float bias) : texcube_t_bias; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<3> x, in float c) : texcube_t_comp; float_like [[ro]] SampleCmpLevel(in sampler_cmp s, in float<3> x, in float c, in float lod); float_like [[ro]] SampleCmpLevelZero(in sampler_cmp s, in float<3> x, in float c) : texcube_t_comp_lz; $classT [[ro]] SampleGrad(in sampler s, in float<3> x, in $type2 ddx, in $type2 ddy) : texcube_t_dd; $classT [[ro]] SampleLevel(in sampler s, in float<3> x, in float lod) : texcube_t_lod; $classT [[ro]] Sample(in sampler s, in float<3> x, in float clamp) : texcube_t_cl; $classT [[]] Sample(in sampler s, in float<3> x, in float clamp, out uint_only status) : texcube_t_cl_s; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<3> x, in float compareValue, in float clamp) : texcube_t_comp_cl; float_like [[]] SampleCmp(in sampler_cmp s, in float<3> x, in float compareValue, in float clamp, out uint_only status) : texcube_t_comp_cl_s; float_like [[]] SampleCmpLevel(in sampler_cmp s, in float<3> x, in float compareValue, in float lod, out uint_only status); float_like [[]] SampleCmpLevelZero(in sampler_cmp s, in float<3> x, in float compareValue, out uint_only status) : texcube_t_comp_s; $classT [[]] SampleLevel(in sampler s, in float<3> x, in float lod, out uint_only status) : texcube_t_lod_s; $classT [[ro]] SampleBias(in sampler s, in float<3> x, in float bias, in float clamp) : texcube_t_bias_cl; $classT [[]] SampleBias(in sampler s, in float<3> x, in float bias, in float clamp, out uint_only status) : texcube_t_bias_cl_s; $classT [[ro]] SampleGrad(in sampler s, in float<3> x, in $type2 ddx, in $type2 ddy, in float clamp) : texcube_t_dd_cl; $classT [[]] SampleGrad(in sampler s, in float<3> x, in $type2 ddx, in $type2 ddy, in float clamp, out uint_only status) : texcube_t_dd_cl_s; $match<0, -1> void<4> [[]] Gather(in sampler s, in float<3> x, out uint_only status) : texcube_t_gather_s; $match<0, -1> void<4> [[]] GatherRed(in sampler s, in float<3> x, out uint_only status) : texcube_t_gather_red_s; $match<0, -1> void<4> [[]] GatherGreen(in sampler s, in float<3> x, out uint_only status) : texcube_t_gather_green_s; $match<0, -1> void<4> [[]] GatherBlue(in sampler s, in float<3> x, out uint_only status) : texcube_t_gather_blue_s; $match<0, -1> void<4> [[]] GatherAlpha(in sampler s, in float<3> x, out uint_only status) : texcube_t_gather_alpha_s; $match<0, -1> void<4> [[]] GatherCmp(in sampler_cmp s, in float<3> x, in float compareValue, out uint_only status) : texcube_t_gather_comp_s; $match<0, -1> void<4> [[]] GatherCmpRed(in sampler_cmp s, in float<3> x, in float compareValue, out uint_only status) : texcube_t_gather_comp_red_s; $match<0, -1> void<4> [[]] GatherCmpGreen(in sampler_cmp s, in float<3> x, in float compareValue, out uint_only status) : texcube_t_gather_comp_green_s; $match<0, -1> void<4> [[]] GatherCmpBlue(in sampler_cmp s, in float<3> x, in float compareValue, out uint_only status) : texcube_t_gather_comp_blue_s; $match<0, -1> void<4> [[]] GatherCmpAlpha(in sampler_cmp s, in float<3> x, in float compareValue, out uint_only status) : texcube_t_gather_comp_alpha_s; } namespace namespace TextureCUBEArrayMethods { float [[ro]] CalculateLevelOfDetail(in sampler s, in float<3> x) : texcube_t_calc_lod_array; float [[ro]] CalculateLevelOfDetailUnclamped(in sampler s, in float<3> x) : texcube_t_calc_lod_unclamped_array; $match<0, -1> void<4> [[ro]] Gather(in sampler s, in float<4> x) : texcube_t_gather_array; $match<0, -1> void<4> [[ro]] GatherAlpha(in sampler s, in float<4> x) : texcube_t_gather_alpha_array; $match<0, -1> void<4> [[ro]] GatherBlue(in sampler s, in float<4> x) : texcube_t_gather_blue_array; $match<0, -1> void<4> [[ro]] GatherCmp(in sampler_cmp s, in float<4> x, in float compareValue) : texcube_t_gather_comp_array; $match<0, -1> void<4> [[ro]] GatherCmpAlpha(in sampler_cmp s, in float<4> x, in float compareValue) : texcube_t_gather_comp_alpha_array; $match<0, -1> void<4> [[ro]] GatherCmpBlue(in sampler_cmp s, in float<4> x, in float compareValue) : texcube_t_gather_comp_blue_array; $match<0, -1> void<4> [[ro]] GatherCmpGreen(in sampler_cmp s, in float<4> x, in float compareValue) : texcube_t_gather_comp_green_array; $match<0, -1> void<4> [[ro]] GatherCmpRed(in sampler_cmp s, in float<4> x, in float compareValue) : texcube_t_gather_comp_red_array; $match<0, -1> void<4> [[ro]] GatherGreen(in sampler s, in float<4> x) : texcube_t_gather_green_array; $match<0, -1> void<4> [[ro]] GatherRed(in sampler s, in float<4> x) : texcube_t_gather_red_array; void [[]] GetDimensions(in uint x, out uint_only width, out $type2 height, out $type2 elements, out $type2 levels) : resinfo_uint; void [[]] GetDimensions(in uint x, out float_like width, out $type2 height, out $type2 elements, out $type2 levels) : resinfo; void [[]] GetDimensions(out uint_only width, out $type1 height, out $type1 elements) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 height, out $type1 elements) : resinfo_o; $classT [[ro]] Sample(in sampler s, in float<4> x) : texcube_t_array; $classT [[ro]] SampleBias(in sampler s, in float<4> x, in float bias) : texcube_t_bias_array; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<4> x, in float c) : texcube_t_comp_array; float_like [[ro]] SampleCmpLevel(in sampler_cmp s, in float<4> x, in float c, in float lod); float_like [[ro]] SampleCmpLevelZero(in sampler_cmp s, in float<4> x, in float c) : texcube_t_comp_lz_array; $classT [[ro]] SampleGrad(in sampler s, in float<4> x, in $match<2, 2> float<3> ddx, in $match<2, 2> float<3> ddy) : texcube_t_dd_array; $classT [[ro]] SampleLevel(in sampler s, in float<4> x, in float lod) : texcube_t_lod_array; $classT [[ro]] Sample(in sampler s, in float<4> x, in float clamp) : texcube_t_array_cl; $classT [[]] Sample(in sampler s, in float<4> x, in float clamp, out uint_only status) : texcube_t_array_cl_s; float_like [[ro]] SampleCmp(in sampler_cmp s, in float<4> x, in float compareValue, in float clamp) : texcube_t_comp_array_cl; float_like [[]] SampleCmp(in sampler_cmp s, in float<4> x, in float compareValue, in float clamp, out uint_only status) : texcube_t_comp_array_cl_s; float_like [[]] SampleCmpLevel(in sampler_cmp s, in float<4> x, in float compareValue, in float lod, out uint_only status); float_like [[]] SampleCmpLevelZero(in sampler_cmp s, in float<4> x, in float compareValue, out uint_only status) : texcube_t_comp_array_s; $classT [[]] SampleLevel(in sampler s, in float<4> x, in float lod, out uint_only status) : texcube_t_lod_array_s; $classT [[ro]] SampleBias(in sampler s, in float<4> x, in float bias, in float clamp) : texcube_t_bias_array_cl; $classT [[]] SampleBias(in sampler s, in float<4> x, in float bias, in float clamp, out uint_only status) : texcube_t_bias_array_cl_s; $classT [[ro]] SampleGrad(in sampler s, in float<4> x, in $match<2, 2> float<3> ddx, in $match<2, 2> float<3> ddy, in float clamp) : texcube_t_dd_array_cl; $classT [[]] SampleGrad(in sampler s, in float<4> x, in $match<2, 2> float<3> ddx, in $match<2, 2> float<3> ddy, in float clamp, out uint_only status) : texcube_t_dd_array_cl_s; $match<0, -1> void<4> [[]] Gather(in sampler s, in float<4> x, out uint_only status) : texcube_t_gather_array_s; $match<0, -1> void<4> [[]] GatherRed(in sampler s, in float<4> x, out uint_only status) : texcube_t_gather_red_array_s; $match<0, -1> void<4> [[]] GatherGreen(in sampler s, in float<4> x, out uint_only status) : texcube_t_gather_green_array_s; $match<0, -1> void<4> [[]] GatherBlue(in sampler s, in float<4> x, out uint_only status) : texcube_t_gather_blue_array_s; $match<0, -1> void<4> [[]] GatherAlpha(in sampler s, in float<4> x, out uint_only status) : texcube_t_gather_alpha_array_s; $match<0, -1> void<4> [[]] GatherCmp(in sampler_cmp s, in float<4> x, in float compareValue, out uint_only status) : texcube_t_gather_comp_array_s; $match<0, -1> void<4> [[]] GatherCmpRed(in sampler_cmp s, in float<4> x, in float compareValue, out uint_only status) : texcube_t_gather_comp_red_array_s; $match<0, -1> void<4> [[]] GatherCmpGreen(in sampler_cmp s, in float<4> x, in float compareValue, out uint_only status) : texcube_t_gather_comp_green_array_s; $match<0, -1> void<4> [[]] GatherCmpBlue(in sampler_cmp s, in float<4> x, in float compareValue, out uint_only status) : texcube_t_gather_comp_blue_array_s; $match<0, -1> void<4> [[]] GatherCmpAlpha(in sampler_cmp s, in float<4> x, in float compareValue, out uint_only status) : texcube_t_gather_comp_alpha_array_s; } namespace namespace BufferMethods { void [[]] GetDimensions(out uint_only width) : bufinfo; $classT [[ro]] Load(in int<1> x) : buffer_load; $classT [[]] Load(in int<1> x, out uint_only status) : buffer_load_s; } namespace namespace RWTexture1DMethods { void [[]] GetDimensions(out uint_only width) : resinfo_o; void [[]] GetDimensions(out float_like width) : resinfo_o; $classT [[ro]] Load(in int<1> x) : rwtex1d_load; $classT [[]] Load(in int<1> x, out uint_only status) : rwtex1d_load_s; } namespace namespace RWTexture1DArrayMethods { void [[]] GetDimensions(out uint_only width, out $type1 elements) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 elements) : resinfo_o; $classT [[ro]] Load(in int<2> x) : rwtex1d_load_array; $classT [[]] Load(in int<2> x, out uint_only status) : rwtex1d_load_array_s; } namespace namespace RWTexture2DMethods { void [[]] GetDimensions(out uint_only width, out $type1 height) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 height) : resinfo_o; $classT [[ro]] Load(in int<2> x) : rwtex2d_load; $classT [[]] Load(in int<2> x, out uint_only status) : rwtex2d_load_s; } namespace namespace RWTexture2DArrayMethods { void [[]] GetDimensions(out uint_only width, out $type1 height, out $type1 elements) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 height, out $type1 elements) : resinfo_o; $classT [[ro]] Load(in int<3> x) : rwtex2d_load_array; $classT [[]] Load(in int<3> x, out uint_only status) : rwtex2d_load_array_s; } namespace namespace RWTexture2DMSMethods { void [[]] GetDimensions(out uint_only width, out $type1 height, out $type2 samples); void [[]] GetDimensions(out float_like width, out $type1 height, out $type2 samples); float_like<2> [[ro]] GetSamplePosition(in int s); $classT [[ro]] Load(in int<2> x, in int s); $classT [[]] Load(in int<2> x, in int s, out uint_only status); } namespace namespace RWTexture2DMSArrayMethods { void [[]] GetDimensions(out uint_only width, out $type1 height, out $type1 elements, out $type1 samples); void [[]] GetDimensions(out float_like width, out $type1 height, out $type1 elements, out $type1 samples); float_like<2> [[ro]] GetSamplePosition(in int s); $classT [[ro]] Load(in int<3> x, in int s); $classT [[]] Load(in int<3> x, in int s, out uint_only status); } namespace namespace RWTexture3DMethods { void [[]] GetDimensions(out uint_only width, out $type1 height, out $type1 depth) : resinfo_uint_o; void [[]] GetDimensions(out float_like width, out $type1 height, out $type1 depth) : resinfo_o; $classT [[ro]] Load(in int<3> x) : rwtex3d_load; $classT [[]] Load(in int<3> x, out uint_only status) : rwtex3d_load_s; } namespace namespace RWBufferMethods { void [[]] GetDimensions(out uint_only width) : bufinfo; $classT [[ro]] Load(in int x) : rwbuffer_load; $classT [[]] Load(in int x, out uint_only status) : rwbuffer_load_s; } namespace namespace ByteAddressBufferMethods { void [[]] GetDimensions(out uint_only width) : bufinfo; $funcT [[ro]] Load(in uint byteOffset) : byteaddress_load; uint<2> [[ro]] Load2(in uint byteOffset) : byteaddress_load; uint<3> [[ro]] Load3(in uint byteOffset) : byteaddress_load; uint<4> [[ro]] Load4(in uint byteOffset) : byteaddress_load; $funcT [[]] Load(in uint byteOffset, out uint_only status) : byteaddress_load_s; uint<2> [[]] Load2(in uint byteOffset, out uint_only status) : byteaddress_load_s; uint<3> [[]] Load3(in uint byteOffset, out uint_only status) : byteaddress_load_s; uint<4> [[]] Load4(in uint byteOffset, out uint_only status) : byteaddress_load_s; } namespace namespace RWByteAddressBufferMethods { void [[]] GetDimensions(out uint_only width) : bufinfo; $funcT [[ro]] Load(in uint byteOffset) : byteaddress_load; uint<2> [[ro]] Load2(in uint byteOffset) : byteaddress_load; uint<3> [[ro]] Load3(in uint byteOffset) : byteaddress_load; uint<4> [[ro]] Load4(in uint byteOffset) : byteaddress_load; $funcT [[]] Load(in uint byteOffset, out uint_only status) : byteaddress_load_s; uint<2> [[]] Load2(in uint byteOffset, out uint_only status) : byteaddress_load_s; uint<3> [[]] Load3(in uint byteOffset, out uint_only status) : byteaddress_load_s; uint<4> [[]] Load4(in uint byteOffset, out uint_only status) : byteaddress_load_s; void [[]] Store(in uint byteOffset, in $funcT value) : byteaddress_store; void [[]] Store2(in uint byteOffset, in uint<2> value) : byteaddress_store; void [[]] Store3(in uint byteOffset, in uint<3> value) : byteaddress_store; void [[]] Store4(in uint byteOffset, in uint<4> value) : byteaddress_store; // 64-bit integer interlocks void [[]] InterlockedAdd64(in uint byteOffset, in u64 value); void [[]] InterlockedAdd64(in uint byteOffset, in u64 value, out any_int64 original) : interlockedadd_immediate; void [[unsigned_op=InterlockedUMin,overload=1]] InterlockedMin64(in uint byteOffset, in any_int64 value) : interlockedmin; void [[unsigned_op=InterlockedUMin,overload=1]] InterlockedMin64(in uint byteOffset, in any_int64 value, out any_int64 original) : interlockedmin_immediate; void [[unsigned_op=InterlockedUMax,overload=1]] InterlockedMax64(in uint byteOffset, in any_int64 value) : interlockedmax; void [[unsigned_op=InterlockedUMax,overload=1]] InterlockedMax64(in uint byteOffset, in any_int64 value, out any_int64 original) : interlockedmax_immediate; void [[]] InterlockedAnd64(in uint byteOffset, in u64 value); void [[]] InterlockedAnd64(in uint byteOffset, in u64 value, out any_int64 original) : interlockedand_immediate; void [[]] InterlockedOr64(in uint byteOffset, in u64 value); void [[]] InterlockedOr64(in uint byteOffset, in u64 value, out any_int64 original) : interlockedor_immediate; void [[]] InterlockedXor64(in uint byteOffset, in u64 value); void [[]] InterlockedXor64(in uint byteOffset, in u64 value, out any_int64 original) : interlockedxor_immediate; void [[]] InterlockedCompareStore64(in uint byteOffset, in u64 compare, in u64 value); void [[]] InterlockedExchange64(in uint byteOffset, in any_int64 value, out any_int64 original); void [[]] InterlockedCompareExchange64(in uint byteOffset, in u64 compare, in u64 value, out any_int64 original); // floating point interlocks void [[]] InterlockedExchangeFloat(in uint byteOffest, in float value, out float original); void [[]] InterlockedCompareStoreFloatBitwise(in uint byteOffest, in float compare, in float value); void [[]] InterlockedCompareExchangeFloatBitwise(in uint byteOffest, in float compare, in float value, out float original); // 32-bit integer interlocks void [[]] InterlockedAdd(in uint byteOffset, in uint value); void [[]] InterlockedAdd(in uint byteOffset, in uint value, out uint original) : interlockedadd_immediate; void [[unsigned_op=InterlockedUMin,overload=1]] InterlockedMin(in uint byteOffset, in any_int32 value) : interlockedmin; void [[unsigned_op=InterlockedUMin,overload=1]] InterlockedMin(in uint byteOffset, in any_int32 value, out uint original) : interlockedmin_immediate; void [[unsigned_op=InterlockedUMax,overload=1]] InterlockedMax(in uint byteOffset, in any_int32 value) : interlockedmax; void [[unsigned_op=InterlockedUMax,overload=1]] InterlockedMax(in uint byteOffset, in any_int32 value, out uint original) : interlockedmax_immediate; void [[]] InterlockedAnd(in uint byteOffset, in uint value); void [[]] InterlockedAnd(in uint byteOffset, in uint value, out uint original) : interlockedand_immediate; void [[]] InterlockedOr(in uint byteOffset, in uint value); void [[]] InterlockedOr(in uint byteOffset, in uint value, out uint original) : interlockedor_immediate; void [[]] InterlockedXor(in uint byteOffset, in uint value); void [[]] InterlockedXor(in uint byteOffset, in uint value, out uint original) : interlockedxor_immediate; void [[]] InterlockedCompareStore(in uint byteOffset, in uint compare, in uint value); void [[]] InterlockedExchange(in uint byteOffset, in uint value, out uint original); void [[]] InterlockedCompareExchange(in uint byteOffset, in uint compare, in uint value, out uint original); } namespace namespace StructuredBufferMethods { void [[]] GetDimensions(out uint_only count, out uint_only stride) : bufinfo; $classT [[ro]] Load(in int x) : structured_buffer_load; $classT [[]] Load(in int x, out uint_only status) : structured_buffer_load_s; } namespace namespace RWStructuredBufferMethods { void [[]] GetDimensions(out uint_only count, out uint_only stride) : bufinfo; uint [[]] IncrementCounter() : structuredbuffer_inc; uint [[]] DecrementCounter() : structuredbuffer_dec; $classT [[ro]] Load(in int x) : rwstructured_buffer_load; $classT [[]] Load(in int x, out uint_only status) : rwstructured_buffer_load_s; } namespace namespace AppendStructuredBufferMethods { void [[]] GetDimensions(out uint_only count, out uint_only stride) : bufinfo; void [[]] Append(in $match<-1,0> void value ) : structuredbuffer_append; } namespace namespace ConsumeStructuredBufferMethods { void [[]] GetDimensions(out uint_only count, out uint_only stride) : bufinfo; $classT [[]] Consume() : structuredbuffer_consume; } namespace namespace FeedbackTexture2DMethods { void [[]] WriteSamplerFeedback(in Texture2D t, in sampler s, in float<2> x); void [[]] WriteSamplerFeedback(in Texture2D t, in sampler s, in float<2> x, in float clamp); void [[]] WriteSamplerFeedbackBias(in Texture2D t, in sampler s, in float<2> x, in float bias); void [[]] WriteSamplerFeedbackBias(in Texture2D t, in sampler s, in float<2> x, in float bias, in float clamp); void [[]] WriteSamplerFeedbackGrad(in Texture2D t, in sampler s, in float<2> x, in float<2> ddx, in float<2> ddy); void [[]] WriteSamplerFeedbackGrad(in Texture2D t, in sampler s, in float<2> x, in float<2> ddx, in float<2> ddy, in float clamp); void [[]] WriteSamplerFeedbackLevel(in Texture2D t, in sampler s, in float<2> x, in float lod); } namespace namespace FeedbackTexture2DArrayMethods { void [[]] WriteSamplerFeedback(in Texture2DArray t, in sampler s, in float<3> x); void [[]] WriteSamplerFeedback(in Texture2DArray t, in sampler s, in float<3> x, in float clamp); void [[]] WriteSamplerFeedbackBias(in Texture2DArray t, in sampler s, in float<3> x, in float bias); void [[]] WriteSamplerFeedbackBias(in Texture2DArray t, in sampler s, in float<3> x, in float bias, in float clamp); void [[]] WriteSamplerFeedbackGrad(in Texture2DArray t, in sampler s, in float<3> x, in float<2> ddx, in float<2> ddy); void [[]] WriteSamplerFeedbackGrad(in Texture2DArray t, in sampler s, in float<3> x, in float<2> ddx, in float<2> ddy, in float clamp); void [[]] WriteSamplerFeedbackLevel(in Texture2DArray t, in sampler s, in float<3> x, in float lod); } namespace namespace RayQueryMethods { void [[]] TraceRayInline(in acceleration_struct AccelerationStructure, in uint RayFlags, in uint InstanceInclusionMask, in ray_desc Ray); bool [[]] Proceed(); void [[]] Abort(); void [[]] CommitNonOpaqueTriangleHit(); void [[]] CommitProceduralPrimitiveHit(in float t); uint [[ro]] CommittedStatus(); uint [[ro]] CandidateType(); float<3,4> [[ro]] CandidateObjectToWorld3x4(); float<4,3> [[ro]] CandidateObjectToWorld4x3(); float<3,4> [[ro]] CandidateWorldToObject3x4(); float<4,3> [[ro]] CandidateWorldToObject4x3(); float<3,4> [[ro]] CommittedObjectToWorld3x4(); float<4,3> [[ro]] CommittedObjectToWorld4x3(); float<3,4> [[ro]] CommittedWorldToObject3x4(); float<4,3> [[ro]] CommittedWorldToObject4x3(); bool [[ro]] CandidateProceduralPrimitiveNonOpaque(); bool [[ro]] CandidateTriangleFrontFace(); bool [[ro]] CommittedTriangleFrontFace(); float<2> [[ro]] CandidateTriangleBarycentrics(); float<2> [[ro]] CommittedTriangleBarycentrics(); uint [[ro]] RayFlags(); float<3> [[ro]] WorldRayOrigin(); float<3> [[ro]] WorldRayDirection(); float [[ro]] RayTMin(); float [[ro]] CandidateTriangleRayT(); float [[ro]] CommittedRayT(); uint [[ro]] CandidateInstanceIndex(); uint [[ro]] CandidateInstanceID(); uint [[ro]] CandidateGeometryIndex(); uint [[ro]] CandidatePrimitiveIndex(); float<3> [[ro]] CandidateObjectRayOrigin(); float<3> [[ro]] CandidateObjectRayDirection(); uint [[ro]] CommittedInstanceIndex(); uint [[ro]] CommittedInstanceID(); uint [[ro]] CommittedGeometryIndex(); uint [[ro]] CommittedPrimitiveIndex(); float<3> [[ro]] CommittedObjectRayOrigin(); float<3> [[ro]] CommittedObjectRayDirection(); uint [[ro]] CandidateInstanceContributionToHitGroupIndex(); uint [[ro]] CommittedInstanceContributionToHitGroupIndex(); } namespace // SPIRV Change Starts namespace VkSubpassInputMethods { $classT [[]] SubpassLoad() : subpassinput_load; } namespace namespace VkSubpassInputMSMethods { $classT [[]] SubpassLoad(in int sample) : subpassinputms_load; } namespace // SPIRV Change Ends