[tint][ir][hlsl] Use HLSL specific convert for packed 8-ints Pending CLs are going to make the validator be more strict about types on `convert` instructions. Since these packed 8-bit integer forms are only present in HLSL IR, there is no core IR conversion for them. This is fixed by adding a HLSL IR specific convert builtin that boils down to an HLSL cast. Fixes: 389876643 Change-Id: I9b8bb730bc687bf8d4f3591c59084a4dca773980 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/222022 Reviewed-by: dan sinclair <dsinclair@chromium.org> Auto-Submit: Ryan Harrison <rharrison@chromium.org> Commit-Queue: Ryan Harrison <rharrison@chromium.org>
diff --git a/src/tint/lang/hlsl/builtin_fn.cc b/src/tint/lang/hlsl/builtin_fn.cc index eb0c72c..62c7232 100644 --- a/src/tint/lang/hlsl/builtin_fn.cc +++ b/src/tint/lang/hlsl/builtin_fn.cc
@@ -80,6 +80,8 @@ return "pack_s8"; case BuiltinFn::kPackClampS8: return "pack_clamp_s8"; + case BuiltinFn::kConvert: + return "convert"; case BuiltinFn::kSign: return "sign"; case BuiltinFn::kTextureStore: @@ -221,6 +223,7 @@ case BuiltinFn::kPackU8: case BuiltinFn::kPackS8: case BuiltinFn::kPackClampS8: + case BuiltinFn::kConvert: case BuiltinFn::kSign: case BuiltinFn::kUnpackS8S32: case BuiltinFn::kUnpackU8U32:
diff --git a/src/tint/lang/hlsl/builtin_fn.cc.tmpl b/src/tint/lang/hlsl/builtin_fn.cc.tmpl index a0b4c62..283b78c 100644 --- a/src/tint/lang/hlsl/builtin_fn.cc.tmpl +++ b/src/tint/lang/hlsl/builtin_fn.cc.tmpl
@@ -88,6 +88,7 @@ case BuiltinFn::kPackU8: case BuiltinFn::kPackS8: case BuiltinFn::kPackClampS8: + case BuiltinFn::kConvert: case BuiltinFn::kSign: case BuiltinFn::kUnpackS8S32: case BuiltinFn::kUnpackU8U32:
diff --git a/src/tint/lang/hlsl/builtin_fn.h b/src/tint/lang/hlsl/builtin_fn.h index 2eea7b6..c89507c 100644 --- a/src/tint/lang/hlsl/builtin_fn.h +++ b/src/tint/lang/hlsl/builtin_fn.h
@@ -67,6 +67,7 @@ kPackU8, kPackS8, kPackClampS8, + kConvert, kSign, kTextureStore, kUnpackS8S32,
diff --git a/src/tint/lang/hlsl/hlsl.def b/src/tint/lang/hlsl/hlsl.def index 4d94062..1064e2a 100644 --- a/src/tint/lang/hlsl/hlsl.def +++ b/src/tint/lang/hlsl/hlsl.def
@@ -194,6 +194,11 @@ fn pack_s8(vec4<i32>) -> int8_t4_packed fn pack_clamp_s8(vec4<i32>) -> int8_t4_packed +fn convert(int8_t4_packed) -> u32 +fn convert(uint8_t4_packed) -> u32 +fn convert<T: int8_t4_packed>(u32) -> T +fn convert<T: uint8_t4_packed>(u32) -> T + implicit(T: fi32_f16) fn sign(T) -> i32 implicit(N: num, T: fi32_f16) fn sign(vec<N, T>) -> vec<N, i32>
diff --git a/src/tint/lang/hlsl/intrinsic/data.cc b/src/tint/lang/hlsl/intrinsic/data.cc index 751f89a..3bedc57 100644 --- a/src/tint/lang/hlsl/intrinsic/data.cc +++ b/src/tint/lang/hlsl/intrinsic/data.cc
@@ -3710,6 +3710,18 @@ { /* [29] */ /* name */ "T", + /* matcher_indices */ MatcherIndicesIndex(177), + /* kind */ TemplateInfo::Kind::kType, + }, + { + /* [30] */ + /* name */ "T", + /* matcher_indices */ MatcherIndicesIndex(176), + /* kind */ TemplateInfo::Kind::kType, + }, + { + /* [31] */ + /* name */ "T", /* matcher_indices */ MatcherIndicesIndex(180), /* kind */ TemplateInfo::Kind::kType, }, @@ -3736,7 +3748,7 @@ /* num_parameters */ 2, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(407), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3747,7 +3759,7 @@ /* num_parameters */ 4, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(175), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3769,7 +3781,7 @@ /* num_parameters */ 3, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(349), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3780,7 +3792,7 @@ /* num_parameters */ 5, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(63), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3802,7 +3814,7 @@ /* num_parameters */ 4, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(179), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3813,7 +3825,7 @@ /* num_parameters */ 6, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(0), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3835,7 +3847,7 @@ /* num_parameters */ 4, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(187), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3846,7 +3858,7 @@ /* num_parameters */ 6, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(6), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3868,7 +3880,7 @@ /* num_parameters */ 3, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(355), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3879,7 +3891,7 @@ /* num_parameters */ 5, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(68), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3890,7 +3902,7 @@ /* num_parameters */ 4, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(195), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3901,7 +3913,7 @@ /* num_parameters */ 6, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(12), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -3912,7 +3924,7 @@ /* num_parameters */ 4, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(199), /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -4033,7 +4045,7 @@ /* num_parameters */ 2, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(383), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -4044,7 +4056,7 @@ /* num_parameters */ 2, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(385), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -4055,7 +4067,7 @@ /* num_parameters */ 2, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(387), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -4066,7 +4078,7 @@ /* num_parameters */ 3, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(313), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -4077,7 +4089,7 @@ /* num_parameters */ 2, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(389), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -5012,7 +5024,7 @@ /* num_parameters */ 3, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(167), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -5023,7 +5035,7 @@ /* num_parameters */ 4, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(167), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -5034,7 +5046,7 @@ /* num_parameters */ 3, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(171), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -5045,7 +5057,7 @@ /* num_parameters */ 4, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(171), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -5056,7 +5068,7 @@ /* num_parameters */ 3, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(343), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -5067,7 +5079,7 @@ /* num_parameters */ 3, /* num_explicit_templates */ 0, /* num_templates */ 1, - /* templates */ TemplateIndex(29), + /* templates */ TemplateIndex(31), /* parameters */ ParameterIndex(346), /* return_matcher_indices */ MatcherIndicesIndex(129), /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), @@ -5141,6 +5153,50 @@ { /* [129] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), + /* num_parameters */ 1, + /* num_explicit_templates */ 0, + /* num_templates */ 0, + /* templates */ TemplateIndex(/* invalid */), + /* parameters */ ParameterIndex(416), + /* return_matcher_indices */ MatcherIndicesIndex(7), + /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), + }, + { + /* [130] */ + /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), + /* num_parameters */ 1, + /* num_explicit_templates */ 0, + /* num_templates */ 0, + /* templates */ TemplateIndex(/* invalid */), + /* parameters */ ParameterIndex(417), + /* return_matcher_indices */ MatcherIndicesIndex(7), + /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), + }, + { + /* [131] */ + /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), + /* num_parameters */ 1, + /* num_explicit_templates */ 1, + /* num_templates */ 1, + /* templates */ TemplateIndex(29), + /* parameters */ ParameterIndex(259), + /* return_matcher_indices */ MatcherIndicesIndex(4), + /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), + }, + { + /* [132] */ + /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), + /* num_parameters */ 1, + /* num_explicit_templates */ 1, + /* num_templates */ 1, + /* templates */ TemplateIndex(30), + /* parameters */ ParameterIndex(259), + /* return_matcher_indices */ MatcherIndicesIndex(4), + /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), + }, + { + /* [133] */ + /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 2, /* num_explicit_templates */ 0, /* num_templates */ 3, @@ -5150,7 +5206,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [130] */ + /* [134] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5161,7 +5217,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [131] */ + /* [135] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5172,7 +5228,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [132] */ + /* [136] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5183,7 +5239,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [133] */ + /* [137] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5194,7 +5250,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [134] */ + /* [138] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5205,7 +5261,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [135] */ + /* [139] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5216,7 +5272,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [136] */ + /* [140] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5227,7 +5283,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [137] */ + /* [141] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5238,7 +5294,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [138] */ + /* [142] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5249,7 +5305,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [139] */ + /* [143] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5260,7 +5316,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [140] */ + /* [144] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5271,7 +5327,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [141] */ + /* [145] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5282,7 +5338,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [142] */ + /* [146] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 4, /* num_explicit_templates */ 0, @@ -5293,7 +5349,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [143] */ + /* [147] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 5, /* num_explicit_templates */ 0, @@ -5304,7 +5360,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [144] */ + /* [148] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5315,7 +5371,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [145] */ + /* [149] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 4, /* num_explicit_templates */ 0, @@ -5326,7 +5382,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [146] */ + /* [150] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5337,7 +5393,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [147] */ + /* [151] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5348,7 +5404,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [148] */ + /* [152] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5359,7 +5415,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [149] */ + /* [153] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5370,7 +5426,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [150] */ + /* [154] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5381,7 +5437,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [151] */ + /* [155] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5392,7 +5448,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [152] */ + /* [156] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5403,7 +5459,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [153] */ + /* [157] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5414,7 +5470,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [154] */ + /* [158] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5425,7 +5481,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [155] */ + /* [159] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5436,7 +5492,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [156] */ + /* [160] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5447,7 +5503,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [157] */ + /* [161] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 1, /* num_explicit_templates */ 0, @@ -5458,7 +5514,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [158] */ + /* [162] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline), /* num_parameters */ 0, /* num_explicit_templates */ 0, @@ -5469,7 +5525,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [159] */ + /* [163] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5480,7 +5536,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [160] */ + /* [164] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5491,7 +5547,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [161] */ + /* [165] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5502,7 +5558,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [162] */ + /* [166] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5513,7 +5569,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [163] */ + /* [167] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5524,7 +5580,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [164] */ + /* [168] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5535,7 +5591,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [165] */ + /* [169] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 2, /* num_explicit_templates */ 0, @@ -5546,7 +5602,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [166] */ + /* [170] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5557,7 +5613,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [167] */ + /* [171] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5568,7 +5624,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [168] */ + /* [172] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5579,7 +5635,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [169] */ + /* [173] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5590,7 +5646,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [170] */ + /* [174] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5601,7 +5657,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [171] */ + /* [175] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5612,7 +5668,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [172] */ + /* [176] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5623,7 +5679,7 @@ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */), }, { - /* [173] */ + /* [177] */ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction), /* num_parameters */ 3, /* num_explicit_templates */ 0, @@ -5644,103 +5700,103 @@ /* fn asint[T : f32_u32](T) -> i32 */ /* fn asint[T : f32_u32, N : num](vec<N, T>) -> vec<N, i32> */ /* num overloads */ 2, - /* overloads */ OverloadIndex(132), + /* overloads */ OverloadIndex(136), }, { /* [1] */ /* fn asuint[T : f32_i32](T) -> u32 */ /* fn asuint[T : f32_i32, N : num](vec<N, T>) -> vec<N, u32> */ /* num overloads */ 2, - /* overloads */ OverloadIndex(134), + /* overloads */ OverloadIndex(138), }, { /* [2] */ /* fn asfloat[T : iu32](T) -> f32 */ /* fn asfloat[T : iu32, N : num](vec<N, T>) -> vec<N, f32> */ /* num overloads */ 2, - /* overloads */ OverloadIndex(136), + /* overloads */ OverloadIndex(140), }, { /* [3] */ /* fn dot4add_i8packed(u32, u32, ptr<function, i32, writable>) -> i32 */ /* num overloads */ 1, - /* overloads */ OverloadIndex(152), + /* overloads */ OverloadIndex(156), }, { /* [4] */ /* fn dot4add_u8packed(u32, u32, ptr<function, u32, writable>) -> u32 */ /* num overloads */ 1, - /* overloads */ OverloadIndex(153), + /* overloads */ OverloadIndex(157), }, { /* [5] */ /* fn f32tof16(f32) -> u32 */ /* fn f32tof16[N : num](vec<N, f32>) -> vec<N, u32> */ /* num overloads */ 2, - /* overloads */ OverloadIndex(138), + /* overloads */ OverloadIndex(142), }, { /* [6] */ /* fn f16tof32(u32) -> f32 */ /* fn f16tof32[N : num](vec<N, u32>) -> vec<N, f32> */ /* num overloads */ 2, - /* overloads */ OverloadIndex(140), + /* overloads */ OverloadIndex(144), }, { /* [7] */ /* fn InterlockedCompareExchange[T : iu32](ptr<workgroup, atomic<T>, read_write>, compare_value: iu32, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* fn InterlockedCompareExchange(byte_address_buffer<read_write>, offset: iu32, compare_value: iu32, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* num overloads */ 2, - /* overloads */ OverloadIndex(142), + /* overloads */ OverloadIndex(146), }, { /* [8] */ /* fn InterlockedExchange[T : iu32](ptr<workgroup, atomic<T>, read_write>, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* fn InterlockedExchange(byte_address_buffer<readable>, offset: iu32, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* num overloads */ 2, - /* overloads */ OverloadIndex(144), + /* overloads */ OverloadIndex(148), }, { /* [9] */ /* fn InterlockedAdd[T : iu32](ptr<workgroup, atomic<T>, read_write>, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* fn InterlockedAdd(byte_address_buffer<readable>, offset: iu32, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* num overloads */ 2, - /* overloads */ OverloadIndex(144), + /* overloads */ OverloadIndex(148), }, { /* [10] */ /* fn InterlockedMax[T : iu32](ptr<workgroup, atomic<T>, read_write>, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* fn InterlockedMax(byte_address_buffer<readable>, offset: iu32, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* num overloads */ 2, - /* overloads */ OverloadIndex(144), + /* overloads */ OverloadIndex(148), }, { /* [11] */ /* fn InterlockedMin[T : iu32](ptr<workgroup, atomic<T>, read_write>, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* fn InterlockedMin(byte_address_buffer<readable>, offset: iu32, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* num overloads */ 2, - /* overloads */ OverloadIndex(144), + /* overloads */ OverloadIndex(148), }, { /* [12] */ /* fn InterlockedAnd[T : iu32](ptr<workgroup, atomic<T>, read_write>, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* fn InterlockedAnd(byte_address_buffer<readable>, offset: iu32, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* num overloads */ 2, - /* overloads */ OverloadIndex(144), + /* overloads */ OverloadIndex(148), }, { /* [13] */ /* fn InterlockedOr[T : iu32](ptr<workgroup, atomic<T>, read_write>, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* fn InterlockedOr(byte_address_buffer<readable>, offset: iu32, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* num overloads */ 2, - /* overloads */ OverloadIndex(144), + /* overloads */ OverloadIndex(148), }, { /* [14] */ /* fn InterlockedXor[T : iu32](ptr<workgroup, atomic<T>, read_write>, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* fn InterlockedXor(byte_address_buffer<readable>, offset: iu32, value: iu32, original_value: ptr<function, iu32, read_write>) */ /* num overloads */ 2, - /* overloads */ OverloadIndex(144), + /* overloads */ OverloadIndex(148), }, { /* [15] */ @@ -5748,35 +5804,44 @@ /* fn mul[T : f32_f16, C : num, R : num](vec<R, T>, mat<R, C, T>) -> vec<C, T> */ /* fn mul[T : f32_f16, K : num, C : num, R : num](mat<R, K, T>, mat<K, C, T>) -> mat<R, C, T> */ /* num overloads */ 3, - /* overloads */ OverloadIndex(129), + /* overloads */ OverloadIndex(133), }, { /* [16] */ /* fn pack_u8(vec4<u32>) -> uint8_t4_packed */ /* num overloads */ 1, - /* overloads */ OverloadIndex(154), + /* overloads */ OverloadIndex(158), }, { /* [17] */ /* fn pack_s8(vec4<i32>) -> int8_t4_packed */ /* num overloads */ 1, - /* overloads */ OverloadIndex(155), + /* overloads */ OverloadIndex(159), }, { /* [18] */ /* fn pack_clamp_s8(vec4<i32>) -> int8_t4_packed */ /* num overloads */ 1, - /* overloads */ OverloadIndex(155), + /* overloads */ OverloadIndex(159), }, { /* [19] */ - /* fn sign[T : fi32_f16](T) -> i32 */ - /* fn sign[N : num, T : fi32_f16](vec<N, T>) -> vec<N, i32> */ - /* num overloads */ 2, - /* overloads */ OverloadIndex(146), + /* fn convert(int8_t4_packed) -> u32 */ + /* fn convert(uint8_t4_packed) -> u32 */ + /* fn convert<T : int8_t4_packed>(u32) -> T */ + /* fn convert<T : uint8_t4_packed>(u32) -> T */ + /* num overloads */ 4, + /* overloads */ OverloadIndex(129), }, { /* [20] */ + /* fn sign[T : fi32_f16](T) -> i32 */ + /* fn sign[N : num, T : fi32_f16](vec<N, T>) -> vec<N, i32> */ + /* num overloads */ 2, + /* overloads */ OverloadIndex(150), + }, + { + /* [21] */ /* fn textureStore[C : iu32](texture: rasterizer_ordered_texture_2d<f32_texel_format>, coords: vec2<C>, value: vec4<f32>) */ /* fn textureStore[C : iu32](texture: rasterizer_ordered_texture_2d<i32_texel_format>, coords: vec2<C>, value: vec4<i32>) */ /* fn textureStore[C : iu32](texture: rasterizer_ordered_texture_2d<u32_texel_format>, coords: vec2<C>, value: vec4<u32>) */ @@ -5796,52 +5861,52 @@ /* overloads */ OverloadIndex(51), }, { - /* [21] */ + /* [22] */ /* fn unpack_s8s32(int8_t4_packed) -> vec4<i32> */ /* num overloads */ 1, - /* overloads */ OverloadIndex(156), - }, - { - /* [22] */ - /* fn unpack_u8u32(uint8_t4_packed) -> vec4<u32> */ - /* num overloads */ 1, - /* overloads */ OverloadIndex(157), + /* overloads */ OverloadIndex(160), }, { /* [23] */ - /* fn WaveGetLaneIndex() -> u32 */ + /* fn unpack_u8u32(uint8_t4_packed) -> vec4<u32> */ /* num overloads */ 1, - /* overloads */ OverloadIndex(158), + /* overloads */ OverloadIndex(161), }, { /* [24] */ - /* fn WaveGetLaneCount() -> u32 */ + /* fn WaveGetLaneIndex() -> u32 */ /* num overloads */ 1, - /* overloads */ OverloadIndex(158), + /* overloads */ OverloadIndex(162), }, { /* [25] */ - /* fn WaveReadLaneAt[T : fiu32_f16](T, u32) -> T */ - /* fn WaveReadLaneAt[N : num, T : fiu32_f16](vec<N, T>, u32) -> vec<N, T> */ - /* num overloads */ 2, - /* overloads */ OverloadIndex(148), + /* fn WaveGetLaneCount() -> u32 */ + /* num overloads */ 1, + /* overloads */ OverloadIndex(162), }, { /* [26] */ - /* fn modf[T : f32_f16](T, T) -> T */ - /* fn modf[N : num, T : f32_f16](vec<N, T>, vec<N, T>) -> vec<N, T> */ + /* fn WaveReadLaneAt[T : fiu32_f16](T, u32) -> T */ + /* fn WaveReadLaneAt[N : num, T : fiu32_f16](vec<N, T>, u32) -> vec<N, T> */ /* num overloads */ 2, - /* overloads */ OverloadIndex(150), + /* overloads */ OverloadIndex(152), }, { /* [27] */ - /* fn frexp[T : f32_f16](T, T) -> T */ - /* fn frexp[N : num, T : f32_f16](vec<N, T>, vec<N, T>) -> vec<N, T> */ + /* fn modf[T : f32_f16](T, T) -> T */ + /* fn modf[N : num, T : f32_f16](vec<N, T>, vec<N, T>) -> vec<N, T> */ /* num overloads */ 2, - /* overloads */ OverloadIndex(150), + /* overloads */ OverloadIndex(154), }, { /* [28] */ + /* fn frexp[T : f32_f16](T, T) -> T */ + /* fn frexp[N : num, T : f32_f16](vec<N, T>, vec<N, T>) -> vec<N, T> */ + /* num overloads */ 2, + /* overloads */ OverloadIndex(154), + }, + { + /* [29] */ /* fn Load(byte_address_buffer<readable>, offset: u32) -> u32 */ /* fn Load[T : fiu32](texture: texture_1d<T>, location: vec2<i32>) -> vec4<T> */ /* fn Load[T : fiu32](texture: texture_2d<T>, location: vec3<i32>) -> vec4<T> */ @@ -5870,97 +5935,97 @@ /* overloads */ OverloadIndex(27), }, { - /* [29] */ - /* fn Load2(byte_address_buffer<readable>, offset: u32) -> vec2<u32> */ - /* num overloads */ 1, - /* overloads */ OverloadIndex(159), - }, - { /* [30] */ - /* fn Load3(byte_address_buffer<readable>, offset: u32) -> vec3<u32> */ - /* num overloads */ 1, - /* overloads */ OverloadIndex(160), - }, - { - /* [31] */ - /* fn Load4(byte_address_buffer<readable>, offset: u32) -> vec4<u32> */ - /* num overloads */ 1, - /* overloads */ OverloadIndex(161), - }, - { - /* [32] */ - /* fn LoadF16(byte_address_buffer<readable>, offset: u32) -> f16 */ - /* num overloads */ 1, - /* overloads */ OverloadIndex(162), - }, - { - /* [33] */ - /* fn Load2F16(byte_address_buffer<readable>, offset: u32) -> vec2<f16> */ + /* fn Load2(byte_address_buffer<readable>, offset: u32) -> vec2<u32> */ /* num overloads */ 1, /* overloads */ OverloadIndex(163), }, { - /* [34] */ - /* fn Load3F16(byte_address_buffer<readable>, offset: u32) -> vec3<f16> */ + /* [31] */ + /* fn Load3(byte_address_buffer<readable>, offset: u32) -> vec3<u32> */ /* num overloads */ 1, /* overloads */ OverloadIndex(164), }, { - /* [35] */ - /* fn Load4F16(byte_address_buffer<readable>, offset: u32) -> vec4<f16> */ + /* [32] */ + /* fn Load4(byte_address_buffer<readable>, offset: u32) -> vec4<u32> */ /* num overloads */ 1, /* overloads */ OverloadIndex(165), }, { - /* [36] */ - /* fn Store(byte_address_buffer<writable>, offset: u32, value: u32) */ + /* [33] */ + /* fn LoadF16(byte_address_buffer<readable>, offset: u32) -> f16 */ /* num overloads */ 1, /* overloads */ OverloadIndex(166), }, { - /* [37] */ - /* fn Store2(byte_address_buffer<writable>, offset: u32, value: vec2<u32>) */ + /* [34] */ + /* fn Load2F16(byte_address_buffer<readable>, offset: u32) -> vec2<f16> */ /* num overloads */ 1, /* overloads */ OverloadIndex(167), }, { - /* [38] */ - /* fn Store3(byte_address_buffer<writable>, offset: u32, value: vec3<u32>) */ + /* [35] */ + /* fn Load3F16(byte_address_buffer<readable>, offset: u32) -> vec3<f16> */ /* num overloads */ 1, /* overloads */ OverloadIndex(168), }, { - /* [39] */ - /* fn Store4(byte_address_buffer<writable>, offset: u32, value: vec4<u32>) */ + /* [36] */ + /* fn Load4F16(byte_address_buffer<readable>, offset: u32) -> vec4<f16> */ /* num overloads */ 1, /* overloads */ OverloadIndex(169), }, { - /* [40] */ - /* fn StoreF16(byte_address_buffer<writable>, offset: u32, value: f16) */ + /* [37] */ + /* fn Store(byte_address_buffer<writable>, offset: u32, value: u32) */ /* num overloads */ 1, /* overloads */ OverloadIndex(170), }, { - /* [41] */ - /* fn Store2F16(byte_address_buffer<writable>, offset: u32, value: vec2<f16>) */ + /* [38] */ + /* fn Store2(byte_address_buffer<writable>, offset: u32, value: vec2<u32>) */ /* num overloads */ 1, /* overloads */ OverloadIndex(171), }, { - /* [42] */ - /* fn Store3F16(byte_address_buffer<writable>, offset: u32, value: vec3<f16>) */ + /* [39] */ + /* fn Store3(byte_address_buffer<writable>, offset: u32, value: vec3<u32>) */ /* num overloads */ 1, /* overloads */ OverloadIndex(172), }, { - /* [43] */ - /* fn Store4F16(byte_address_buffer<writable>, offset: u32, value: vec4<f16>) */ + /* [40] */ + /* fn Store4(byte_address_buffer<writable>, offset: u32, value: vec4<u32>) */ /* num overloads */ 1, /* overloads */ OverloadIndex(173), }, { + /* [41] */ + /* fn StoreF16(byte_address_buffer<writable>, offset: u32, value: f16) */ + /* num overloads */ 1, + /* overloads */ OverloadIndex(174), + }, + { + /* [42] */ + /* fn Store2F16(byte_address_buffer<writable>, offset: u32, value: vec2<f16>) */ + /* num overloads */ 1, + /* overloads */ OverloadIndex(175), + }, + { + /* [43] */ + /* fn Store3F16(byte_address_buffer<writable>, offset: u32, value: vec3<f16>) */ + /* num overloads */ 1, + /* overloads */ OverloadIndex(176), + }, + { /* [44] */ + /* fn Store4F16(byte_address_buffer<writable>, offset: u32, value: vec4<f16>) */ + /* num overloads */ 1, + /* overloads */ OverloadIndex(177), + }, + { + /* [45] */ /* fn GatherCmp(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> vec4<f32> */ /* fn GatherCmp(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, offset: vec2<i32>) -> vec4<f32> */ /* fn GatherCmp(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> vec4<f32> */ @@ -5971,7 +6036,7 @@ /* overloads */ OverloadIndex(111), }, { - /* [45] */ + /* [46] */ /* fn Gather(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>) -> vec4<f32> */ /* fn Gather(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<f32> */ /* fn Gather(texture: texture_depth_2d_array, sampler: sampler, coords: vec3<f32>) -> vec4<f32> */ @@ -5982,7 +6047,7 @@ /* overloads */ OverloadIndex(75), }, { - /* [46] */ + /* [47] */ /* fn GatherAlpha[T : fiu32](texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>) -> vec4<T> */ /* fn GatherAlpha[T : fiu32](texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<T> */ /* fn GatherAlpha[T : fiu32](texture: texture_2d_array<T>, sampler: sampler, coords: vec3<f32>) -> vec4<T> */ @@ -5993,7 +6058,7 @@ /* overloads */ OverloadIndex(117), }, { - /* [47] */ + /* [48] */ /* fn GatherBlue[T : fiu32](texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>) -> vec4<T> */ /* fn GatherBlue[T : fiu32](texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<T> */ /* fn GatherBlue[T : fiu32](texture: texture_2d_array<T>, sampler: sampler, coords: vec3<f32>) -> vec4<T> */ @@ -6004,7 +6069,7 @@ /* overloads */ OverloadIndex(117), }, { - /* [48] */ + /* [49] */ /* fn GatherGreen[T : fiu32](texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>) -> vec4<T> */ /* fn GatherGreen[T : fiu32](texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<T> */ /* fn GatherGreen[T : fiu32](texture: texture_2d_array<T>, sampler: sampler, coords: vec3<f32>) -> vec4<T> */ @@ -6015,7 +6080,7 @@ /* overloads */ OverloadIndex(117), }, { - /* [49] */ + /* [50] */ /* fn GatherRed[T : fiu32](texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>) -> vec4<T> */ /* fn GatherRed[T : fiu32](texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<T> */ /* fn GatherRed[T : fiu32](texture: texture_2d_array<T>, sampler: sampler, coords: vec3<f32>) -> vec4<T> */ @@ -6026,7 +6091,7 @@ /* overloads */ OverloadIndex(117), }, { - /* [50] */ + /* [51] */ /* fn GetDimensions[A : access](byte_address_buffer<A>, width: ptr<function, u32, writable>) */ /* fn GetDimensions[T : fiu32](texture: texture_1d<T>, width: ptr<function, u32, writable>) */ /* fn GetDimensions[T : fiu32](texture: texture_1d<T>, level: u32, width: ptr<function, u32, writable>, num_levels: ptr<function, u32, writable>) */ @@ -6058,7 +6123,7 @@ /* overloads */ OverloadIndex(0), }, { - /* [51] */ + /* [52] */ /* fn Sample(texture: texture_1d<f32>, sampler: sampler, coords: f32) -> vec4<f32> */ /* fn Sample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>) -> vec4<f32> */ /* fn Sample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, offset: vec2<i32>) -> vec4<f32> */ @@ -6078,7 +6143,7 @@ /* overloads */ OverloadIndex(66), }, { - /* [52] */ + /* [53] */ /* fn SampleBias(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: f32) -> vec4<f32> */ /* fn SampleBias(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: f32, offset: vec2<i32>) -> vec4<f32> */ /* fn SampleBias(texture: texture_2d_array<f32>, sampler: sampler, coords: vec3<f32>, bias: f32) -> vec4<f32> */ @@ -6091,7 +6156,7 @@ /* overloads */ OverloadIndex(95), }, { - /* [53] */ + /* [54] */ /* fn SampleCmp(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, value: f32) -> f32 */ /* fn SampleCmp(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, value: f32, offset: vec2<i32>) -> f32 */ /* fn SampleCmp(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec3<f32>, value: f32) -> f32 */ @@ -6102,7 +6167,7 @@ /* overloads */ OverloadIndex(123), }, { - /* [54] */ + /* [55] */ /* fn SampleCmpLevelZero(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, value: f32) -> f32 */ /* fn SampleCmpLevelZero(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, value: f32, offset: vec2<i32>) -> f32 */ /* fn SampleCmpLevelZero(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec3<f32>, value: f32) -> f32 */ @@ -6113,7 +6178,7 @@ /* overloads */ OverloadIndex(123), }, { - /* [55] */ + /* [56] */ /* fn SampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32> */ /* fn SampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>, offset: vec2<i32>) -> vec4<f32> */ /* fn SampleGrad(texture: texture_2d_array<f32>, sampler: sampler, coords: vec3<f32>, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32> */ @@ -6126,7 +6191,7 @@ /* overloads */ OverloadIndex(103), }, { - /* [56] */ + /* [57] */ /* fn SampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32) -> vec4<f32> */ /* fn SampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32, offset: vec2<i32>) -> vec4<f32> */ /* fn SampleLevel(texture: texture_2d_array<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32> */
diff --git a/src/tint/lang/hlsl/writer/printer/printer.cc b/src/tint/lang/hlsl/writer/printer/printer.cc index 4ca7bca..8f8ad4c 100644 --- a/src/tint/lang/hlsl/writer/printer/printer.cc +++ b/src/tint/lang/hlsl/writer/printer/printer.cc
@@ -791,6 +791,14 @@ return; } + if (c->Func() == hlsl::BuiltinFn::kConvert) { + EmitType(out, c->Result(0)->Type()); + out << "("; + EmitValue(out, c->Operand(0)); + out << ")"; + return; + } + out << c->Func() << "("; bool needs_comma = false; for (const auto* arg : c->Args()) {
diff --git a/src/tint/lang/hlsl/writer/raise/builtin_polyfill.cc b/src/tint/lang/hlsl/writer/raise/builtin_polyfill.cc index 8c118d5..747a40a 100644 --- a/src/tint/lang/hlsl/writer/raise/builtin_polyfill.cc +++ b/src/tint/lang/hlsl/writer/raise/builtin_polyfill.cc
@@ -1692,7 +1692,7 @@ b.InsertBefore(call, [&] { auto* type = ty.Get<hlsl::type::Int8T4Packed>(); auto* packed = b.Call<hlsl::ir::BuiltinCall>(type, hlsl::BuiltinFn::kPackS8, args[0]); - auto* conv = b.Convert(ty.u32(), packed); + auto* conv = b.Call<hlsl::ir::BuiltinCall>(ty.u32(), hlsl::BuiltinFn::kConvert, packed); call->Result(0)->ReplaceAllUsesWith(conv->Result(0)); }); @@ -1703,7 +1703,8 @@ auto args = call->Args(); b.InsertBefore(call, [&] { auto* type = ty.Get<hlsl::type::Int8T4Packed>(); - auto* conv = b.Convert(type, args[0]); + auto* conv = b.CallExplicit<hlsl::ir::BuiltinCall>(type, hlsl::BuiltinFn::kConvert, + Vector{type}, args[0]); b.CallWithResult<hlsl::ir::BuiltinCall>(call->DetachResult(), hlsl::BuiltinFn::kUnpackS8S32, conv); @@ -1716,7 +1717,7 @@ b.InsertBefore(call, [&] { auto* type = ty.Get<hlsl::type::Uint8T4Packed>(); auto* packed = b.Call<hlsl::ir::BuiltinCall>(type, hlsl::BuiltinFn::kPackU8, args[0]); - auto* conv = b.Convert(ty.u32(), packed); + auto* conv = b.Call<hlsl::ir::BuiltinCall>(ty.u32(), hlsl::BuiltinFn::kConvert, packed); call->Result(0)->ReplaceAllUsesWith(conv->Result(0)); }); @@ -1727,7 +1728,8 @@ auto args = call->Args(); b.InsertBefore(call, [&] { auto* type = ty.Get<hlsl::type::Uint8T4Packed>(); - auto* conv = b.Convert(type, args[0]); + auto* conv = b.CallExplicit<hlsl::ir::BuiltinCall>(type, hlsl::BuiltinFn::kConvert, + Vector{type}, args[0]); b.CallWithResult<hlsl::ir::BuiltinCall>(call->DetachResult(), hlsl::BuiltinFn::kUnpackU8U32, conv); @@ -1741,7 +1743,7 @@ auto* type = ty.Get<hlsl::type::Int8T4Packed>(); auto* packed = b.Call<hlsl::ir::BuiltinCall>(type, hlsl::BuiltinFn::kPackClampS8, args[0]); - auto* conv = b.Convert(ty.u32(), packed); + auto* conv = b.Call<hlsl::ir::BuiltinCall>(ty.u32(), hlsl::BuiltinFn::kConvert, packed); call->Result(0)->ReplaceAllUsesWith(conv->Result(0)); });
diff --git a/src/tint/lang/hlsl/writer/raise/builtin_polyfill_test.cc b/src/tint/lang/hlsl/writer/raise/builtin_polyfill_test.cc index 65b2f52..48f7fe7 100644 --- a/src/tint/lang/hlsl/writer/raise/builtin_polyfill_test.cc +++ b/src/tint/lang/hlsl/writer/raise/builtin_polyfill_test.cc
@@ -6588,7 +6588,7 @@ %u:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(2i) %3:vec4<i32> = load %u %4:hlsl.int8_t4_packed = hlsl.pack_s8 %3 - %5:u32 = convert %4 + %5:u32 = hlsl.convert %4 %a:u32 = let %5 ret } @@ -6625,7 +6625,7 @@ $B1: { %u:ptr<function, u32, read_write> = var, 2u %3:u32 = load %u - %4:hlsl.int8_t4_packed = convert %3 + %4:hlsl.int8_t4_packed = hlsl.convert %3 %5:vec4<i32> = hlsl.unpack_s8s32 %4 %a:vec4<i32> = let %5 ret @@ -6664,7 +6664,7 @@ %u:ptr<function, vec4<u32>, read_write> = var, vec4<u32>(2u) %3:vec4<u32> = load %u %4:hlsl.uint8_t4_packed = hlsl.pack_u8 %3 - %5:u32 = convert %4 + %5:u32 = hlsl.convert %4 %a:u32 = let %5 ret } @@ -6701,7 +6701,7 @@ $B1: { %u:ptr<function, u32, read_write> = var, 2u %3:u32 = load %u - %4:hlsl.uint8_t4_packed = convert %3 + %4:hlsl.uint8_t4_packed = hlsl.convert %3 %5:vec4<u32> = hlsl.unpack_u8u32 %4 %a:vec4<u32> = let %5 ret @@ -6815,7 +6815,7 @@ %u:ptr<function, vec4<i32>, read_write> = var, vec4<i32>(2i) %3:vec4<i32> = load %u %4:hlsl.int8_t4_packed = hlsl.pack_clamp_s8 %3 - %5:u32 = convert %4 + %5:u32 = hlsl.convert %4 %a:u32 = let %5 ret }