[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
}